Changeset View
Changeset View
Standalone View
Standalone View
src/models/trackmetadatamodel.cpp
Show First 20 Lines • Show All 44 Lines • ▼ Show 20 Line(s) | 39 | { | |||
---|---|---|---|---|---|
45 | { | 45 | { | ||
46 | case Qt::DisplayRole: | 46 | case Qt::DisplayRole: | ||
47 | result = mTrackData[currentKey]; | 47 | result = mTrackData[currentKey]; | ||
48 | break; | 48 | break; | ||
49 | case ItemNameRole: | 49 | case ItemNameRole: | ||
50 | switch (currentKey) | 50 | switch (currentKey) | ||
51 | { | 51 | { | ||
52 | case DatabaseInterface::TitleRole: | 52 | case DatabaseInterface::TitleRole: | ||
53 | result = i18nc("Track title for track metadata view", "Title:"); | 53 | result = i18nc("Track title for track metadata view", "Title"); | ||
54 | break; | 54 | break; | ||
55 | case DatabaseInterface::DurationRole: | 55 | case DatabaseInterface::DurationRole: | ||
56 | result = i18nc("Duration label for track metadata view", "Duration:"); | 56 | result = i18nc("Duration label for track metadata view", "Duration"); | ||
57 | break; | 57 | break; | ||
58 | case DatabaseInterface::ArtistRole: | 58 | case DatabaseInterface::ArtistRole: | ||
59 | result = i18nc("Track artist for track metadata view", "Artist:"); | 59 | result = i18nc("Track artist for track metadata view", "Artist"); | ||
60 | break; | 60 | break; | ||
61 | case DatabaseInterface::AlbumRole: | 61 | case DatabaseInterface::AlbumRole: | ||
62 | result = i18nc("Album name for track metadata view", "Album:"); | 62 | result = i18nc("Album name for track metadata view", "Album"); | ||
63 | break; | 63 | break; | ||
64 | case DatabaseInterface::AlbumArtistRole: | 64 | case DatabaseInterface::AlbumArtistRole: | ||
65 | result = i18nc("Album artist for track metadata view", "Album Artist:"); | 65 | result = i18nc("Album artist for track metadata view", "Album Artist"); | ||
66 | break; | 66 | break; | ||
67 | case DatabaseInterface::TrackNumberRole: | 67 | case DatabaseInterface::TrackNumberRole: | ||
68 | result = i18nc("Track number for track metadata view", "Track Number:"); | 68 | result = i18nc("Track number for track metadata view", "Track Number"); | ||
69 | break; | 69 | break; | ||
70 | case DatabaseInterface::DiscNumberRole: | 70 | case DatabaseInterface::DiscNumberRole: | ||
71 | result = i18nc("Disc number for track metadata view", "Disc Number:"); | 71 | result = i18nc("Disc number for track metadata view", "Disc Number"); | ||
72 | break; | 72 | break; | ||
73 | case DatabaseInterface::RatingRole: | 73 | case DatabaseInterface::RatingRole: | ||
74 | result = i18nc("Rating label for information panel", "Rating:"); | 74 | result = i18nc("Rating label for information panel", "Rating"); | ||
75 | break; | 75 | break; | ||
76 | case DatabaseInterface::GenreRole: | 76 | case DatabaseInterface::GenreRole: | ||
77 | result = i18nc("Genre label for track metadata view", "Genre:"); | 77 | result = i18nc("Genre label for track metadata view", "Genre"); | ||
78 | break; | 78 | break; | ||
79 | case DatabaseInterface::LyricistRole: | 79 | case DatabaseInterface::LyricistRole: | ||
80 | result = i18nc("Lyricist label for track metadata view", "Lyricist:"); | 80 | result = i18nc("Lyricist label for track metadata view", "Lyricist"); | ||
81 | break; | 81 | break; | ||
82 | case DatabaseInterface::ComposerRole: | 82 | case DatabaseInterface::ComposerRole: | ||
83 | result = i18nc("Composer name for track metadata view", "Composer:"); | 83 | result = i18nc("Composer name for track metadata view", "Composer"); | ||
84 | break; | 84 | break; | ||
85 | case DatabaseInterface::CommentRole: | 85 | case DatabaseInterface::CommentRole: | ||
86 | result = i18nc("Comment label for track metadata view", "Comment:"); | 86 | result = i18nc("Comment label for track metadata view", "Comment"); | ||
87 | break; | 87 | break; | ||
88 | case DatabaseInterface::YearRole: | 88 | case DatabaseInterface::YearRole: | ||
89 | result = i18nc("Year label for track metadata view", "Year:"); | 89 | result = i18nc("Year label for track metadata view", "Year"); | ||
90 | break; | 90 | break; | ||
91 | case DatabaseInterface::ChannelsRole: | 91 | case DatabaseInterface::ChannelsRole: | ||
92 | result = i18nc("Channels label for track metadata view", "Channels:"); | 92 | result = i18nc("Channels label for track metadata view", "Channels"); | ||
93 | break; | 93 | break; | ||
94 | case DatabaseInterface::BitRateRole: | 94 | case DatabaseInterface::BitRateRole: | ||
95 | result = i18nc("Bit rate label for track metadata view", "Bit Rate:"); | 95 | result = i18nc("Bit rate label for track metadata view", "Bit Rate"); | ||
96 | break; | 96 | break; | ||
97 | case DatabaseInterface::SampleRateRole: | 97 | case DatabaseInterface::SampleRateRole: | ||
98 | result = i18nc("Sample Rate label for track metadata view", "Sample Rate:"); | 98 | result = i18nc("Sample Rate label for track metadata view", "Sample Rate"); | ||
99 | break; | 99 | break; | ||
100 | case DatabaseInterface::LastPlayDate: | 100 | case DatabaseInterface::LastPlayDate: | ||
101 | result = i18nc("Last play date label for track metadata view", "Last played:"); | 101 | result = i18nc("Last play date label for track metadata view", "Last played"); | ||
102 | break; | 102 | break; | ||
103 | case DatabaseInterface::PlayCounter: | 103 | case DatabaseInterface::PlayCounter: | ||
104 | result = i18nc("Play counter label for track metadata view", "Play count:"); | 104 | result = i18nc("Play counter label for track metadata view", "Play count"); | ||
105 | break; | 105 | break; | ||
106 | case DatabaseInterface::SecondaryTextRole: | 106 | case DatabaseInterface::SecondaryTextRole: | ||
107 | case DatabaseInterface::ImageUrlRole: | 107 | case DatabaseInterface::ImageUrlRole: | ||
108 | case DatabaseInterface::ShadowForImageRole: | 108 | case DatabaseInterface::ShadowForImageRole: | ||
109 | case DatabaseInterface::ChildModelRole: | 109 | case DatabaseInterface::ChildModelRole: | ||
110 | case DatabaseInterface::StringDurationRole: | 110 | case DatabaseInterface::StringDurationRole: | ||
111 | case DatabaseInterface::MilliSecondsDurationRole: | 111 | case DatabaseInterface::MilliSecondsDurationRole: | ||
112 | case DatabaseInterface::AllArtistsRole: | 112 | case DatabaseInterface::AllArtistsRole: | ||
▲ Show 20 Lines • Show All 105 Lines • ▼ Show 20 Line(s) | 217 | { | |||
218 | auto names = QAbstractListModel::roleNames(); | 218 | auto names = QAbstractListModel::roleNames(); | ||
219 | 219 | | |||
220 | names[ItemNameRole] = "name"; | 220 | names[ItemNameRole] = "name"; | ||
221 | names[ItemTypeRole] = "type"; | 221 | names[ItemTypeRole] = "type"; | ||
222 | 222 | | |||
223 | return names; | 223 | return names; | ||
224 | } | 224 | } | ||
225 | 225 | | |||
226 | Qt::ItemFlags TrackMetadataModel::flags(const QModelIndex &index) const | | |||
227 | { | | |||
228 | if (!index.isValid()) | | |||
229 | return Qt::NoItemFlags; | | |||
230 | | ||||
231 | return Qt::ItemIsEditable | QAbstractListModel::flags(index); | | |||
232 | } | | |||
233 | | ||||
234 | QString TrackMetadataModel::fileUrl() const | 226 | QString TrackMetadataModel::fileUrl() const | ||
235 | { | 227 | { | ||
236 | return mFileUrl; | 228 | return mFileUrl; | ||
237 | } | 229 | } | ||
238 | 230 | | |||
239 | bool TrackMetadataModel::insertRows(int row, int count, const QModelIndex &parent) | 231 | const QUrl &TrackMetadataModel::coverUrl() const | ||
240 | { | 232 | { | ||
241 | beginInsertRows(parent, row, row + count - 1); | 233 | return mCoverImage; | ||
242 | endInsertRows(); | | |||
243 | | ||||
244 | return true; | | |||
245 | } | 234 | } | ||
246 | 235 | | |||
247 | bool TrackMetadataModel::removeRows(int row, int count, const QModelIndex &parent) | 236 | MusicListenersManager *TrackMetadataModel::manager() const | ||
248 | { | 237 | { | ||
249 | beginRemoveRows(parent, row, row + count - 1); | 238 | return mManager; | ||
250 | endRemoveRows(); | | |||
251 | | ||||
252 | return true; | | |||
253 | } | 239 | } | ||
254 | 240 | | |||
255 | const QUrl &TrackMetadataModel::coverUrl() const | 241 | void TrackMetadataModel::trackData(const TrackMetadataModel::TrackDataType &trackData) | ||
256 | { | 242 | { | ||
257 | return mCoverImage; | 243 | fillDataFromTrackData(trackData); | ||
258 | } | 244 | } | ||
259 | 245 | | |||
260 | void TrackMetadataModel::trackData(const TrackMetadataModel::TrackDataType &trackData) | 246 | void TrackMetadataModel::fillDataFromTrackData(const TrackMetadataModel::TrackDataType &trackData) | ||
261 | { | 247 | { | ||
262 | beginResetModel(); | 248 | beginResetModel(); | ||
263 | if (mTrackData.isValid()) { | | |||
264 | mTrackData.clear(); | 249 | mTrackData.clear(); | ||
265 | mTrackKeys.clear(); | 250 | mTrackKeys.clear(); | ||
266 | } | | |||
267 | 251 | | |||
268 | for (auto role : {DatabaseInterface::TitleRole, DatabaseInterface::ArtistRole, DatabaseInterface::AlbumRole, | 252 | for (auto role : {DatabaseInterface::TitleRole, DatabaseInterface::ArtistRole, DatabaseInterface::AlbumRole, | ||
269 | DatabaseInterface::AlbumArtistRole, DatabaseInterface::TrackNumberRole, DatabaseInterface::DiscNumberRole, | 253 | DatabaseInterface::AlbumArtistRole, DatabaseInterface::TrackNumberRole, DatabaseInterface::DiscNumberRole, | ||
270 | DatabaseInterface::RatingRole, DatabaseInterface::GenreRole, DatabaseInterface::LyricistRole, | 254 | DatabaseInterface::RatingRole, DatabaseInterface::GenreRole, DatabaseInterface::LyricistRole, | ||
271 | DatabaseInterface::ComposerRole, DatabaseInterface::CommentRole, DatabaseInterface::YearRole, | 255 | DatabaseInterface::ComposerRole, DatabaseInterface::CommentRole, DatabaseInterface::YearRole, | ||
272 | DatabaseInterface::LastPlayDate, DatabaseInterface::PlayCounter}) { | 256 | DatabaseInterface::LastPlayDate, DatabaseInterface::PlayCounter}) { | ||
273 | if (trackData.constFind(role) != trackData.constEnd()) { | 257 | if (trackData.constFind(role) != trackData.constEnd()) { | ||
274 | if (role == DatabaseInterface::RatingRole) { | 258 | if (role == DatabaseInterface::RatingRole) { | ||
275 | if (trackData[role].toInt() == 0) { | 259 | if (trackData[role].toInt() == 0) { | ||
276 | continue; | 260 | continue; | ||
277 | } | 261 | } | ||
278 | } | 262 | } | ||
279 | 263 | | |||
280 | mTrackKeys.push_back(role); | 264 | mTrackKeys.push_back(role); | ||
281 | mTrackData[role] = trackData[role]; | 265 | mTrackData[role] = trackData[role]; | ||
282 | } | 266 | } | ||
283 | } | 267 | } | ||
268 | filterDataFromTrackData(); | ||||
284 | endResetModel(); | 269 | endResetModel(); | ||
285 | 270 | | |||
286 | mCoverImage = trackData[DatabaseInterface::ImageUrlRole].toUrl(); | 271 | mCoverImage = trackData[DatabaseInterface::ImageUrlRole].toUrl(); | ||
287 | Q_EMIT coverUrlChanged(); | 272 | Q_EMIT coverUrlChanged(); | ||
288 | 273 | | |||
289 | auto rawFileUrl = trackData[DatabaseInterface::ResourceRole].toUrl(); | 274 | auto rawFileUrl = trackData[DatabaseInterface::ResourceRole].toUrl(); | ||
290 | 275 | | |||
291 | if (rawFileUrl.isLocalFile()) { | 276 | if (rawFileUrl.isLocalFile()) { | ||
292 | mFileUrl = rawFileUrl.toLocalFile(); | 277 | mFileUrl = rawFileUrl.toLocalFile(); | ||
293 | } else { | 278 | } else { | ||
294 | mFileUrl = rawFileUrl.toString(); | 279 | mFileUrl = rawFileUrl.toString(); | ||
295 | } | 280 | } | ||
296 | Q_EMIT fileUrlChanged(); | 281 | Q_EMIT fileUrlChanged(); | ||
297 | } | 282 | } | ||
298 | 283 | | |||
299 | void TrackMetadataModel::initializeByTrackId(MusicListenersManager *manager, qulonglong databaseId) | 284 | void TrackMetadataModel::filterDataFromTrackData() | ||
300 | { | 285 | { | ||
301 | manager->connectModel(&mDataLoader); | 286 | } | ||
302 | 287 | | |||
303 | connect(this, &TrackMetadataModel::needDataByDatabaseId, | 288 | void TrackMetadataModel::removeMetaData(DatabaseInterface::ColumnsRoles metaData) | ||
304 | &mDataLoader, &ModelDataLoader::loadDataByDatabaseId); | 289 | { | ||
305 | connect(&mDataLoader, &ModelDataLoader::allTrackData, | 290 | auto itMetaData = std::find(mTrackKeys.begin(), mTrackKeys.end(), metaData); | ||
306 | this, &TrackMetadataModel::trackData); | 291 | if (itMetaData == mTrackKeys.end()) { | ||
292 | return; | ||||
293 | } | ||||
307 | 294 | | |||
295 | mTrackKeys.erase(itMetaData); | ||||
296 | mTrackData.remove(metaData); | ||||
297 | } | ||||
298 | | ||||
299 | void TrackMetadataModel::initializeByTrackId(qulonglong databaseId) | ||||
300 | { | ||||
308 | Q_EMIT needDataByDatabaseId(ElisaUtils::Track, databaseId); | 301 | Q_EMIT needDataByDatabaseId(ElisaUtils::Track, databaseId); | ||
309 | } | 302 | } | ||
310 | 303 | | |||
311 | void TrackMetadataModel::initializeByTrackFileName(MusicListenersManager *manager, const QUrl &fileName) | 304 | void TrackMetadataModel::initializeByTrackFileName(const QUrl &fileName) | ||
312 | { | 305 | { | ||
313 | manager->connectModel(&mDataLoader); | 306 | Q_EMIT needDataByFileName(ElisaUtils::FileName, fileName); | ||
307 | } | ||||
308 | | ||||
309 | void TrackMetadataModel::setManager(MusicListenersManager *newManager) | ||||
310 | { | ||||
311 | if (mManager == newManager) { | ||||
312 | return; | ||||
313 | } | ||||
314 | 314 | | |||
315 | if (mManager) { | ||||
316 | disconnect(mManager); | ||||
317 | } | ||||
318 | | ||||
319 | mManager = newManager; | ||||
320 | Q_EMIT managerChanged(); | ||||
321 | | ||||
322 | if (mManager) { | ||||
323 | mManager->connectModel(&mDataLoader); | ||||
324 | | ||||
325 | connect(this, &TrackMetadataModel::needDataByDatabaseId, | ||||
326 | &mDataLoader, &ModelDataLoader::loadDataByDatabaseId); | ||||
315 | connect(this, &TrackMetadataModel::needDataByFileName, | 327 | connect(this, &TrackMetadataModel::needDataByFileName, | ||
316 | &mDataLoader, &ModelDataLoader::loadDataByFileName); | 328 | &mDataLoader, &ModelDataLoader::loadDataByFileName); | ||
317 | connect(&mDataLoader, &ModelDataLoader::allTrackData, | 329 | connect(&mDataLoader, &ModelDataLoader::allTrackData, | ||
318 | this, &TrackMetadataModel::trackData); | 330 | this, &TrackMetadataModel::trackData); | ||
319 | 331 | } | |||
320 | Q_EMIT needDataByFileName(ElisaUtils::FileName, fileName); | | |||
321 | } | 332 | } | ||
322 | 333 | | |||
323 | 334 | | |||
324 | #include "moc_trackmetadatamodel.cpp" | 335 | #include "moc_trackmetadatamodel.cpp" |