Changeset View
Changeset View
Standalone View
Standalone View
src/mediaplaylist.cpp
Show First 20 Lines • Show All 214 Lines • ▼ Show 20 Line(s) | 212 | { | |||
---|---|---|---|---|---|
215 | if (!index.isValid()) { | 215 | if (!index.isValid()) { | ||
216 | return modelModified; | 216 | return modelModified; | ||
217 | } | 217 | } | ||
218 | 218 | | |||
219 | if (index.row() < 0 || index.row() >= d->mData.size()) { | 219 | if (index.row() < 0 || index.row() >= d->mData.size()) { | ||
220 | return modelModified; | 220 | return modelModified; | ||
221 | } | 221 | } | ||
222 | 222 | | |||
223 | if (role < ColumnsRoles::IsValidRole || role > ColumnsRoles::IsPlayingRole) { | 223 | if ((role != ColumnsRoles::TitleRole && role != ColumnsRoles::ArtistRole) && | ||
224 | (role < ColumnsRoles::IsValidRole || role > ColumnsRoles::IsPlayingRole)) { | ||||
224 | return modelModified; | 225 | return modelModified; | ||
225 | } | 226 | } | ||
226 | 227 | | |||
227 | auto convertedRole = static_cast<ColumnsRoles>(role); | 228 | auto convertedRole = static_cast<ColumnsRoles>(role); | ||
228 | 229 | | |||
229 | switch(convertedRole) | 230 | switch(convertedRole) | ||
230 | { | 231 | { | ||
231 | case ColumnsRoles::IsPlayingRole: | 232 | case ColumnsRoles::IsPlayingRole: | ||
232 | { | 233 | { | ||
233 | modelModified = true; | 234 | modelModified = true; | ||
234 | auto newState = static_cast<PlayState>(value.toInt()); | 235 | auto newState = static_cast<PlayState>(value.toInt()); | ||
235 | d->mData[index.row()].mIsPlaying = newState; | 236 | d->mData[index.row()].mIsPlaying = newState; | ||
236 | Q_EMIT dataChanged(index, index, {role}); | 237 | Q_EMIT dataChanged(index, index, {role}); | ||
237 | 238 | | |||
238 | if (!d->mCurrentTrack.isValid()) { | 239 | if (!d->mCurrentTrack.isValid()) { | ||
239 | resetCurrentTrack(); | 240 | resetCurrentTrack(); | ||
240 | } | 241 | } | ||
241 | 242 | | |||
242 | break; | 243 | break; | ||
243 | } | 244 | } | ||
245 | case ColumnsRoles::TitleRole: | ||||
246 | { | ||||
247 | modelModified = true; | ||||
248 | d->mData[index.row()].mTitle = value; | ||||
249 | d->mTrackData[index.row()][static_cast<TrackDataType::key_type>(role)] = value; | ||||
250 | Q_EMIT dataChanged(index, index, {role}); | ||||
251 | | ||||
252 | if (!d->mCurrentTrack.isValid()) { | ||||
253 | resetCurrentTrack(); | ||||
254 | } | ||||
255 | | ||||
256 | break; | ||||
257 | } | ||||
258 | case ColumnsRoles::ArtistRole: | ||||
259 | { | ||||
260 | modelModified = true; | ||||
261 | d->mData[index.row()].mArtist = value; | ||||
262 | d->mTrackData[index.row()][static_cast<TrackDataType::key_type>(role)] = value; | ||||
263 | Q_EMIT dataChanged(index, index, {role}); | ||||
264 | | ||||
265 | if (!d->mCurrentTrack.isValid()) { | ||||
266 | resetCurrentTrack(); | ||||
267 | } | ||||
268 | | ||||
269 | break; | ||||
270 | } | ||||
244 | default: | 271 | default: | ||
245 | modelModified = false; | 272 | modelModified = false; | ||
246 | } | 273 | } | ||
247 | 274 | | |||
248 | return modelModified; | 275 | return modelModified; | ||
249 | } | 276 | } | ||
250 | 277 | | |||
251 | bool MediaPlayList::removeRows(int row, int count, const QModelIndex &parent) | 278 | bool MediaPlayList::removeRows(int row, int count, const QModelIndex &parent) | ||
▲ Show 20 Lines • Show All 81 Lines • ▼ Show 20 Line(s) | 351 | { | |||
333 | if (!d->mCurrentTrack.isValid()) { | 360 | if (!d->mCurrentTrack.isValid()) { | ||
334 | resetCurrentTrack(); | 361 | resetCurrentTrack(); | ||
335 | } | 362 | } | ||
336 | 363 | | |||
337 | Q_EMIT tracksCountChanged(); | 364 | Q_EMIT tracksCountChanged(); | ||
338 | Q_EMIT persistentStateChanged(); | 365 | Q_EMIT persistentStateChanged(); | ||
339 | 366 | | |||
340 | if (!newEntry.mIsValid) { | 367 | if (!newEntry.mIsValid) { | ||
341 | if (newEntry.mTrackUrl.isValid()) { | 368 | if (newEntry.mEntryType == ElisaUtils::Radio) { | ||
369 | Q_EMIT newEntryInList(newEntry.mId, {}, ElisaUtils::Radio); | ||||
370 | } else if (newEntry.mTrackUrl.isValid()) { | ||||
342 | auto entryURL = newEntry.mTrackUrl.toUrl(); | 371 | auto entryURL = newEntry.mTrackUrl.toUrl(); | ||
343 | if (entryURL.isLocalFile()) { | 372 | if (entryURL.isLocalFile()) { | ||
344 | auto entryString = entryURL.toLocalFile(); | 373 | auto entryString = entryURL.toLocalFile(); | ||
345 | QFileInfo newTrackFile(entryString); | 374 | QFileInfo newTrackFile(entryString); | ||
346 | if (newTrackFile.exists()) { | 375 | if (newTrackFile.exists()) { | ||
347 | d->mData.last().mIsValid = true; | 376 | d->mData.last().mIsValid = true; | ||
348 | } | 377 | } | ||
349 | Q_EMIT newEntryInList(0, entryString, ElisaUtils::FileName); | 378 | Q_EMIT newEntryInList(0, entryString, ElisaUtils::FileName); | ||
▲ Show 20 Lines • Show All 70 Lines • ▼ Show 20 Line(s) | 423 | { | |||
420 | } | 449 | } | ||
421 | 450 | | |||
422 | Q_EMIT tracksCountChanged(); | 451 | Q_EMIT tracksCountChanged(); | ||
423 | Q_EMIT persistentStateChanged(); | 452 | Q_EMIT persistentStateChanged(); | ||
424 | 453 | | |||
425 | Q_EMIT dataChanged(index(rowCount() - 1, 0), index(rowCount() - 1, 0), {MediaPlayList::IsPlayingRole}); | 454 | Q_EMIT dataChanged(index(rowCount() - 1, 0), index(rowCount() - 1, 0), {MediaPlayList::IsPlayingRole}); | ||
426 | } | 455 | } | ||
427 | 456 | | |||
428 | void MediaPlayList::enqueueTracksListById(const ElisaUtils::EntryDataList &newEntries) | 457 | void MediaPlayList::enqueueTracksListById(const ElisaUtils::EntryDataList &newEntries, ElisaUtils::PlayListEntryType type) | ||
429 | { | 458 | { | ||
430 | enqueueCommon(); | 459 | enqueueCommon(); | ||
431 | 460 | | |||
432 | beginInsertRows(QModelIndex(), d->mData.size(), d->mData.size() + newEntries.size() - 1); | 461 | beginInsertRows(QModelIndex(), d->mData.size(), d->mData.size() + newEntries.size() - 1); | ||
433 | for (const auto &newTrack : newEntries) { | 462 | for (const auto &newTrack : newEntries) { | ||
434 | auto newMediaPlayListEntry = MediaPlayListEntry{std::get<0>(newTrack), std::get<1>(newTrack), ElisaUtils::Track}; | 463 | auto newMediaPlayListEntry = MediaPlayListEntry{std::get<0>(newTrack), std::get<1>(newTrack), type}; | ||
435 | d->mData.push_back(newMediaPlayListEntry); | 464 | d->mData.push_back(newMediaPlayListEntry); | ||
436 | d->mTrackData.push_back({}); | 465 | d->mTrackData.push_back({}); | ||
437 | Q_EMIT newEntryInList(newMediaPlayListEntry.mId, newMediaPlayListEntry.mTitle.toString(), newMediaPlayListEntry.mEntryType); | 466 | Q_EMIT newEntryInList(newMediaPlayListEntry.mId, newMediaPlayListEntry.mTitle.toString(), newMediaPlayListEntry.mEntryType); | ||
438 | } | 467 | } | ||
439 | endInsertRows(); | 468 | endInsertRows(); | ||
440 | 469 | | |||
441 | restorePlayListPosition(); | 470 | restorePlayListPosition(); | ||
442 | if (!d->mCurrentTrack.isValid()) { | 471 | if (!d->mCurrentTrack.isValid()) { | ||
▲ Show 20 Lines • Show All 117 Lines • ▼ Show 20 Line(s) | 548 | { | |||
560 | Q_EMIT tracksCountChanged(); | 589 | Q_EMIT tracksCountChanged(); | ||
561 | Q_EMIT persistentStateChanged(); | 590 | Q_EMIT persistentStateChanged(); | ||
562 | 591 | | |||
563 | Q_EMIT dataChanged(index(rowCount() - 1, 0), index(rowCount() - 1, 0), {MediaPlayList::IsPlayingRole}); | 592 | Q_EMIT dataChanged(index(rowCount() - 1, 0), index(rowCount() - 1, 0), {MediaPlayList::IsPlayingRole}); | ||
564 | displayOrHideUndoInline(false); | 593 | displayOrHideUndoInline(false); | ||
565 | Q_EMIT undoClearPlayListPlayer(); | 594 | Q_EMIT undoClearPlayListPlayer(); | ||
566 | } | 595 | } | ||
567 | 596 | | |||
597 | void MediaPlayList::updateRadioData(const QVariant &value, int role) | ||||
598 | { | ||||
599 | auto convertedRole = static_cast<ColumnsRoles>(role); | ||||
600 | if (d->mCurrentTrack.data(convertedRole) != value) { | ||||
astippich: code style
if (...) { | |||||
601 | this->setData(d->mCurrentTrack, value, role); | ||||
602 | } | ||||
603 | } | ||||
604 | | ||||
568 | void MediaPlayList::enqueueCommon() | 605 | void MediaPlayList::enqueueCommon() | ||
569 | { | 606 | { | ||
570 | displayOrHideUndoInline(false); | 607 | displayOrHideUndoInline(false); | ||
571 | } | 608 | } | ||
572 | 609 | | |||
573 | void MediaPlayList::copyD() | 610 | void MediaPlayList::copyD() | ||
574 | { | 611 | { | ||
575 | dOld->mData = d->mData; | 612 | dOld->mData = d->mData; | ||
▲ Show 20 Lines • Show All 52 Lines • ▼ Show 20 Line(s) | 657 | { | |||
628 | enqueueCommon(); | 665 | enqueueCommon(); | ||
629 | 666 | | |||
630 | switch (databaseIdType) | 667 | switch (databaseIdType) | ||
631 | { | 668 | { | ||
632 | case ElisaUtils::Album: | 669 | case ElisaUtils::Album: | ||
633 | case ElisaUtils::Artist: | 670 | case ElisaUtils::Artist: | ||
634 | case ElisaUtils::Genre: | 671 | case ElisaUtils::Genre: | ||
635 | case ElisaUtils::Track: | 672 | case ElisaUtils::Track: | ||
673 | case ElisaUtils::Radio: | ||||
636 | enqueueOneEntry(newEntry, databaseIdType); | 674 | enqueueOneEntry(newEntry, databaseIdType); | ||
637 | break; | 675 | break; | ||
638 | case ElisaUtils::FileName: | 676 | case ElisaUtils::FileName: | ||
639 | enqueueFilesList({newEntry}); | 677 | enqueueFilesList({newEntry}); | ||
640 | break; | 678 | break; | ||
641 | case ElisaUtils::Lyricist: | 679 | case ElisaUtils::Lyricist: | ||
642 | case ElisaUtils::Composer: | 680 | case ElisaUtils::Composer: | ||
643 | case ElisaUtils::Unknown: | 681 | case ElisaUtils::Unknown: | ||
Show All 25 Lines | 703 | if (enqueueMode == ElisaUtils::ReplacePlayList) { | |||
669 | clearPlayList(); | 707 | clearPlayList(); | ||
670 | } | 708 | } | ||
671 | 709 | | |||
672 | enqueueCommon(); | 710 | enqueueCommon(); | ||
673 | 711 | | |||
674 | switch (databaseIdType) | 712 | switch (databaseIdType) | ||
675 | { | 713 | { | ||
676 | case ElisaUtils::Track: | 714 | case ElisaUtils::Track: | ||
677 | enqueueTracksListById(newEntries); | 715 | case ElisaUtils::Radio: | ||
716 | enqueueTracksListById(newEntries, databaseIdType); | ||||
678 | break; | 717 | break; | ||
679 | case ElisaUtils::FileName: | 718 | case ElisaUtils::FileName: | ||
680 | enqueueFilesList(newEntries); | 719 | enqueueFilesList(newEntries); | ||
681 | break; | 720 | break; | ||
682 | case ElisaUtils::Album: | 721 | case ElisaUtils::Album: | ||
683 | case ElisaUtils::Artist: | 722 | case ElisaUtils::Artist: | ||
684 | case ElisaUtils::Genre: | 723 | case ElisaUtils::Genre: | ||
685 | enqueueMultipleEntries(newEntries, databaseIdType); | 724 | enqueueMultipleEntries(newEntries, databaseIdType); | ||
Show All 34 Lines | 757 | { | |||
720 | auto result = QList<QVariant>(); | 759 | auto result = QList<QVariant>(); | ||
721 | 760 | | |||
722 | for (int trackIndex = 0; trackIndex < d->mData.size(); ++trackIndex) { | 761 | for (int trackIndex = 0; trackIndex < d->mData.size(); ++trackIndex) { | ||
723 | auto oneData = QList<QString>(); | 762 | auto oneData = QList<QString>(); | ||
724 | const auto &oneEntry = d->mData[trackIndex]; | 763 | const auto &oneEntry = d->mData[trackIndex]; | ||
725 | if (oneEntry.mIsValid) { | 764 | if (oneEntry.mIsValid) { | ||
726 | const auto &oneTrack = d->mTrackData[trackIndex]; | 765 | const auto &oneTrack = d->mTrackData[trackIndex]; | ||
727 | 766 | | |||
767 | oneData.push_back(QString::number(oneTrack.databaseId())); | ||||
728 | oneData.push_back(oneTrack.title()); | 768 | oneData.push_back(oneTrack.title()); | ||
729 | oneData.push_back(oneTrack.artist()); | 769 | oneData.push_back(oneTrack.artist()); | ||
730 | if (oneTrack.hasAlbum()) { | 770 | if (oneTrack.hasAlbum()) { | ||
731 | oneData.push_back(oneTrack.album()); | 771 | oneData.push_back(oneTrack.album()); | ||
732 | } else { | 772 | } else { | ||
733 | oneData.push_back({}); | 773 | oneData.push_back({}); | ||
734 | } | 774 | } | ||
735 | if (oneTrack.hasTrackNumber()) { | 775 | if (oneTrack.hasTrackNumber()) { | ||
▲ Show 20 Lines • Show All 59 Lines • ▼ Show 20 Line(s) | 830 | { | |||
795 | qDebug() << "MediaPlayList::setPersistentState" << persistentStateValue; | 835 | qDebug() << "MediaPlayList::setPersistentState" << persistentStateValue; | ||
796 | 836 | | |||
797 | d->mPersistentState = persistentStateValue; | 837 | d->mPersistentState = persistentStateValue; | ||
798 | 838 | | |||
799 | auto persistentState = d->mPersistentState[QStringLiteral("playList")].toList(); | 839 | auto persistentState = d->mPersistentState[QStringLiteral("playList")].toList(); | ||
800 | 840 | | |||
801 | for (auto &oneData : persistentState) { | 841 | for (auto &oneData : persistentState) { | ||
802 | auto trackData = oneData.toStringList(); | 842 | auto trackData = oneData.toStringList(); | ||
803 | if (trackData.size() != 6) { | 843 | if (trackData.size() != 7) { | ||
804 | continue; | 844 | continue; | ||
805 | } | 845 | } | ||
806 | 846 | | |||
807 | auto restoredTitle = trackData[0]; | 847 | auto restoredId = trackData[0].toULongLong(); | ||
808 | auto restoredArtist = trackData[1]; | 848 | auto restoredTitle = trackData[1]; | ||
809 | auto restoredAlbum = trackData[2]; | 849 | auto restoredArtist = trackData[2]; | ||
810 | auto restoredTrackNumber = trackData[3]; | 850 | auto restoredAlbum = trackData[3]; | ||
811 | auto restoredDiscNumber = trackData[4]; | 851 | auto restoredTrackNumber = trackData[4]; | ||
852 | auto restoredDiscNumber = trackData[5]; | ||||
812 | 853 | | |||
813 | auto mEntryType = static_cast<ElisaUtils::PlayListEntryType>(trackData[5].toInt()); | 854 | auto mEntryType = static_cast<ElisaUtils::PlayListEntryType>(trackData[6].toInt()); | ||
814 | 855 | | |||
815 | enqueueRestoredEntry({restoredTitle, restoredArtist, restoredAlbum, restoredTrackNumber, restoredDiscNumber, mEntryType}); | 856 | enqueueRestoredEntry({restoredId, restoredTitle, restoredArtist, restoredAlbum, restoredTrackNumber, restoredDiscNumber, mEntryType}); | ||
816 | } | 857 | } | ||
817 | 858 | | |||
818 | restorePlayListPosition(); | 859 | restorePlayListPosition(); | ||
819 | restoreRandomPlay(); | 860 | restoreRandomPlay(); | ||
820 | restoreRepeatPlay(); | 861 | restoreRepeatPlay(); | ||
821 | 862 | | |||
822 | Q_EMIT persistentStateChanged(); | 863 | Q_EMIT persistentStateChanged(); | ||
823 | } | 864 | } | ||
▲ Show 20 Lines • Show All 92 Lines • ▼ Show 20 Line(s) | 931 | if (oneEntry.mEntryType != ElisaUtils::Artist && oneEntry.mIsValid) { | |||
916 | Q_EMIT dataChanged(index(i, 0), index(i, 0), {}); | 957 | Q_EMIT dataChanged(index(i, 0), index(i, 0), {}); | ||
917 | 958 | | |||
918 | restorePlayListPosition(); | 959 | restorePlayListPosition(); | ||
919 | 960 | | |||
920 | if (!d->mCurrentTrack.isValid()) { | 961 | if (!d->mCurrentTrack.isValid()) { | ||
921 | resetCurrentTrack(); | 962 | resetCurrentTrack(); | ||
922 | } | 963 | } | ||
923 | continue; | 964 | continue; | ||
965 | } else if (oneEntry.mEntryType == ElisaUtils::Radio ) { | ||||
astippich: code style
} else if (.....) { | |||||
966 | if (track.databaseId() != oneEntry.mId) { | ||||
967 | continue; | ||||
968 | } | ||||
969 | | ||||
970 | d->mTrackData[i] = track; | ||||
971 | oneEntry.mId = track.databaseId(); | ||||
972 | oneEntry.mIsValid = true; | ||||
973 | | ||||
974 | Q_EMIT dataChanged(index(i, 0), index(i, 0), {}); | ||||
975 | | ||||
976 | restorePlayListPosition(); | ||||
977 | | ||||
978 | if (!d->mCurrentTrack.isValid()) { | ||||
979 | resetCurrentTrack(); | ||||
980 | } | ||||
981 | | ||||
982 | break; | ||||
924 | } else if (oneEntry.mEntryType != ElisaUtils::Artist && !oneEntry.mIsValid && !oneEntry.mTrackUrl.isValid()) { | 983 | } else if (oneEntry.mEntryType != ElisaUtils::Artist && !oneEntry.mIsValid && !oneEntry.mTrackUrl.isValid()) { | ||
925 | if (track.find(TrackDataType::key_type::TitleRole) != track.end() && | 984 | if (track.find(TrackDataType::key_type::TitleRole) != track.end() && | ||
926 | track.title() != oneEntry.mTitle) { | 985 | track.title() != oneEntry.mTitle) { | ||
927 | continue; | 986 | continue; | ||
928 | } | 987 | } | ||
929 | 988 | | |||
930 | if (track.find(TrackDataType::key_type::AlbumRole) != track.end() && | 989 | if (track.find(TrackDataType::key_type::AlbumRole) != track.end() && | ||
931 | track.album() != oneEntry.mAlbum) { | 990 | track.album() != oneEntry.mAlbum) { | ||
▲ Show 20 Lines • Show All 293 Lines • Show Last 20 Lines |
code style
if (...) {