Changeset View
Changeset View
Standalone View
Standalone View
src/models/trackmetadatamodel.h
Show All 17 Lines | |||||
18 | #ifndef TRACKMETADATAMODEL_H | 18 | #ifndef TRACKMETADATAMODEL_H | ||
19 | #define TRACKMETADATAMODEL_H | 19 | #define TRACKMETADATAMODEL_H | ||
20 | 20 | | |||
21 | #include "elisaLib_export.h" | 21 | #include "elisaLib_export.h" | ||
22 | 22 | | |||
23 | #include "elisautils.h" | 23 | #include "elisautils.h" | ||
24 | #include "databaseinterface.h" | 24 | #include "databaseinterface.h" | ||
25 | #include "modeldataloader.h" | 25 | #include "modeldataloader.h" | ||
26 | #include "filescanner.h" | ||||
26 | 27 | | |||
27 | #include <QUrl> | 28 | #include <QUrl> | ||
28 | #include <QAbstractListModel> | 29 | #include <QAbstractListModel> | ||
30 | #include <QMimeDatabase> | ||||
31 | #include <QFutureWatcher> | ||||
29 | 32 | | |||
30 | class MusicListenersManager; | 33 | class MusicListenersManager; | ||
31 | 34 | | |||
32 | class ELISALIB_EXPORT TrackMetadataModel : public QAbstractListModel | 35 | class ELISALIB_EXPORT TrackMetadataModel : public QAbstractListModel | ||
33 | { | 36 | { | ||
34 | Q_OBJECT | 37 | Q_OBJECT | ||
35 | 38 | | |||
36 | Q_PROPERTY(QUrl coverUrl | 39 | Q_PROPERTY(QUrl coverUrl | ||
37 | READ coverUrl | 40 | READ coverUrl | ||
38 | NOTIFY coverUrlChanged) | 41 | NOTIFY coverUrlChanged) | ||
39 | 42 | | |||
40 | Q_PROPERTY(QString fileUrl | 43 | Q_PROPERTY(QString fileUrl | ||
41 | READ fileUrl | 44 | READ fileUrl | ||
42 | NOTIFY fileUrlChanged) | 45 | NOTIFY fileUrlChanged) | ||
43 | 46 | | |||
47 | Q_PROPERTY(MusicListenersManager* manager | ||||
48 | READ manager | ||||
49 | WRITE setManager | ||||
50 | NOTIFY managerChanged) | ||||
51 | | ||||
52 | Q_PROPERTY(QString lyrics | ||||
53 | READ lyrics | ||||
54 | NOTIFY lyricsChanged) | ||||
55 | | ||||
44 | public: | 56 | public: | ||
45 | 57 | | |||
46 | enum ColumnRoles | 58 | enum ColumnRoles | ||
47 | { | 59 | { | ||
48 | ItemNameRole = Qt::UserRole + 1, | 60 | ItemNameRole = Qt::UserRole + 1, | ||
49 | ItemTypeRole, | 61 | ItemTypeRole, | ||
50 | }; | 62 | }; | ||
51 | 63 | | |||
52 | enum ItemType | 64 | enum ItemType | ||
53 | { | 65 | { | ||
54 | TextEntry, | 66 | TextEntry, | ||
55 | IntegerEntry, | 67 | IntegerEntry, | ||
56 | RatingEntry, | 68 | RatingEntry, | ||
57 | DateEntry, | 69 | DateEntry, | ||
70 | LongTextEntry, | ||||
58 | }; | 71 | }; | ||
59 | 72 | | |||
60 | Q_ENUM(ItemType) | 73 | Q_ENUM(ItemType) | ||
61 | 74 | | |||
62 | using TrackDataType = DatabaseInterface::TrackDataType; | 75 | using TrackDataType = DatabaseInterface::TrackDataType; | ||
63 | 76 | | |||
64 | explicit TrackMetadataModel(QObject *parent = nullptr); | 77 | explicit TrackMetadataModel(QObject *parent = nullptr); | ||
65 | 78 | | |||
79 | ~TrackMetadataModel() override; | ||||
80 | | ||||
66 | int rowCount(const QModelIndex &parent = QModelIndex()) const override; | 81 | int rowCount(const QModelIndex &parent = QModelIndex()) const override; | ||
67 | 82 | | |||
68 | QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override; | 83 | QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override; | ||
69 | 84 | | |||
70 | bool setData(const QModelIndex &index, const QVariant &value, | 85 | bool setData(const QModelIndex &index, const QVariant &value, | ||
71 | int role = Qt::EditRole) override; | 86 | int role = Qt::EditRole) override; | ||
72 | 87 | | |||
73 | QHash<int, QByteArray> roleNames() const override; | 88 | QHash<int, QByteArray> roleNames() const override; | ||
74 | 89 | | |||
75 | Qt::ItemFlags flags(const QModelIndex& index) const override; | | |||
76 | | ||||
77 | bool insertRows(int row, int count, const QModelIndex &parent = QModelIndex()) override; | | |||
78 | | ||||
79 | bool removeRows(int row, int count, const QModelIndex &parent = QModelIndex()) override; | | |||
80 | | ||||
81 | const QUrl& coverUrl() const; | 90 | const QUrl& coverUrl() const; | ||
82 | 91 | | |||
83 | QString fileUrl() const; | 92 | QString fileUrl() const; | ||
84 | 93 | | |||
94 | MusicListenersManager* manager() const; | ||||
95 | | ||||
96 | QString lyrics() const; | ||||
97 | | ||||
85 | Q_SIGNALS: | 98 | Q_SIGNALS: | ||
86 | 99 | | |||
87 | void needDataByDatabaseId(ElisaUtils::PlayListEntryType dataType, qulonglong databaseId); | 100 | void needDataByDatabaseId(ElisaUtils::PlayListEntryType dataType, qulonglong databaseId); | ||
88 | 101 | | |||
89 | void needDataByFileName(ElisaUtils::PlayListEntryType dataType, const QUrl &fileName); | 102 | void needDataByFileName(ElisaUtils::PlayListEntryType dataType, const QUrl &fileName); | ||
90 | 103 | | |||
91 | void coverUrlChanged(); | 104 | void coverUrlChanged(); | ||
92 | 105 | | |||
93 | void fileUrlChanged(); | 106 | void fileUrlChanged(); | ||
94 | 107 | | |||
108 | void managerChanged(); | ||||
109 | | ||||
110 | void lyricsChanged(); | ||||
111 | | ||||
95 | public Q_SLOTS: | 112 | public Q_SLOTS: | ||
96 | 113 | | |||
97 | void trackData(const TrackMetadataModel::TrackDataType &trackData); | 114 | void trackData(const TrackMetadataModel::TrackDataType &trackData); | ||
98 | 115 | | |||
99 | void initializeByTrackId(MusicListenersManager *manager, qulonglong databaseId); | 116 | void initializeByTrackId(qulonglong databaseId); | ||
117 | | ||||
118 | void initializeByTrackFileName(const QUrl &fileName); | ||||
119 | | ||||
120 | void setManager(MusicListenersManager *newManager); | ||||
121 | | ||||
122 | void setDatabase(DatabaseInterface *trackDatabase); | ||||
123 | | ||||
124 | protected: | ||||
100 | 125 | | |||
101 | void initializeByTrackFileName(MusicListenersManager *manager, const QUrl &fileName); | 126 | void fillDataFromTrackData(const TrackMetadataModel::TrackDataType &trackData); | ||
127 | | ||||
128 | virtual void filterDataFromTrackData(); | ||||
129 | | ||||
130 | void removeMetaData(DatabaseInterface::ColumnsRoles metaData); | ||||
131 | | ||||
132 | TrackDataType::mapped_type dataFromType(TrackDataType::key_type metaData) const; | ||||
133 | | ||||
134 | virtual void fillLyricsDataFromTrack(); | ||||
135 | | ||||
136 | private Q_SLOTS: | ||||
137 | | ||||
138 | void lyricsValueIsReady(); | ||||
102 | 139 | | |||
103 | private: | 140 | private: | ||
104 | 141 | | |||
142 | void initialize(MusicListenersManager *newManager, | ||||
143 | DatabaseInterface *trackDatabase); | ||||
144 | | ||||
145 | void fetchLyrics(); | ||||
146 | | ||||
147 | TrackDataType mFullData; | ||||
148 | | ||||
105 | TrackDataType mTrackData; | 149 | TrackDataType mTrackData; | ||
106 | 150 | | |||
107 | QUrl mCoverImage; | 151 | QUrl mCoverImage; | ||
108 | 152 | | |||
109 | QString mFileUrl; | 153 | QString mFileUrl; | ||
110 | 154 | | |||
111 | QList<TrackDataType::key_type> mTrackKeys; | 155 | QList<TrackDataType::key_type> mTrackKeys; | ||
112 | 156 | | |||
113 | ModelDataLoader mDataLoader; | 157 | ModelDataLoader mDataLoader; | ||
114 | 158 | | |||
159 | MusicListenersManager *mManager = nullptr; | ||||
160 | | ||||
161 | FileScanner mFileScanner; | ||||
162 | | ||||
163 | QMimeDatabase mMimeDatabase; | ||||
164 | | ||||
165 | QFutureWatcher<QString> mLyricsValueWatcher; | ||||
166 | | ||||
115 | }; | 167 | }; | ||
116 | 168 | | |||
117 | #endif // TRACKMETADATAMODEL_H | 169 | #endif // TRACKMETADATAMODEL_H |