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 | | ||||
44 | public: | 52 | public: | ||
45 | 53 | | |||
46 | enum ColumnRoles | 54 | enum ColumnRoles | ||
47 | { | 55 | { | ||
48 | ItemNameRole = Qt::UserRole + 1, | 56 | ItemNameRole = Qt::UserRole + 1, | ||
49 | ItemTypeRole, | 57 | ItemTypeRole, | ||
50 | }; | 58 | }; | ||
51 | 59 | | |||
52 | enum ItemType | 60 | enum ItemType | ||
53 | { | 61 | { | ||
54 | TextEntry, | 62 | TextEntry, | ||
55 | IntegerEntry, | 63 | IntegerEntry, | ||
56 | RatingEntry, | 64 | RatingEntry, | ||
57 | DateEntry, | 65 | DateEntry, | ||
66 | LongTextEntry, | ||||
58 | }; | 67 | }; | ||
59 | 68 | | |||
60 | Q_ENUM(ItemType) | 69 | Q_ENUM(ItemType) | ||
61 | 70 | | |||
62 | using TrackDataType = DatabaseInterface::TrackDataType; | 71 | using TrackDataType = DatabaseInterface::TrackDataType; | ||
63 | 72 | | |||
64 | explicit TrackMetadataModel(QObject *parent = nullptr); | 73 | explicit TrackMetadataModel(QObject *parent = nullptr); | ||
65 | 74 | | |||
75 | ~TrackMetadataModel() override; | ||||
76 | | ||||
66 | int rowCount(const QModelIndex &parent = QModelIndex()) const override; | 77 | int rowCount(const QModelIndex &parent = QModelIndex()) const override; | ||
67 | 78 | | |||
68 | QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override; | 79 | QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override; | ||
69 | 80 | | |||
70 | bool setData(const QModelIndex &index, const QVariant &value, | 81 | bool setData(const QModelIndex &index, const QVariant &value, | ||
71 | int role = Qt::EditRole) override; | 82 | int role = Qt::EditRole) override; | ||
72 | 83 | | |||
73 | QHash<int, QByteArray> roleNames() const override; | 84 | QHash<int, QByteArray> roleNames() const override; | ||
74 | 85 | | |||
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; | 86 | const QUrl& coverUrl() const; | ||
82 | 87 | | |||
83 | QString fileUrl() const; | 88 | QString fileUrl() const; | ||
84 | 89 | | |||
90 | MusicListenersManager* manager() const; | ||||
91 | | ||||
85 | Q_SIGNALS: | 92 | Q_SIGNALS: | ||
86 | 93 | | |||
87 | void needDataByDatabaseId(ElisaUtils::PlayListEntryType dataType, qulonglong databaseId); | 94 | void needDataByDatabaseId(ElisaUtils::PlayListEntryType dataType, qulonglong databaseId); | ||
88 | 95 | | |||
89 | void needDataByFileName(ElisaUtils::PlayListEntryType dataType, const QUrl &fileName); | 96 | void needDataByFileName(ElisaUtils::PlayListEntryType dataType, const QUrl &fileName); | ||
90 | 97 | | |||
91 | void coverUrlChanged(); | 98 | void coverUrlChanged(); | ||
92 | 99 | | |||
93 | void fileUrlChanged(); | 100 | void fileUrlChanged(); | ||
94 | 101 | | |||
102 | void managerChanged(); | ||||
103 | | ||||
95 | public Q_SLOTS: | 104 | public Q_SLOTS: | ||
96 | 105 | | |||
97 | void trackData(const TrackMetadataModel::TrackDataType &trackData); | 106 | void trackData(const TrackMetadataModel::TrackDataType &trackData); | ||
98 | 107 | | |||
99 | void initializeByTrackId(MusicListenersManager *manager, qulonglong databaseId); | 108 | void initializeByTrackId(qulonglong databaseId); | ||
109 | | ||||
110 | void initializeByTrackFileName(const QUrl &fileName); | ||||
111 | | ||||
112 | void setManager(MusicListenersManager *newManager); | ||||
113 | | ||||
114 | void setDatabase(DatabaseInterface *trackDatabase); | ||||
115 | | ||||
116 | protected: | ||||
117 | | ||||
118 | void fillDataFromTrackData(const TrackMetadataModel::TrackDataType &trackData); | ||||
100 | 119 | | |||
101 | void initializeByTrackFileName(MusicListenersManager *manager, const QUrl &fileName); | 120 | virtual void filterDataFromTrackData(); | ||
121 | | ||||
122 | void removeMetaData(DatabaseInterface::ColumnsRoles metaData); | ||||
123 | | ||||
124 | TrackDataType::mapped_type dataFromType(TrackDataType::key_type metaData) const; | ||||
125 | | ||||
126 | private Q_SLOTS: | ||||
127 | | ||||
128 | void lyricsValueIsReady(); | ||||
102 | 129 | | |||
103 | private: | 130 | private: | ||
104 | 131 | | |||
132 | void initialize(MusicListenersManager *newManager, | ||||
133 | DatabaseInterface *trackDatabase); | ||||
134 | | ||||
135 | void fetchLyrics(); | ||||
136 | | ||||
137 | TrackDataType mFullData; | ||||
138 | | ||||
105 | TrackDataType mTrackData; | 139 | TrackDataType mTrackData; | ||
106 | 140 | | |||
107 | QUrl mCoverImage; | 141 | QUrl mCoverImage; | ||
108 | 142 | | |||
109 | QString mFileUrl; | 143 | QString mFileUrl; | ||
110 | 144 | | |||
111 | QList<TrackDataType::key_type> mTrackKeys; | 145 | QList<TrackDataType::key_type> mTrackKeys; | ||
112 | 146 | | |||
113 | ModelDataLoader mDataLoader; | 147 | ModelDataLoader mDataLoader; | ||
114 | 148 | | |||
149 | MusicListenersManager *mManager = nullptr; | ||||
150 | | ||||
151 | FileScanner mFileScanner; | ||||
152 | | ||||
153 | QMimeDatabase mMimeDatabase; | ||||
154 | | ||||
155 | QFutureWatcher<QString> mLyricsValueWatcher; | ||||
156 | | ||||
115 | }; | 157 | }; | ||
116 | 158 | | |||
117 | #endif // TRACKMETADATAMODEL_H | 159 | #endif // TRACKMETADATAMODEL_H |