-
Notifications
You must be signed in to change notification settings - Fork 13
/
Copy pathmusicdownloader.h
92 lines (69 loc) · 2.2 KB
/
musicdownloader.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
#ifndef MUSICDOWNLOADER_H
#define MUSICDOWNLOADER_H
#include <QObject>
#include <QVariant>
#include "singletonbase.h"
class MusicInfo;
class MusicDownloadItem
{
public:
enum Status {
Pending, Running, Paused, Completed, Failed
};
enum Error {
NoError, FileIOError, CanceledError, NetworkError, FileRemovedError
};
QString id;
QString name;
QString artist;
Status status;
int progress;
int size;
QString remoteUrl;
QString fileName;
int errcode;
QVariant rawData;
};
class MusicDownloadTask;
class MusicDownloader : public QObject
{
Q_OBJECT
Q_PROPERTY(QString targetDir READ targetDir WRITE setTargetDir NOTIFY targetDirChanged)
Q_PROPERTY(int quality READ quality WRITE setQuality NOTIFY qualityChanged)
public slots:
void addTask(MusicInfo* info, bool notifyDataChange = true);
void pause(const QString& id = QString());
void resume(const QString& id = QString());
void cancel(const QString& id = QString(), bool notifyDataChange = true);
void retry(const QString& id = QString(), bool notifyDataChange = true);
void removeCompletedTask(const QString& id, bool notifyDataChange = true);
public:
Q_INVOKABLE bool containsRecord(const QString& id) const;
Q_INVOKABLE bool hasRunningTask() const;
Q_INVOKABLE QString getCompletedFile(const QString& id) const;
Q_INVOKABLE QString getDownloadFileName(const QString& id) const;
QString targetDir() const;
void setTargetDir(const QString& dir);
int quality() const;
void setQuality(const int& quality);
QList<MusicDownloadItem*> getCompletedRecords(bool completed);
signals:
void targetDirChanged();
void qualityChanged();
void dataChanged(MusicDownloadItem* item = 0);
void downloadCompleted(bool success, QString musicName);
private slots:
void startNextTask();
void slotDataChanged();
void slotTaskFinished();
private:
MusicDownloader();
MusicDownloadItem* createItemFromInfo(MusicInfo* info);
QString getSaveFileName(MusicInfo* info);
private:
QList<MusicDownloadTask*> runningTasks;
int mQuality;
QString mTargetDir;
DECLARE_SINGLETON(MusicDownloader)
};
#endif // MUSICDOWNLOADER_H