Changeset View
Standalone View
src/models/trackmetadatamodel.cpp
Show All 17 Lines | |||||
18 | #include "trackmetadatamodel.h" | 18 | #include "trackmetadatamodel.h" | ||
19 | 19 | | |||
20 | #include "musiclistenersmanager.h" | 20 | #include "musiclistenersmanager.h" | ||
21 | 21 | | |||
22 | #include <KI18n/KLocalizedString> | 22 | #include <KI18n/KLocalizedString> | ||
23 | 23 | | |||
24 | #include <QtConcurrent/QtConcurrentRun> | 24 | #include <QtConcurrent/QtConcurrentRun> | ||
25 | 25 | | |||
26 | const QList<DatabaseInterface::ColumnsRoles> mFieldsForClassicTrack({DatabaseInterface::TitleRole, DatabaseInterface::ArtistRole, DatabaseInterface::AlbumRole, | ||||
27 | DatabaseInterface::AlbumArtistRole, DatabaseInterface::TrackNumberRole, DatabaseInterface::DiscNumberRole, | ||||
28 | DatabaseInterface::RatingRole, DatabaseInterface::GenreRole, DatabaseInterface::LyricistRole, | ||||
29 | DatabaseInterface::ComposerRole, DatabaseInterface::CommentRole, DatabaseInterface::YearRole, | ||||
30 | DatabaseInterface::LastPlayDate, DatabaseInterface::PlayCounter}); | ||||
31 | | ||||
32 | const QList mFieldsForRadioTrack({DatabaseInterface::TitleRole,DatabaseInterface::ResourceRole, DatabaseInterface::CommentRole, DatabaseInterface::DatabaseIdRole, | ||||
33 | DatabaseInterface::ArtistRole, DatabaseInterface::AlbumRole}); | ||||
34 | | ||||
35 | | ||||
26 | TrackMetadataModel::TrackMetadataModel(QObject *parent) | 36 | TrackMetadataModel::TrackMetadataModel(QObject *parent) | ||
27 | : QAbstractListModel(parent) | 37 | : QAbstractListModel(parent) | ||
28 | { | 38 | { | ||
29 | connect(&mLyricsValueWatcher, &QFutureWatcher<QString>::finished, | 39 | connect(&mLyricsValueWatcher, &QFutureWatcher<QString>::finished, | ||
30 | this, &TrackMetadataModel::lyricsValueIsReady); | 40 | this, &TrackMetadataModel::lyricsValueIsReady); | ||
31 | } | 41 | } | ||
32 | 42 | | |||
33 | TrackMetadataModel::~TrackMetadataModel() | 43 | TrackMetadataModel::~TrackMetadataModel() | ||
34 | { | 44 | { | ||
35 | if (mLyricsValueWatcher.isRunning() && !mLyricsValueWatcher.isFinished()) { | 45 | if (mLyricsValueWatcher.isRunning() && !mLyricsValueWatcher.isFinished()) { | ||
36 | mLyricsValueWatcher.waitForFinished(); | 46 | mLyricsValueWatcher.waitForFinished(); | ||
37 | } | 47 | } | ||
38 | } | 48 | } | ||
39 | 49 | | |||
40 | int TrackMetadataModel::rowCount(const QModelIndex &parent) const | 50 | int TrackMetadataModel::rowCount(const QModelIndex &parent) const | ||
41 | { | 51 | { | ||
42 | if (parent.isValid()) { | 52 | if (parent.isValid()) { | ||
43 | return 0; | 53 | return 0; | ||
44 | } | 54 | } | ||
45 | 55 | | |||
46 | return mTrackData.count(); | 56 | return mTrackData.count(); | ||
47 | } | 57 | } | ||
48 | 58 | | |||
49 | QVariant TrackMetadataModel::data(const QModelIndex &index, int role) const | 59 | QVariant TrackMetadataModel::dataGeneral(const QModelIndex &index, int role) const | ||
50 | { | 60 | { | ||
51 | auto result = QVariant{}; | 61 | auto result = QVariant{}; | ||
52 | 62 | | |||
53 | const auto currentKey = mTrackKeys[index.row()]; | 63 | const auto currentKey = mTrackKeys[index.row()]; | ||
54 | 64 | | |||
55 | switch (role) | 65 | switch (role) | ||
56 | { | 66 | { | ||
57 | case Qt::DisplayRole: | 67 | case Qt::DisplayRole: | ||
▲ Show 20 Lines • Show All 99 Lines • ▼ Show 20 Line(s) | 166 | case DatabaseInterface::LastPlayDate: | |||
157 | result = i18nc("Last play date label for track metadata view", "Last played"); | 167 | result = i18nc("Last play date label for track metadata view", "Last played"); | ||
158 | break; | 168 | break; | ||
159 | case DatabaseInterface::PlayCounter: | 169 | case DatabaseInterface::PlayCounter: | ||
160 | result = i18nc("Play counter label for track metadata view", "Play count"); | 170 | result = i18nc("Play counter label for track metadata view", "Play count"); | ||
161 | break; | 171 | break; | ||
162 | case DatabaseInterface::LyricsRole: | 172 | case DatabaseInterface::LyricsRole: | ||
163 | result = i18nc("Lyrics label for track metadata view", "Lyrics"); | 173 | result = i18nc("Lyrics label for track metadata view", "Lyrics"); | ||
164 | break; | 174 | break; | ||
175 | case DatabaseInterface::ResourceRole: | ||||
176 | result = i18nc("Radio HTTP address for radio metadata view", "Stream Http Address"); | ||||
177 | break; | ||||
astippich: Not needed anymore for the general case | |||||
165 | case DatabaseInterface::SecondaryTextRole: | 178 | case DatabaseInterface::SecondaryTextRole: | ||
166 | case DatabaseInterface::ImageUrlRole: | 179 | case DatabaseInterface::ImageUrlRole: | ||
167 | case DatabaseInterface::ShadowForImageRole: | 180 | case DatabaseInterface::ShadowForImageRole: | ||
168 | case DatabaseInterface::ChildModelRole: | 181 | case DatabaseInterface::ChildModelRole: | ||
169 | case DatabaseInterface::StringDurationRole: | 182 | case DatabaseInterface::StringDurationRole: | ||
170 | case DatabaseInterface::MilliSecondsDurationRole: | 183 | case DatabaseInterface::MilliSecondsDurationRole: | ||
171 | case DatabaseInterface::AllArtistsRole: | 184 | case DatabaseInterface::AllArtistsRole: | ||
172 | case DatabaseInterface::HighestTrackRating: | 185 | case DatabaseInterface::HighestTrackRating: | ||
173 | case DatabaseInterface::ResourceRole: | | |||
174 | case DatabaseInterface::IdRole: | 186 | case DatabaseInterface::IdRole: | ||
175 | case DatabaseInterface::DatabaseIdRole: | 187 | case DatabaseInterface::DatabaseIdRole: | ||
176 | case DatabaseInterface::IsSingleDiscAlbumRole: | 188 | case DatabaseInterface::IsSingleDiscAlbumRole: | ||
177 | case DatabaseInterface::ContainerDataRole: | 189 | case DatabaseInterface::ContainerDataRole: | ||
178 | case DatabaseInterface::IsPartialDataRole: | 190 | case DatabaseInterface::IsPartialDataRole: | ||
179 | case DatabaseInterface::AlbumIdRole: | 191 | case DatabaseInterface::AlbumIdRole: | ||
180 | case DatabaseInterface::HasEmbeddedCover: | 192 | case DatabaseInterface::HasEmbeddedCover: | ||
181 | case DatabaseInterface::FileModificationTime: | 193 | case DatabaseInterface::FileModificationTime: | ||
182 | case DatabaseInterface::FirstPlayDate: | 194 | case DatabaseInterface::FirstPlayDate: | ||
183 | case DatabaseInterface::PlayFrequency: | 195 | case DatabaseInterface::PlayFrequency: | ||
184 | case DatabaseInterface::ElementTypeRole: | 196 | case DatabaseInterface::ElementTypeRole: | ||
185 | break; | 197 | break; | ||
186 | } | 198 | } | ||
187 | break; | 199 | break; | ||
188 | case ItemTypeRole: | 200 | case ItemTypeRole: | ||
189 | switch (currentKey) | 201 | switch (currentKey) | ||
190 | { | 202 | { | ||
191 | case DatabaseInterface::TitleRole: | 203 | case DatabaseInterface::TitleRole: | ||
192 | result = TextEntry; | 204 | result = TextEntry; | ||
193 | break; | 205 | break; | ||
206 | case DatabaseInterface::ResourceRole: | ||||
207 | result = TextEntry; | ||||
208 | break; | ||||
194 | case DatabaseInterface::ArtistRole: | 209 | case DatabaseInterface::ArtistRole: | ||
195 | result = TextEntry; | 210 | result = TextEntry; | ||
196 | break; | 211 | break; | ||
197 | case DatabaseInterface::AlbumRole: | 212 | case DatabaseInterface::AlbumRole: | ||
198 | result = TextEntry; | 213 | result = TextEntry; | ||
199 | break; | 214 | break; | ||
200 | case DatabaseInterface::AlbumArtistRole: | 215 | case DatabaseInterface::AlbumArtistRole: | ||
201 | result = TextEntry; | 216 | result = TextEntry; | ||
Show All 38 Lines | |||||
240 | case DatabaseInterface::SecondaryTextRole: | 255 | case DatabaseInterface::SecondaryTextRole: | ||
241 | case DatabaseInterface::ImageUrlRole: | 256 | case DatabaseInterface::ImageUrlRole: | ||
242 | case DatabaseInterface::ShadowForImageRole: | 257 | case DatabaseInterface::ShadowForImageRole: | ||
243 | case DatabaseInterface::ChildModelRole: | 258 | case DatabaseInterface::ChildModelRole: | ||
244 | case DatabaseInterface::StringDurationRole: | 259 | case DatabaseInterface::StringDurationRole: | ||
245 | case DatabaseInterface::MilliSecondsDurationRole: | 260 | case DatabaseInterface::MilliSecondsDurationRole: | ||
246 | case DatabaseInterface::AllArtistsRole: | 261 | case DatabaseInterface::AllArtistsRole: | ||
247 | case DatabaseInterface::HighestTrackRating: | 262 | case DatabaseInterface::HighestTrackRating: | ||
263 | case DatabaseInterface::IdRole: | ||||
264 | case DatabaseInterface::DatabaseIdRole: | ||||
265 | case DatabaseInterface::IsSingleDiscAlbumRole: | ||||
266 | case DatabaseInterface::ContainerDataRole: | ||||
267 | case DatabaseInterface::IsPartialDataRole: | ||||
268 | case DatabaseInterface::AlbumIdRole: | ||||
269 | case DatabaseInterface::HasEmbeddedCover: | ||||
270 | case DatabaseInterface::FileModificationTime: | ||||
271 | case DatabaseInterface::FirstPlayDate: | ||||
272 | case DatabaseInterface::PlayFrequency: | ||||
273 | case DatabaseInterface::ElementTypeRole: | ||||
274 | break; | ||||
275 | } | ||||
276 | break; | ||||
277 | } | ||||
278 | | ||||
279 | return result; | ||||
280 | } | ||||
281 | | ||||
282 | QVariant TrackMetadataModel::dataRadio(const QModelIndex &index, int role) const | ||||
283 | { | ||||
284 | auto result = QVariant{}; | ||||
285 | | ||||
286 | const auto currentKey = mTrackKeys[index.row()]; | ||||
287 | | ||||
288 | switch (role) | ||||
289 | { | ||||
290 | case Qt::DisplayRole: | ||||
291 | result = mTrackData[currentKey]; | ||||
292 | break; | ||||
293 | case ItemNameRole: | ||||
294 | switch (currentKey) | ||||
295 | { | ||||
296 | case DatabaseInterface::TitleRole: | ||||
297 | result = i18nc("Track title for track metadata view", "Title"); | ||||
298 | break; | ||||
299 | case DatabaseInterface::CommentRole: | ||||
300 | result = i18nc("Comment label for track metadata view", "Comment"); | ||||
301 | break; | ||||
248 | case DatabaseInterface::ResourceRole: | 302 | case DatabaseInterface::ResourceRole: | ||
303 | result = i18nc("Radio HTTP address for radio metadata view", "Stream Http Address"); | ||||
304 | break; | ||||
305 | case DatabaseInterface::ChannelsRole: | ||||
306 | case DatabaseInterface::BitRateRole: | ||||
307 | case DatabaseInterface::SampleRateRole: | ||||
308 | case DatabaseInterface::LastPlayDate: | ||||
309 | case DatabaseInterface::PlayCounter: | ||||
310 | case DatabaseInterface::LyricsRole: | ||||
311 | case DatabaseInterface::YearRole: | ||||
312 | case DatabaseInterface::ComposerRole: | ||||
313 | case DatabaseInterface::ArtistRole: | ||||
314 | case DatabaseInterface::AlbumRole: | ||||
315 | case DatabaseInterface::AlbumArtistRole: | ||||
316 | case DatabaseInterface::TrackNumberRole: | ||||
317 | case DatabaseInterface::DiscNumberRole: | ||||
318 | case DatabaseInterface::RatingRole: | ||||
319 | case DatabaseInterface::GenreRole: | ||||
320 | case DatabaseInterface::LyricistRole: | ||||
321 | case DatabaseInterface::DurationRole: | ||||
322 | case DatabaseInterface::SecondaryTextRole: | ||||
323 | case DatabaseInterface::ImageUrlRole: | ||||
324 | case DatabaseInterface::ShadowForImageRole: | ||||
325 | case DatabaseInterface::ChildModelRole: | ||||
326 | case DatabaseInterface::StringDurationRole: | ||||
327 | case DatabaseInterface::MilliSecondsDurationRole: | ||||
328 | case DatabaseInterface::AllArtistsRole: | ||||
329 | case DatabaseInterface::HighestTrackRating: | ||||
330 | case DatabaseInterface::IdRole: | ||||
331 | case DatabaseInterface::DatabaseIdRole: | ||||
332 | case DatabaseInterface::IsSingleDiscAlbumRole: | ||||
333 | case DatabaseInterface::ContainerDataRole: | ||||
334 | case DatabaseInterface::IsPartialDataRole: | ||||
335 | case DatabaseInterface::AlbumIdRole: | ||||
336 | case DatabaseInterface::HasEmbeddedCover: | ||||
337 | case DatabaseInterface::FileModificationTime: | ||||
338 | case DatabaseInterface::FirstPlayDate: | ||||
339 | case DatabaseInterface::PlayFrequency: | ||||
340 | case DatabaseInterface::ElementTypeRole: | ||||
341 | break; | ||||
342 | } | ||||
343 | break; | ||||
344 | case ItemTypeRole: | ||||
345 | switch (currentKey) | ||||
346 | { | ||||
347 | case DatabaseInterface::TitleRole: | ||||
348 | result = TextEntry; | ||||
349 | break; | ||||
350 | case DatabaseInterface::ResourceRole: | ||||
351 | result = TextEntry; | ||||
352 | break; | ||||
353 | case DatabaseInterface::CommentRole: | ||||
354 | result = TextEntry; | ||||
355 | break; | ||||
356 | case DatabaseInterface::ArtistRole: | ||||
357 | case DatabaseInterface::AlbumRole: | ||||
358 | case DatabaseInterface::AlbumArtistRole: | ||||
359 | case DatabaseInterface::TrackNumberRole: | ||||
360 | case DatabaseInterface::DiscNumberRole: | ||||
361 | case DatabaseInterface::RatingRole: | ||||
362 | case DatabaseInterface::GenreRole: | ||||
363 | case DatabaseInterface::LyricistRole: | ||||
364 | case DatabaseInterface::ComposerRole: | ||||
365 | case DatabaseInterface::YearRole: | ||||
366 | case DatabaseInterface::LastPlayDate: | ||||
367 | case DatabaseInterface::PlayCounter: | ||||
368 | case DatabaseInterface::LyricsRole: | ||||
369 | case DatabaseInterface::DurationRole: | ||||
370 | case DatabaseInterface::SampleRateRole: | ||||
371 | case DatabaseInterface::BitRateRole: | ||||
372 | case DatabaseInterface::ChannelsRole: | ||||
373 | case DatabaseInterface::SecondaryTextRole: | ||||
374 | case DatabaseInterface::ImageUrlRole: | ||||
375 | case DatabaseInterface::ShadowForImageRole: | ||||
376 | case DatabaseInterface::ChildModelRole: | ||||
377 | case DatabaseInterface::StringDurationRole: | ||||
378 | case DatabaseInterface::MilliSecondsDurationRole: | ||||
379 | case DatabaseInterface::AllArtistsRole: | ||||
380 | case DatabaseInterface::HighestTrackRating: | ||||
249 | case DatabaseInterface::IdRole: | 381 | case DatabaseInterface::IdRole: | ||
250 | case DatabaseInterface::DatabaseIdRole: | 382 | case DatabaseInterface::DatabaseIdRole: | ||
251 | case DatabaseInterface::IsSingleDiscAlbumRole: | 383 | case DatabaseInterface::IsSingleDiscAlbumRole: | ||
252 | case DatabaseInterface::ContainerDataRole: | 384 | case DatabaseInterface::ContainerDataRole: | ||
253 | case DatabaseInterface::IsPartialDataRole: | 385 | case DatabaseInterface::IsPartialDataRole: | ||
254 | case DatabaseInterface::AlbumIdRole: | 386 | case DatabaseInterface::AlbumIdRole: | ||
255 | case DatabaseInterface::HasEmbeddedCover: | 387 | case DatabaseInterface::HasEmbeddedCover: | ||
256 | case DatabaseInterface::FileModificationTime: | 388 | case DatabaseInterface::FileModificationTime: | ||
257 | case DatabaseInterface::FirstPlayDate: | 389 | case DatabaseInterface::FirstPlayDate: | ||
258 | case DatabaseInterface::PlayFrequency: | 390 | case DatabaseInterface::PlayFrequency: | ||
259 | case DatabaseInterface::ElementTypeRole: | 391 | case DatabaseInterface::ElementTypeRole: | ||
260 | break; | 392 | break; | ||
261 | } | 393 | } | ||
262 | break; | 394 | break; | ||
263 | } | 395 | } | ||
264 | 396 | | |||
265 | return result; | 397 | return result; | ||
266 | } | 398 | } | ||
267 | 399 | | |||
400 | QVariant TrackMetadataModel::data(const QModelIndex &index, int role) const | ||||
401 | { | ||||
402 | if(this->mIsRadio){ | ||||
403 | return dataRadio(index, role); | ||||
404 | }else { | ||||
405 | return dataGeneral(index, role); | ||||
406 | } | ||||
407 | } | ||||
408 | | ||||
I have a general question about the need for a special handling of radio. I do not get what is so special that we would need a complete code duplication here. mgallien: I have a general question about the need for a special handling of radio. I do not get what is… | |||||
I experienced an issue with the meta view if I returned some data in the other roles not concerned by the radio (TitleRole, ResourceRole, CommentRole). I can take a look at the metaView to fix the issue on the UI level. jguidon: I experienced an issue with the meta view if I returned some data in the other roles not… | |||||
mgallien: What was the issue ? I can maybe provide some help here. | |||||
jguidon: I get some other fields which are not very revelant for radios editing and viewing details, for… | |||||
268 | bool TrackMetadataModel::setData(const QModelIndex &index, const QVariant &value, int role) | 409 | bool TrackMetadataModel::setData(const QModelIndex &index, const QVariant &value, int role) | ||
269 | { | 410 | { | ||
270 | if (data(index, role) != value) { | 411 | if (data(index, role) != value) { | ||
271 | // FIXME: Implement me! | 412 | mTrackData[mTrackKeys[index.row()]] = value; | ||
413 | | ||||
272 | emit dataChanged(index, index, QVector<int>() << role); | 414 | emit dataChanged(index, index, QVector<int>() << role); | ||
273 | return true; | 415 | return true; | ||
274 | } | 416 | } | ||
275 | return false; | 417 | return false; | ||
276 | } | 418 | } | ||
277 | 419 | | |||
278 | QHash<int, QByteArray> TrackMetadataModel::roleNames() const | 420 | QHash<int, QByteArray> TrackMetadataModel::roleNames() const | ||
279 | { | 421 | { | ||
Show All 40 Lines | |||||
320 | 462 | | |||
321 | void TrackMetadataModel::fillDataFromTrackData(const TrackMetadataModel::TrackDataType &trackData) | 463 | void TrackMetadataModel::fillDataFromTrackData(const TrackMetadataModel::TrackDataType &trackData) | ||
322 | { | 464 | { | ||
323 | beginResetModel(); | 465 | beginResetModel(); | ||
324 | mFullData = trackData; | 466 | mFullData = trackData; | ||
325 | mTrackData.clear(); | 467 | mTrackData.clear(); | ||
326 | mTrackKeys.clear(); | 468 | mTrackKeys.clear(); | ||
327 | 469 | | |||
328 | for (auto role : {DatabaseInterface::TitleRole, DatabaseInterface::ArtistRole, DatabaseInterface::AlbumRole, | 470 | for (DatabaseInterface::ColumnsRoles role : (isRadio() ? mFieldsForRadioTrack : mFieldsForClassicTrack)){ | ||
329 | DatabaseInterface::AlbumArtistRole, DatabaseInterface::TrackNumberRole, DatabaseInterface::DiscNumberRole, | | |||
330 | DatabaseInterface::RatingRole, DatabaseInterface::GenreRole, DatabaseInterface::LyricistRole, | | |||
331 | DatabaseInterface::ComposerRole, DatabaseInterface::CommentRole, DatabaseInterface::YearRole, | | |||
332 | DatabaseInterface::LastPlayDate, DatabaseInterface::PlayCounter}) { | | |||
333 | if (trackData.constFind(role) != trackData.constEnd()) { | 471 | if (trackData.constFind(role) != trackData.constEnd()) { | ||
334 | if (role == DatabaseInterface::RatingRole) { | 472 | if (role == DatabaseInterface::RatingRole) { | ||
335 | if (trackData[role].toInt() == 0) { | 473 | if (trackData[role].toInt() == 0) { | ||
336 | continue; | 474 | continue; | ||
I am not a fan of all these if(isRadio) {} else {} blocks. Is there a different way to achieve this? astippich: I am not a fan of all these if(isRadio) {} else {} blocks. Is there a different way to achieve… | |||||
On a further thought, we may revisit how the metadata works later, but we can leave it as is right now here astippich: On a further thought, we may revisit how the metadata works later, but we can leave it as is… | |||||
jguidon: Maybe it is more readable this way? | |||||
Yeah, much better! I think your changes makes it even possible to provide some groundwork for future metadata editing for the tracks. astippich: Yeah, much better!
I think your changes makes it even possible to provide some groundwork for… | |||||
337 | } | 475 | } | ||
338 | } | 476 | } | ||
339 | 477 | | |||
340 | mTrackKeys.push_back(role); | 478 | mTrackKeys.push_back(role); | ||
341 | mTrackData[role] = trackData[role]; | 479 | mTrackData[role] = trackData[role]; | ||
342 | } | 480 | } | ||
343 | } | 481 | } | ||
344 | filterDataFromTrackData(); | 482 | filterDataFromTrackData(); | ||
▲ Show 20 Lines • Show All 67 Lines • ▼ Show 20 Line(s) | 540 | { | |||
412 | if (mManager) { | 550 | if (mManager) { | ||
413 | mManager->connectModel(&mDataLoader); | 551 | mManager->connectModel(&mDataLoader); | ||
414 | } | 552 | } | ||
415 | 553 | | |||
416 | connect(this, &TrackMetadataModel::needDataByDatabaseId, | 554 | connect(this, &TrackMetadataModel::needDataByDatabaseId, | ||
417 | &mDataLoader, &ModelDataLoader::loadDataByDatabaseId); | 555 | &mDataLoader, &ModelDataLoader::loadDataByDatabaseId); | ||
418 | connect(this, &TrackMetadataModel::needDataByFileName, | 556 | connect(this, &TrackMetadataModel::needDataByFileName, | ||
419 | &mDataLoader, &ModelDataLoader::loadDataByFileName); | 557 | &mDataLoader, &ModelDataLoader::loadDataByFileName); | ||
420 | connect(&mDataLoader, &ModelDataLoader::allTrackData, | 558 | | ||
421 | this, &TrackMetadataModel::trackData); | | |||
mgallien: This is probably needed to get file tracks to work ? | |||||
422 | connect(&mDataLoader, &ModelDataLoader::trackModified, | 559 | connect(&mDataLoader, &ModelDataLoader::trackModified, | ||
423 | this, &TrackMetadataModel::trackData); | 560 | this, &TrackMetadataModel::trackData); | ||
561 | | ||||
562 | if(isRadio()){ | ||||
astippich: code style
if (....) { | |||||
563 | connect(this, &TrackMetadataModel::saveRadioData, | ||||
564 | &mDataLoader, &ModelDataLoader::updateRadioData); | ||||
565 | connect(this, &TrackMetadataModel::deleteRadioData, | ||||
566 | &mDataLoader, &ModelDataLoader::deleteRadioData); | ||||
567 | connect(&mDataLoader, &ModelDataLoader::allRadiosDataUIUpdate, | ||||
568 | this, &TrackMetadataModel::updateUI); | ||||
569 | connect(&mDataLoader, &ModelDataLoader::radioRemoved, | ||||
570 | this, &TrackMetadataModel::radioRemoved); | ||||
571 | connect(&mDataLoader, &ModelDataLoader::allRadioData, | ||||
572 | this, &TrackMetadataModel::trackData); | ||||
573 | }else{ | ||||
astippich: code style
} else { | |||||
574 | connect(&mDataLoader, &ModelDataLoader::allTrackData, | ||||
575 | this, &TrackMetadataModel::trackData); | ||||
576 | } | ||||
astippich: this belongs also into the "else" block below, doesn't it? | |||||
424 | } | 577 | } | ||
425 | 578 | | |||
426 | void TrackMetadataModel::fetchLyrics() | 579 | void TrackMetadataModel::fetchLyrics() | ||
427 | { | 580 | { | ||
428 | auto lyricicsValue = QtConcurrent::run(QThreadPool::globalInstance(), [=]() { | 581 | auto lyricicsValue = QtConcurrent::run(QThreadPool::globalInstance(), [=]() { | ||
429 | auto trackData = mFileScanner.scanOneFile(mFullData[DatabaseInterface::ResourceRole].toUrl(), mMimeDatabase); | 582 | auto trackData = mFileScanner.scanOneFile(mFullData[DatabaseInterface::ResourceRole].toUrl(), mMimeDatabase); | ||
430 | if (!trackData.lyrics().isEmpty()) { | 583 | if (!trackData.lyrics().isEmpty()) { | ||
431 | return trackData.lyrics(); | 584 | return trackData.lyrics(); | ||
432 | } | 585 | } | ||
433 | return QString{}; | 586 | return QString{}; | ||
434 | }); | 587 | }); | ||
435 | 588 | | |||
436 | mLyricsValueWatcher.setFuture(lyricicsValue); | 589 | mLyricsValueWatcher.setFuture(lyricicsValue); | ||
437 | } | 590 | } | ||
438 | 591 | | |||
439 | void TrackMetadataModel::initializeByTrackId(qulonglong databaseId) | 592 | void TrackMetadataModel::initializeByTrackId(qulonglong databaseId) | ||
440 | { | 593 | { | ||
441 | mFullData.clear(); | 594 | mFullData.clear(); | ||
442 | mTrackData.clear(); | 595 | mTrackData.clear(); | ||
443 | mCoverImage.clear(); | 596 | mCoverImage.clear(); | ||
444 | mFileUrl.clear(); | 597 | mFileUrl.clear(); | ||
445 | 598 | | |||
446 | Q_EMIT lyricsChanged(); | 599 | Q_EMIT lyricsChanged(); | ||
447 | 600 | | |||
448 | Q_EMIT needDataByDatabaseId(ElisaUtils::Track, databaseId); | 601 | Q_EMIT needDataByDatabaseId((isRadio() ? ElisaUtils::Radio : ElisaUtils::Track), databaseId); | ||
602 | } | ||||
603 | | ||||
604 | void TrackMetadataModel::initializeForNewRadio() | ||||
605 | { | ||||
606 | mFullData.clear(); | ||||
607 | mTrackData.clear(); | ||||
608 | | ||||
609 | fillDataForNewRadio(); | ||||
610 | } | ||||
611 | | ||||
612 | void TrackMetadataModel::fillDataForNewRadio() | ||||
613 | { | ||||
614 | beginResetModel(); | ||||
615 | mTrackData.clear(); | ||||
616 | mTrackKeys.clear(); | ||||
617 | | ||||
618 | for (auto role : { | ||||
619 | DatabaseInterface::TitleRole, | ||||
620 | DatabaseInterface::ResourceRole, | ||||
621 | DatabaseInterface::CommentRole, | ||||
622 | DatabaseInterface::DatabaseIdRole | ||||
623 | | ||||
624 | }) { | ||||
625 | mTrackKeys.push_back(role); | ||||
626 | if(role == DatabaseInterface::DatabaseIdRole){ | ||||
627 | mTrackData[role] = -1; | ||||
628 | Q_EMIT hideDeleteButton(); | ||||
629 | }else{ | ||||
630 | mTrackData[role] = QStringLiteral(""); | ||||
631 | } | ||||
632 | | ||||
633 | } | ||||
634 | filterDataFromTrackData(); | ||||
635 | endResetModel(); | ||||
449 | } | 636 | } | ||
450 | 637 | | |||
451 | void TrackMetadataModel::initializeByTrackFileName(const QString &fileName) | 638 | void TrackMetadataModel::initializeByTrackFileName(const QString &fileName) | ||
452 | { | 639 | { | ||
453 | mFullData.clear(); | 640 | mFullData.clear(); | ||
454 | mTrackData.clear(); | 641 | mTrackData.clear(); | ||
455 | mCoverImage.clear(); | 642 | mCoverImage.clear(); | ||
456 | mFileUrl.clear(); | 643 | mFileUrl.clear(); | ||
457 | 644 | | |||
458 | Q_EMIT lyricsChanged(); | 645 | Q_EMIT lyricsChanged(); | ||
459 | 646 | | |||
460 | Q_EMIT needDataByFileName(ElisaUtils::FileName, QUrl::fromLocalFile(fileName)); | 647 | Q_EMIT needDataByFileName(ElisaUtils::FileName, QUrl::fromLocalFile(fileName)); | ||
461 | } | 648 | } | ||
462 | 649 | | |||
463 | void TrackMetadataModel::setManager(MusicListenersManager *newManager) | 650 | void TrackMetadataModel::setManager(MusicListenersManager *newManager) | ||
464 | { | 651 | { | ||
465 | initialize(newManager, nullptr); | 652 | initialize(newManager, nullptr); | ||
466 | } | 653 | } | ||
467 | 654 | | |||
655 | void TrackMetadataModel::setIsRadio(bool isRadio){ | ||||
656 | this->mIsRadio = isRadio; | ||||
657 | } | ||||
658 | | ||||
468 | void TrackMetadataModel::setDatabase(DatabaseInterface *trackDatabase) | 659 | void TrackMetadataModel::setDatabase(DatabaseInterface *trackDatabase) | ||
469 | { | 660 | { | ||
470 | initialize(nullptr, trackDatabase); | 661 | initialize(nullptr, trackDatabase); | ||
471 | } | 662 | } | ||
472 | 663 | | |||
664 | bool TrackMetadataModel::isRadio(){ | ||||
665 | return this->mIsRadio; | ||||
666 | } | ||||
667 | | ||||
668 | void TrackMetadataModel::saveData() | ||||
669 | { | ||||
670 | Q_EMIT saveRadioData(mTrackData); | ||||
671 | } | ||||
672 | | ||||
673 | void TrackMetadataModel::deleteRadio() | ||||
674 | { | ||||
675 | if(mTrackData[DatabaseInterface::DatabaseIdRole]>=0){ | ||||
676 | Q_EMIT deleteRadioData(mTrackData[DatabaseInterface::DatabaseIdRole].toULongLong()); | ||||
677 | } | ||||
678 | } | ||||
679 | | ||||
680 | void TrackMetadataModel::updateUI(TrackDataType radiosData, bool isInsertion){ | ||||
681 | if(isInsertion){ | ||||
682 | mTrackData[DatabaseInterface::DatabaseIdRole] = radiosData[DatabaseInterface::DatabaseIdRole]; | ||||
683 | Q_EMIT showDeleteButton(); | ||||
684 | } | ||||
685 | Q_EMIT disableApplyButton(); | ||||
686 | } | ||||
687 | | ||||
688 | void TrackMetadataModel::radioRemoved(qulonglong radioId){ | ||||
689 | Q_EMIT closeWindow(); | ||||
690 | } | ||||
473 | 691 | | |||
474 | #include "moc_trackmetadatamodel.cpp" | 692 | #include "moc_trackmetadatamodel.cpp" |
Not needed anymore for the general case