Changeset View
Changeset View
Standalone 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> | 24 | #include <QtConcurrent> | ||
25 | 25 | | |||
26 | | ||||
27 | TrackMetadataModel::TrackMetadataModel(QObject *parent) | 26 | TrackMetadataModel::TrackMetadataModel(QObject *parent) | ||
28 | : QAbstractListModel(parent) | 27 | : QAbstractListModel(parent) | ||
29 | { | 28 | { | ||
30 | connect(&mLyricsValueWatcher, &QFutureWatcher<QString>::finished, | 29 | connect(&mLyricsValueWatcher, &QFutureWatcher<QString>::finished, | ||
31 | this, &TrackMetadataModel::lyricsValueIsReady); | 30 | this, &TrackMetadataModel::lyricsValueIsReady); | ||
32 | } | 31 | } | ||
33 | 32 | | |||
34 | TrackMetadataModel::~TrackMetadataModel() | 33 | TrackMetadataModel::~TrackMetadataModel() | ||
35 | { | 34 | { | ||
36 | if (mLyricsValueWatcher.isRunning() && !mLyricsValueWatcher.isFinished()) { | 35 | if (mLyricsValueWatcher.isRunning() && !mLyricsValueWatcher.isFinished()) { | ||
37 | mLyricsValueWatcher.waitForFinished(); | 36 | mLyricsValueWatcher.waitForFinished(); | ||
38 | } | 37 | } | ||
39 | } | 38 | } | ||
40 | 39 | | |||
41 | int TrackMetadataModel::rowCount(const QModelIndex &parent) const | 40 | int TrackMetadataModel::rowCount(const QModelIndex &parent) const | ||
42 | { | 41 | { | ||
43 | if (parent.isValid()) { | 42 | if (parent.isValid()) { | ||
44 | return 0; | 43 | return 0; | ||
45 | } | 44 | } | ||
46 | 45 | | |||
47 | return mTrackData.count(); | 46 | return mTrackData.count(); | ||
48 | } | 47 | } | ||
49 | 48 | | |||
50 | QVariant TrackMetadataModel::dataGeneral(const QModelIndex &index, int role) const | 49 | QVariant TrackMetadataModel::data(const QModelIndex &index, int role) const | ||
51 | { | 50 | { | ||
52 | auto result = QVariant{}; | 51 | auto result = QVariant{}; | ||
53 | 52 | | |||
54 | const auto currentKey = mTrackKeys[index.row()]; | 53 | const auto currentKey = mTrackKeys[index.row()]; | ||
55 | 54 | | |||
56 | switch (role) | 55 | switch (role) | ||
57 | { | 56 | { | ||
58 | case Qt::DisplayRole: | 57 | case Qt::DisplayRole: | ||
▲ Show 20 Lines • Show All 208 Lines • ▼ Show 20 Line(s) | 265 | case DatabaseInterface::ElementTypeRole: | |||
267 | break; | 266 | break; | ||
268 | } | 267 | } | ||
269 | break; | 268 | break; | ||
270 | } | 269 | } | ||
271 | 270 | | |||
272 | return result; | 271 | return result; | ||
273 | } | 272 | } | ||
274 | 273 | | |||
275 | QVariant TrackMetadataModel::dataRadio(const QModelIndex &index, int role) const | | |||
276 | { | | |||
277 | auto result = QVariant{}; | | |||
278 | | ||||
279 | const auto currentKey = mTrackKeys[index.row()]; | | |||
280 | | ||||
281 | switch (role) | | |||
282 | { | | |||
283 | case Qt::DisplayRole: | | |||
284 | result = mTrackData[currentKey]; | | |||
285 | break; | | |||
286 | case ItemNameRole: | | |||
287 | switch (currentKey) | | |||
288 | { | | |||
289 | case DatabaseInterface::TitleRole: | | |||
290 | result = i18nc("Track title for track metadata view", "Title"); | | |||
291 | break; | | |||
292 | case DatabaseInterface::CommentRole: | | |||
293 | result = i18nc("Comment label for track metadata view", "Comment"); | | |||
294 | break; | | |||
295 | case DatabaseInterface::ResourceRole: | | |||
296 | result = i18nc("Radio HTTP address for radio metadata view", "Stream Http Address"); | | |||
297 | break; | | |||
298 | case DatabaseInterface::ChannelsRole: | | |||
299 | case DatabaseInterface::BitRateRole: | | |||
300 | case DatabaseInterface::SampleRateRole: | | |||
301 | case DatabaseInterface::LastPlayDate: | | |||
302 | case DatabaseInterface::PlayCounter: | | |||
303 | case DatabaseInterface::LyricsRole: | | |||
304 | case DatabaseInterface::YearRole: | | |||
305 | case DatabaseInterface::ComposerRole: | | |||
306 | case DatabaseInterface::ArtistRole: | | |||
307 | case DatabaseInterface::AlbumRole: | | |||
308 | case DatabaseInterface::AlbumArtistRole: | | |||
309 | case DatabaseInterface::TrackNumberRole: | | |||
310 | case DatabaseInterface::DiscNumberRole: | | |||
311 | case DatabaseInterface::RatingRole: | | |||
312 | case DatabaseInterface::GenreRole: | | |||
313 | case DatabaseInterface::LyricistRole: | | |||
314 | case DatabaseInterface::DurationRole: | | |||
315 | case DatabaseInterface::SecondaryTextRole: | | |||
316 | case DatabaseInterface::ImageUrlRole: | | |||
317 | case DatabaseInterface::ShadowForImageRole: | | |||
318 | case DatabaseInterface::ChildModelRole: | | |||
319 | case DatabaseInterface::StringDurationRole: | | |||
320 | case DatabaseInterface::MilliSecondsDurationRole: | | |||
321 | case DatabaseInterface::AllArtistsRole: | | |||
322 | case DatabaseInterface::HighestTrackRating: | | |||
323 | case DatabaseInterface::IdRole: | | |||
324 | case DatabaseInterface::DatabaseIdRole: | | |||
325 | case DatabaseInterface::IsSingleDiscAlbumRole: | | |||
326 | case DatabaseInterface::ContainerDataRole: | | |||
327 | case DatabaseInterface::IsPartialDataRole: | | |||
328 | case DatabaseInterface::AlbumIdRole: | | |||
329 | case DatabaseInterface::HasEmbeddedCover: | | |||
330 | case DatabaseInterface::FileModificationTime: | | |||
331 | case DatabaseInterface::FirstPlayDate: | | |||
332 | case DatabaseInterface::PlayFrequency: | | |||
333 | case DatabaseInterface::ElementTypeRole: | | |||
334 | case DatabaseInterface::IsValidAlbumArtistRole: | | |||
335 | break; | | |||
336 | } | | |||
337 | break; | | |||
338 | case ItemTypeRole: | | |||
339 | switch (currentKey) | | |||
340 | { | | |||
341 | case DatabaseInterface::TitleRole: | | |||
342 | result = TextEntry; | | |||
343 | break; | | |||
344 | case DatabaseInterface::ResourceRole: | | |||
345 | result = TextEntry; | | |||
346 | break; | | |||
347 | case DatabaseInterface::CommentRole: | | |||
348 | result = TextEntry; | | |||
349 | break; | | |||
350 | case DatabaseInterface::ArtistRole: | | |||
351 | case DatabaseInterface::AlbumRole: | | |||
352 | case DatabaseInterface::AlbumArtistRole: | | |||
353 | case DatabaseInterface::TrackNumberRole: | | |||
354 | case DatabaseInterface::DiscNumberRole: | | |||
355 | case DatabaseInterface::RatingRole: | | |||
356 | case DatabaseInterface::GenreRole: | | |||
357 | case DatabaseInterface::LyricistRole: | | |||
358 | case DatabaseInterface::ComposerRole: | | |||
359 | case DatabaseInterface::YearRole: | | |||
360 | case DatabaseInterface::LastPlayDate: | | |||
361 | case DatabaseInterface::PlayCounter: | | |||
362 | case DatabaseInterface::LyricsRole: | | |||
363 | case DatabaseInterface::DurationRole: | | |||
364 | case DatabaseInterface::SampleRateRole: | | |||
365 | case DatabaseInterface::BitRateRole: | | |||
366 | case DatabaseInterface::ChannelsRole: | | |||
367 | case DatabaseInterface::SecondaryTextRole: | | |||
368 | case DatabaseInterface::ImageUrlRole: | | |||
369 | case DatabaseInterface::ShadowForImageRole: | | |||
370 | case DatabaseInterface::ChildModelRole: | | |||
371 | case DatabaseInterface::StringDurationRole: | | |||
372 | case DatabaseInterface::MilliSecondsDurationRole: | | |||
373 | case DatabaseInterface::AllArtistsRole: | | |||
374 | case DatabaseInterface::HighestTrackRating: | | |||
375 | case DatabaseInterface::IdRole: | | |||
376 | case DatabaseInterface::DatabaseIdRole: | | |||
377 | case DatabaseInterface::IsSingleDiscAlbumRole: | | |||
378 | case DatabaseInterface::ContainerDataRole: | | |||
379 | case DatabaseInterface::IsPartialDataRole: | | |||
380 | case DatabaseInterface::AlbumIdRole: | | |||
381 | case DatabaseInterface::HasEmbeddedCover: | | |||
382 | case DatabaseInterface::FileModificationTime: | | |||
383 | case DatabaseInterface::FirstPlayDate: | | |||
384 | case DatabaseInterface::PlayFrequency: | | |||
385 | case DatabaseInterface::ElementTypeRole: | | |||
386 | case DatabaseInterface::IsValidAlbumArtistRole: | | |||
387 | break; | | |||
388 | } | | |||
389 | break; | | |||
390 | } | | |||
391 | | ||||
392 | return result; | | |||
393 | } | | |||
394 | | ||||
395 | QVariant TrackMetadataModel::data(const QModelIndex &index, int role) const | | |||
396 | { | | |||
397 | if (this->mIsRadio) { | | |||
398 | return dataRadio(index, role); | | |||
399 | } else { | | |||
400 | return dataGeneral(index, role); | | |||
401 | } | | |||
402 | } | | |||
403 | | ||||
404 | bool TrackMetadataModel::setData(const QModelIndex &index, const QVariant &value, int role) | 274 | bool TrackMetadataModel::setData(const QModelIndex &index, const QVariant &value, int role) | ||
405 | { | 275 | { | ||
406 | if (data(index, role) != value) { | 276 | if (data(index, role) != value) { | ||
407 | mTrackData[mTrackKeys[index.row()]] = value; | 277 | mTrackData[mTrackKeys[index.row()]] = value; | ||
408 | 278 | | |||
409 | emit dataChanged(index, index, QVector<int>() << role); | 279 | emit dataChanged(index, index, QVector<int>() << role); | ||
410 | return true; | 280 | return true; | ||
411 | } | 281 | } | ||
Show All 29 Lines | 310 | { | |||
441 | return mManager; | 311 | return mManager; | ||
442 | } | 312 | } | ||
443 | 313 | | |||
444 | QString TrackMetadataModel::lyrics() const | 314 | QString TrackMetadataModel::lyrics() const | ||
445 | { | 315 | { | ||
446 | return mFullData[TrackDataType::key_type::LyricsRole].toString(); | 316 | return mFullData[TrackDataType::key_type::LyricsRole].toString(); | ||
447 | } | 317 | } | ||
448 | 318 | | |||
319 | qulonglong TrackMetadataModel::databaseId() const | ||||
320 | { | ||||
321 | return mDatabaseId; | ||||
322 | } | ||||
323 | | ||||
449 | void TrackMetadataModel::trackData(const TrackMetadataModel::TrackDataType &trackData) | 324 | void TrackMetadataModel::trackData(const TrackMetadataModel::TrackDataType &trackData) | ||
450 | { | 325 | { | ||
451 | if (!mFullData.isEmpty() && trackData.databaseId() != mFullData.databaseId()) { | 326 | if (!mFullData.isEmpty() && trackData.databaseId() != mFullData.databaseId()) { | ||
452 | return; | 327 | return; | ||
453 | } | 328 | } | ||
454 | 329 | | |||
455 | fillDataFromTrackData(trackData); | 330 | const QList<DatabaseInterface::ColumnsRoles> fieldsForTrack({DatabaseInterface::TitleRole, DatabaseInterface::ArtistRole, | ||
331 | DatabaseInterface::AlbumRole, DatabaseInterface::AlbumArtistRole, | ||||
332 | DatabaseInterface::TrackNumberRole, DatabaseInterface::DiscNumberRole, | ||||
333 | DatabaseInterface::RatingRole, DatabaseInterface::GenreRole, | ||||
334 | DatabaseInterface::LyricistRole, DatabaseInterface::ComposerRole, | ||||
335 | DatabaseInterface::CommentRole, DatabaseInterface::YearRole, | ||||
336 | DatabaseInterface::LastPlayDate, DatabaseInterface::PlayCounter, | ||||
337 | DatabaseInterface::DatabaseIdRole}); | ||||
338 | | ||||
339 | fillDataFromTrackData(trackData, fieldsForTrack); | ||||
456 | } | 340 | } | ||
457 | 341 | | |||
458 | void TrackMetadataModel::fillDataFromTrackData(const TrackMetadataModel::TrackDataType &trackData) | 342 | void TrackMetadataModel::fillDataFromTrackData(const TrackMetadataModel::TrackDataType &trackData, | ||
343 | const QList<DatabaseInterface::ColumnsRoles> &fieldsForTrack) | ||||
459 | { | 344 | { | ||
460 | const QList<DatabaseInterface::ColumnsRoles> mFieldsForClassicTrack({DatabaseInterface::TitleRole, DatabaseInterface::ArtistRole, DatabaseInterface::AlbumRole, | | |||
461 | DatabaseInterface::AlbumArtistRole, DatabaseInterface::TrackNumberRole, DatabaseInterface::DiscNumberRole, | | |||
462 | DatabaseInterface::RatingRole, DatabaseInterface::GenreRole, DatabaseInterface::LyricistRole, | | |||
463 | DatabaseInterface::ComposerRole, DatabaseInterface::CommentRole, DatabaseInterface::YearRole, | | |||
464 | DatabaseInterface::LastPlayDate, DatabaseInterface::PlayCounter}); | | |||
465 | | ||||
466 | const QList mFieldsForRadioTrack({DatabaseInterface::TitleRole,DatabaseInterface::ResourceRole, DatabaseInterface::CommentRole, DatabaseInterface::DatabaseIdRole, | | |||
467 | DatabaseInterface::ArtistRole, DatabaseInterface::AlbumRole}); | | |||
468 | | ||||
469 | beginResetModel(); | 345 | beginResetModel(); | ||
470 | mFullData = trackData; | 346 | mFullData = trackData; | ||
471 | mTrackData.clear(); | 347 | mTrackData.clear(); | ||
472 | mTrackKeys.clear(); | 348 | mTrackKeys.clear(); | ||
473 | 349 | | |||
474 | for (DatabaseInterface::ColumnsRoles role : (isRadio() ? mFieldsForRadioTrack : mFieldsForClassicTrack)){ | 350 | for (DatabaseInterface::ColumnsRoles role : fieldsForTrack) { | ||
475 | if (trackData.constFind(role) != trackData.constEnd()) { | 351 | if (trackData.constFind(role) != trackData.constEnd()) { | ||
476 | if (role == DatabaseInterface::RatingRole) { | 352 | if (role == DatabaseInterface::RatingRole) { | ||
477 | if (trackData[role].toInt() == 0) { | 353 | if (trackData[role].toInt() == 0) { | ||
478 | continue; | 354 | continue; | ||
479 | } | 355 | } | ||
480 | } | 356 | } | ||
481 | 357 | | |||
482 | mTrackKeys.push_back(role); | 358 | mTrackKeys.push_back(role); | ||
483 | mTrackData[role] = trackData[role]; | 359 | mTrackData[role] = trackData[role]; | ||
484 | } | 360 | } | ||
485 | } | 361 | } | ||
486 | filterDataFromTrackData(); | 362 | filterDataFromTrackData(); | ||
487 | endResetModel(); | 363 | endResetModel(); | ||
488 | 364 | | |||
489 | fetchLyrics(); | 365 | fetchLyrics(); | ||
490 | 366 | | |||
367 | mDatabaseId = trackData[DatabaseInterface::DatabaseIdRole].toULongLong(); | ||||
368 | Q_EMIT databaseIdChanged(); | ||||
369 | | ||||
491 | mCoverImage = trackData[DatabaseInterface::ImageUrlRole].toUrl(); | 370 | mCoverImage = trackData[DatabaseInterface::ImageUrlRole].toUrl(); | ||
492 | Q_EMIT coverUrlChanged(); | 371 | Q_EMIT coverUrlChanged(); | ||
493 | 372 | | |||
494 | auto rawFileUrl = trackData[DatabaseInterface::ResourceRole].toUrl(); | 373 | auto rawFileUrl = trackData[DatabaseInterface::ResourceRole].toUrl(); | ||
495 | 374 | | |||
496 | if (rawFileUrl.isLocalFile()) { | 375 | if (rawFileUrl.isLocalFile()) { | ||
497 | mFileUrl = rawFileUrl.toLocalFile(); | 376 | mFileUrl = rawFileUrl.toLocalFile(); | ||
498 | } else { | 377 | } else { | ||
Show All 36 Lines | 413 | if (!mLyricsValueWatcher.result().isEmpty()) { | |||
535 | fillLyricsDataFromTrack(); | 414 | fillLyricsDataFromTrack(); | ||
536 | 415 | | |||
537 | mFullData[DatabaseInterface::LyricsRole] = mLyricsValueWatcher.result(); | 416 | mFullData[DatabaseInterface::LyricsRole] = mLyricsValueWatcher.result(); | ||
538 | 417 | | |||
539 | Q_EMIT lyricsChanged(); | 418 | Q_EMIT lyricsChanged(); | ||
540 | } | 419 | } | ||
541 | } | 420 | } | ||
542 | 421 | | |||
422 | void TrackMetadataModel::initializeById(ElisaUtils::PlayListEntryType type, qulonglong databaseId) | ||||
423 | { | ||||
424 | mFullData.clear(); | ||||
425 | mTrackData.clear(); | ||||
426 | mCoverImage.clear(); | ||||
427 | mFileUrl.clear(); | ||||
428 | | ||||
429 | Q_EMIT lyricsChanged(); | ||||
430 | | ||||
431 | Q_EMIT needDataByDatabaseId(type, databaseId); | ||||
432 | } | ||||
433 | | ||||
543 | void TrackMetadataModel::initialize(MusicListenersManager *newManager, DatabaseInterface *trackDatabase) | 434 | void TrackMetadataModel::initialize(MusicListenersManager *newManager, DatabaseInterface *trackDatabase) | ||
544 | { | 435 | { | ||
545 | mManager = newManager; | 436 | mManager = newManager; | ||
546 | Q_EMIT managerChanged(); | 437 | Q_EMIT managerChanged(); | ||
547 | 438 | | |||
548 | if (mManager) { | 439 | if (mManager) { | ||
549 | mDataLoader.setDatabase(mManager->viewDatabase()); | 440 | mDataLoader.setDatabase(mManager->viewDatabase()); | ||
550 | } else if (trackDatabase) { | 441 | } else if (trackDatabase) { | ||
551 | mDataLoader.setDatabase(trackDatabase); | 442 | mDataLoader.setDatabase(trackDatabase); | ||
552 | } | 443 | } | ||
553 | 444 | | |||
554 | if (mManager) { | 445 | if (mManager) { | ||
555 | mManager->connectModel(&mDataLoader); | 446 | mManager->connectModel(&mDataLoader); | ||
556 | } | 447 | } | ||
557 | 448 | | |||
558 | connect(this, &TrackMetadataModel::needDataByDatabaseId, | 449 | connect(this, &TrackMetadataModel::needDataByDatabaseId, | ||
559 | &mDataLoader, &ModelDataLoader::loadDataByDatabaseId); | 450 | &mDataLoader, &ModelDataLoader::loadDataByDatabaseId); | ||
560 | connect(this, &TrackMetadataModel::needDataByFileName, | 451 | connect(this, &TrackMetadataModel::needDataByFileName, | ||
561 | &mDataLoader, &ModelDataLoader::loadDataByFileName); | 452 | &mDataLoader, &ModelDataLoader::loadDataByFileName); | ||
562 | | ||||
563 | if (isRadio()) { | | |||
564 | connect(this, &TrackMetadataModel::saveRadioData, | 453 | connect(this, &TrackMetadataModel::saveRadioData, | ||
565 | &mDataLoader, &ModelDataLoader::updateRadioData); | 454 | &mDataLoader, &ModelDataLoader::saveRadioModified); | ||
566 | connect(this, &TrackMetadataModel::deleteRadioData, | 455 | connect(this, &TrackMetadataModel::deleteRadioData, | ||
567 | &mDataLoader, &ModelDataLoader::deleteRadioData); | 456 | &mDataLoader, &ModelDataLoader::removeRadio); | ||
568 | connect(&mDataLoader, &ModelDataLoader::radioAdded, | | |||
569 | this, &TrackMetadataModel::radioAdded); | | |||
570 | connect(&mDataLoader, &ModelDataLoader::radioModified, | | |||
571 | this, &TrackMetadataModel::radioModified); | | |||
572 | connect(&mDataLoader, &ModelDataLoader::radioRemoved, | | |||
573 | this, &TrackMetadataModel::radioRemoved); | | |||
574 | connect(&mDataLoader, &ModelDataLoader::allRadioData, | | |||
575 | this, &TrackMetadataModel::trackData); | | |||
576 | } else { | | |||
577 | connect(&mDataLoader, &ModelDataLoader::trackModified, | 457 | connect(&mDataLoader, &ModelDataLoader::trackModified, | ||
578 | this, &TrackMetadataModel::trackData); | 458 | this, &TrackMetadataModel::trackData); | ||
579 | connect(&mDataLoader, &ModelDataLoader::allTrackData, | 459 | connect(&mDataLoader, &ModelDataLoader::allTrackData, | ||
580 | this, &TrackMetadataModel::trackData); | 460 | this, &TrackMetadataModel::trackData); | ||
581 | } | 461 | connect(&mDataLoader, &ModelDataLoader::allRadioData, | ||
462 | this, &TrackMetadataModel::radioData); | ||||
463 | connect(&mDataLoader, &ModelDataLoader::radioAdded, | ||||
464 | this, &TrackMetadataModel::radioData); | ||||
465 | connect(&mDataLoader, &ModelDataLoader::radioModified, | ||||
466 | this, &TrackMetadataModel::radioData); | ||||
582 | } | 467 | } | ||
583 | 468 | | |||
584 | void TrackMetadataModel::fetchLyrics() | 469 | void TrackMetadataModel::fetchLyrics() | ||
585 | { | 470 | { | ||
586 | auto lyricicsValue = QtConcurrent::run(QThreadPool::globalInstance(), [=]() { | 471 | auto lyricicsValue = QtConcurrent::run(QThreadPool::globalInstance(), [=]() { | ||
587 | auto trackData = mFileScanner.scanOneFile(mFullData[DatabaseInterface::ResourceRole].toUrl(), mMimeDatabase); | 472 | auto trackData = mFileScanner.scanOneFile(mFullData[DatabaseInterface::ResourceRole].toUrl(), mMimeDatabase); | ||
588 | if (!trackData.lyrics().isEmpty()) { | 473 | if (!trackData.lyrics().isEmpty()) { | ||
589 | return trackData.lyrics(); | 474 | return trackData.lyrics(); | ||
590 | } | 475 | } | ||
591 | return QString{}; | 476 | return QString{}; | ||
592 | }); | 477 | }); | ||
593 | 478 | | |||
594 | mLyricsValueWatcher.setFuture(lyricicsValue); | 479 | mLyricsValueWatcher.setFuture(lyricicsValue); | ||
595 | } | 480 | } | ||
596 | 481 | | |||
597 | void TrackMetadataModel::initializeByTrackId(qulonglong databaseId) | | |||
598 | { | | |||
599 | mFullData.clear(); | | |||
600 | mTrackData.clear(); | | |||
601 | mCoverImage.clear(); | | |||
602 | mFileUrl.clear(); | | |||
603 | | ||||
604 | Q_EMIT lyricsChanged(); | | |||
605 | | ||||
606 | Q_EMIT needDataByDatabaseId((isRadio() ? ElisaUtils::Radio : ElisaUtils::Track), databaseId); | | |||
607 | } | | |||
608 | | ||||
609 | void TrackMetadataModel::initializeForNewRadio() | 482 | void TrackMetadataModel::initializeForNewRadio() | ||
610 | { | 483 | { | ||
611 | mFullData.clear(); | 484 | mFullData.clear(); | ||
612 | mTrackData.clear(); | 485 | mTrackData.clear(); | ||
613 | 486 | | |||
614 | fillDataForNewRadio(); | 487 | fillDataForNewRadio(); | ||
615 | } | 488 | } | ||
616 | 489 | | |||
617 | void TrackMetadataModel::fillDataForNewRadio() | 490 | void TrackMetadataModel::fillDataForNewRadio() | ||
618 | { | 491 | { | ||
619 | beginResetModel(); | 492 | beginResetModel(); | ||
620 | mTrackData.clear(); | 493 | mTrackData.clear(); | ||
621 | mTrackKeys.clear(); | 494 | mTrackKeys.clear(); | ||
622 | 495 | | |||
623 | for (auto role : { | 496 | for (auto role : { | ||
624 | DatabaseInterface::TitleRole, | 497 | DatabaseInterface::TitleRole, | ||
625 | DatabaseInterface::ResourceRole, | 498 | DatabaseInterface::ResourceRole, | ||
626 | DatabaseInterface::CommentRole, | 499 | DatabaseInterface::CommentRole, | ||
627 | DatabaseInterface::DatabaseIdRole | 500 | DatabaseInterface::DatabaseIdRole | ||
628 | 501 | | |||
629 | }) { | 502 | }) { | ||
630 | mTrackKeys.push_back(role); | 503 | mTrackKeys.push_back(role); | ||
631 | if (role == DatabaseInterface::DatabaseIdRole) { | 504 | if (role == DatabaseInterface::DatabaseIdRole) { | ||
632 | mTrackData[role] = -1; | 505 | mTrackData[role] = -1; | ||
633 | Q_EMIT hideDeleteButton(); | | |||
634 | } else { | 506 | } else { | ||
635 | mTrackData[role] = QString(); | 507 | mTrackData[role] = QString(); | ||
636 | } | 508 | } | ||
637 | 509 | | |||
638 | } | 510 | } | ||
639 | filterDataFromTrackData(); | 511 | filterDataFromTrackData(); | ||
640 | endResetModel(); | 512 | endResetModel(); | ||
641 | } | 513 | } | ||
Show All 10 Lines | 516 | { | |||
652 | Q_EMIT needDataByFileName(ElisaUtils::FileName, QUrl::fromLocalFile(fileName)); | 524 | Q_EMIT needDataByFileName(ElisaUtils::FileName, QUrl::fromLocalFile(fileName)); | ||
653 | } | 525 | } | ||
654 | 526 | | |||
655 | void TrackMetadataModel::setManager(MusicListenersManager *newManager) | 527 | void TrackMetadataModel::setManager(MusicListenersManager *newManager) | ||
656 | { | 528 | { | ||
657 | initialize(newManager, nullptr); | 529 | initialize(newManager, nullptr); | ||
658 | } | 530 | } | ||
659 | 531 | | |||
660 | void TrackMetadataModel::setIsRadio(bool isRadio){ | | |||
661 | this->mIsRadio = isRadio; | | |||
662 | | ||||
663 | Q_EMIT isRadioChanged(); | | |||
664 | } | | |||
665 | | ||||
666 | void TrackMetadataModel::setDatabase(DatabaseInterface *trackDatabase) | 532 | void TrackMetadataModel::setDatabase(DatabaseInterface *trackDatabase) | ||
667 | { | 533 | { | ||
668 | initialize(nullptr, trackDatabase); | 534 | initialize(nullptr, trackDatabase); | ||
669 | } | 535 | } | ||
670 | 536 | | |||
671 | bool TrackMetadataModel::isRadio(){ | | |||
672 | return this->mIsRadio; | | |||
673 | } | | |||
674 | | ||||
675 | void TrackMetadataModel::saveData() | 537 | void TrackMetadataModel::saveData() | ||
676 | { | 538 | { | ||
677 | Q_EMIT saveRadioData(mTrackData); | 539 | Q_EMIT saveRadioData(mTrackData); | ||
678 | } | 540 | } | ||
679 | 541 | | |||
680 | void TrackMetadataModel::deleteRadio() | 542 | void TrackMetadataModel::deleteRadio() | ||
681 | { | 543 | { | ||
682 | if (mTrackData[DatabaseInterface::DatabaseIdRole]>=0) { | 544 | if (mTrackData[DatabaseInterface::DatabaseIdRole]>=0) { | ||
683 | Q_EMIT deleteRadioData(mTrackData[DatabaseInterface::DatabaseIdRole].toULongLong()); | 545 | Q_EMIT deleteRadioData(mTrackData[DatabaseInterface::DatabaseIdRole].toULongLong()); | ||
684 | } | 546 | } | ||
685 | } | 547 | } | ||
686 | 548 | | |||
687 | void TrackMetadataModel::radioAdded(const TrackDataType &radiosData){ | 549 | void TrackMetadataModel::radioData(const TrackDataType &radiosData) | ||
688 | mTrackData[DatabaseInterface::DatabaseIdRole] = radiosData[DatabaseInterface::DatabaseIdRole]; | 550 | { | ||
689 | Q_EMIT showDeleteButton(); | 551 | if (!mFullData.isEmpty() && mFullData[DatabaseInterface::DatabaseIdRole].toInt() != -1 && | ||
690 | radioModified(); | 552 | mFullData.databaseId() != radiosData.databaseId()) { | ||
553 | return; | ||||
691 | } | 554 | } | ||
692 | 555 | | |||
693 | void TrackMetadataModel::radioModified(){ | 556 | const QList<DatabaseInterface::ColumnsRoles> fieldsForTrack({DatabaseInterface::TitleRole, DatabaseInterface::ResourceRole, | ||
694 | Q_EMIT disableApplyButton(); | 557 | DatabaseInterface::CommentRole, DatabaseInterface::DatabaseIdRole}); | ||
695 | } | | |||
696 | 558 | | |||
697 | void TrackMetadataModel::radioRemoved(){ | 559 | fillDataFromTrackData(radiosData, fieldsForTrack); | ||
698 | Q_EMIT closeWindow(); | | |||
699 | } | 560 | } | ||
700 | 561 | | |||
701 | #include "moc_trackmetadatamodel.cpp" | 562 | #include "moc_trackmetadatamodel.cpp" |