diff --git a/autotests/CMakeLists.txt b/autotests/CMakeLists.txt --- a/autotests/CMakeLists.txt +++ b/autotests/CMakeLists.txt @@ -38,6 +38,7 @@ ../src/models/alltracksproxymodel.cpp ../src/models/singleartistproxymodel.cpp ../src/models/singlealbumproxymodel.cpp + ../src/models/mediaplaylistproxymodel.cpp ../src/notificationitem.cpp ../src/trackslistener.cpp ../src/musicartist.cpp @@ -127,6 +128,7 @@ ../src/models/alltracksproxymodel.cpp ../src/models/singleartistproxymodel.cpp ../src/models/singlealbumproxymodel.cpp + ../src/models/mediaplaylistproxymodel.cpp ../src/notificationitem.cpp ../src/trackslistener.cpp ../src/trackslistener.cpp @@ -226,6 +228,7 @@ ../src/models/alltracksproxymodel.cpp ../src/models/singleartistproxymodel.cpp ../src/models/singlealbumproxymodel.cpp + ../src/models/mediaplaylistproxymodel.cpp ../src/manageaudioplayer.cpp ../src/elisaapplication.cpp ../src/notificationitem.cpp @@ -317,6 +320,7 @@ ../src/models/alltracksproxymodel.cpp ../src/models/singleartistproxymodel.cpp ../src/models/singlealbumproxymodel.cpp + ../src/models/mediaplaylistproxymodel.cpp ../src/notificationitem.cpp ../src/musicartist.cpp ../src/musicalbum.cpp @@ -432,7 +436,7 @@ ecm_add_test(${allartistsmodeltest_SOURCES} TEST_NAME "allartistsmodeltest" - LINK_LIBRARIES Qt5::Test Qt5::Core Qt5::Sql KF5::I18n) + LINK_LIBRARIES Qt5::Test Qt5::Core Qt5::Sql Qt5::Concurrent KF5::I18n) target_include_directories(allartistsmodeltest PRIVATE ${CMAKE_SOURCE_DIR}/src) @@ -448,7 +452,7 @@ ecm_add_test(${alltracksmodeltest_SOURCES} TEST_NAME "alltracksmodeltest" - LINK_LIBRARIES Qt5::Test Qt5::Core Qt5::Sql KF5::I18n) + LINK_LIBRARIES Qt5::Test Qt5::Core Qt5::Sql Qt5::Concurrent KF5::I18n) target_include_directories(alltracksmodeltest PRIVATE ${CMAKE_SOURCE_DIR}/src) @@ -497,6 +501,7 @@ ../src/models/alltracksproxymodel.cpp ../src/models/singleartistproxymodel.cpp ../src/models/singlealbumproxymodel.cpp + ../src/models/mediaplaylistproxymodel.cpp ../src/file/filelistener.cpp ../src/file/localfilelisting.cpp ../src/abstractfile/abstractfilelistener.cpp diff --git a/autotests/allalbumsmodeltest.cpp b/autotests/allalbumsmodeltest.cpp --- a/autotests/allalbumsmodeltest.cpp +++ b/autotests/allalbumsmodeltest.cpp @@ -184,8 +184,6 @@ musicDb.removeTracksList({firstTrack.resourceURI()}); - QCOMPARE(dataChangedSpy.wait(150), true); - QCOMPARE(albumsModel.rowCount(), 4); QCOMPARE(beginInsertRowsSpy.count(), 4); QCOMPARE(endInsertRowsSpy.count(), 4); diff --git a/autotests/manageheaderbartest.cpp b/autotests/manageheaderbartest.cpp --- a/autotests/manageheaderbartest.cpp +++ b/autotests/manageheaderbartest.cpp @@ -1595,7 +1595,7 @@ myDatabaseContent.init(QStringLiteral("testDbDirectContent")); connect(&myListener, &TracksListener::trackHasChanged, - &myPlayList, &MediaPlayList::trackChanged); + &myPlayList, &MediaPlayList::trackChanged, Qt::QueuedConnection); connect(&myPlayList, &MediaPlayList::newTrackByIdInList, &myListener, &TracksListener::trackByIdInList); connect(&myPlayList, &MediaPlayList::newTrackByNameInList, @@ -1775,6 +1775,22 @@ QCOMPARE(titleChangedSpy.count(), 1); QCOMPARE(albumChangedSpy.count(), 1); QCOMPARE(imageChangedSpy.count(), 1); + QCOMPARE(isValidChangedSpy.count(), 0); + QCOMPARE(remainingTracksChangedSpy.count(), 1); + + QCOMPARE(isValidChangedSpy.wait(300), true); + + QCOMPARE(currentTrackChangedSpy.count(), 1); + QCOMPARE(playListModelChangedSpy.count(), 1); + QCOMPARE(artistRoleChangedSpy.count(), 1); + QCOMPARE(titleRoleChangedSpy.count(), 1); + QCOMPARE(albumRoleChangedSpy.count(), 1); + QCOMPARE(imageRoleChangedSpy.count(), 1); + QCOMPARE(isValidRoleChangedSpy.count(), 1); + QCOMPARE(artistChangedSpy.count(), 1); + QCOMPARE(titleChangedSpy.count(), 1); + QCOMPARE(albumChangedSpy.count(), 1); + QCOMPARE(imageChangedSpy.count(), 2); QCOMPARE(isValidChangedSpy.count(), 1); QCOMPARE(remainingTracksChangedSpy.count(), 1); @@ -1798,7 +1814,7 @@ QCOMPARE(artistChangedSpy.count(), 1); QCOMPARE(titleChangedSpy.count(), 1); QCOMPARE(albumChangedSpy.count(), 1); - QCOMPARE(imageChangedSpy.count(), 1); + QCOMPARE(imageChangedSpy.count(), 2); QCOMPARE(isValidChangedSpy.count(), 1); QCOMPARE(remainingTracksChangedSpy.count(), 2); @@ -1814,7 +1830,7 @@ myDatabaseContent.init(QStringLiteral("testDbDirectContent")); connect(&myListener, &TracksListener::trackHasChanged, - &myPlayList, &MediaPlayList::trackChanged); + &myPlayList, &MediaPlayList::trackChanged, Qt::QueuedConnection); connect(&myPlayList, &MediaPlayList::newTrackByIdInList, &myListener, &TracksListener::trackByIdInList); connect(&myPlayList, &MediaPlayList::newTrackByNameInList, @@ -2000,6 +2016,22 @@ QCOMPARE(titleChangedSpy.count(), 1); QCOMPARE(albumChangedSpy.count(), 1); QCOMPARE(imageChangedSpy.count(), 1); + QCOMPARE(isValidChangedSpy.count(), 0); + QCOMPARE(remainingTracksChangedSpy.count(), 1); + + QCOMPARE(isValidChangedSpy.wait(300), true); + + QCOMPARE(currentTrackChangedSpy.count(), 1); + QCOMPARE(playListModelChangedSpy.count(), 1); + QCOMPARE(artistRoleChangedSpy.count(), 1); + QCOMPARE(titleRoleChangedSpy.count(), 1); + QCOMPARE(albumRoleChangedSpy.count(), 1); + QCOMPARE(imageRoleChangedSpy.count(), 1); + QCOMPARE(isValidRoleChangedSpy.count(), 1); + QCOMPARE(artistChangedSpy.count(), 1); + QCOMPARE(titleChangedSpy.count(), 1); + QCOMPARE(albumChangedSpy.count(), 1); + QCOMPARE(imageChangedSpy.count(), 2); QCOMPARE(isValidChangedSpy.count(), 1); QCOMPARE(remainingTracksChangedSpy.count(), 1); @@ -2023,7 +2055,7 @@ QCOMPARE(artistChangedSpy.count(), 1); QCOMPARE(titleChangedSpy.count(), 1); QCOMPARE(albumChangedSpy.count(), 1); - QCOMPARE(imageChangedSpy.count(), 1); + QCOMPARE(imageChangedSpy.count(), 2); QCOMPARE(isValidChangedSpy.count(), 1); QCOMPARE(remainingTracksChangedSpy.count(), 2); @@ -2039,7 +2071,7 @@ myDatabaseContent.init(QStringLiteral("testDbDirectContent")); connect(&myListener, &TracksListener::trackHasChanged, - &myPlayList, &MediaPlayList::trackChanged); + &myPlayList, &MediaPlayList::trackChanged, Qt::QueuedConnection); connect(&myPlayList, &MediaPlayList::newTrackByIdInList, &myListener, &TracksListener::trackByIdInList); connect(&myPlayList, &MediaPlayList::newTrackByNameInList, @@ -2225,6 +2257,22 @@ QCOMPARE(titleChangedSpy.count(), 1); QCOMPARE(albumChangedSpy.count(), 1); QCOMPARE(imageChangedSpy.count(), 1); + QCOMPARE(isValidChangedSpy.count(), 0); + QCOMPARE(remainingTracksChangedSpy.count(), 1); + + QCOMPARE(isValidChangedSpy.wait(300), true); + + QCOMPARE(currentTrackChangedSpy.count(), 1); + QCOMPARE(playListModelChangedSpy.count(), 1); + QCOMPARE(artistRoleChangedSpy.count(), 1); + QCOMPARE(titleRoleChangedSpy.count(), 1); + QCOMPARE(albumRoleChangedSpy.count(), 1); + QCOMPARE(imageRoleChangedSpy.count(), 1); + QCOMPARE(isValidRoleChangedSpy.count(), 1); + QCOMPARE(artistChangedSpy.count(), 1); + QCOMPARE(titleChangedSpy.count(), 1); + QCOMPARE(albumChangedSpy.count(), 1); + QCOMPARE(imageChangedSpy.count(), 2); QCOMPARE(isValidChangedSpy.count(), 1); QCOMPARE(remainingTracksChangedSpy.count(), 1); @@ -2248,7 +2296,7 @@ QCOMPARE(artistChangedSpy.count(), 1); QCOMPARE(titleChangedSpy.count(), 1); QCOMPARE(albumChangedSpy.count(), 1); - QCOMPARE(imageChangedSpy.count(), 1); + QCOMPARE(imageChangedSpy.count(), 2); QCOMPARE(isValidChangedSpy.count(), 1); QCOMPARE(remainingTracksChangedSpy.count(), 1); } @@ -2262,7 +2310,7 @@ myDatabaseContent.init(QStringLiteral("testDbDirectContent")); connect(&myListener, &TracksListener::trackHasChanged, - &myPlayList, &MediaPlayList::trackChanged); + &myPlayList, &MediaPlayList::trackChanged, Qt::QueuedConnection); connect(&myPlayList, &MediaPlayList::newTrackByIdInList, &myListener, &TracksListener::trackByIdInList); connect(&myPlayList, &MediaPlayList::newTrackByNameInList, diff --git a/autotests/mediaplaylisttest.cpp b/autotests/mediaplaylisttest.cpp --- a/autotests/mediaplaylisttest.cpp +++ b/autotests/mediaplaylisttest.cpp @@ -140,6 +140,7 @@ qRegisterMetaType>>("QHash>"); qRegisterMetaType>("QVector"); qRegisterMetaType>("QHash"); + qRegisterMetaType>("QList"); } void MediaPlayListTest::simpleInitialCase() @@ -155,7 +156,6 @@ QSignalSpy rowsMovedSpy(&myPlayList, &MediaPlayList::rowsMoved); QSignalSpy rowsRemovedSpy(&myPlayList, &MediaPlayList::rowsRemoved); QSignalSpy rowsInsertedSpy(&myPlayList, &MediaPlayList::rowsInserted); - QSignalSpy trackHasBeenAddedSpy(&myPlayList, &MediaPlayList::trackHasBeenAdded); QSignalSpy persistentStateChangedSpy(&myPlayList, &MediaPlayList::persistentStateChanged); QSignalSpy dataChangedSpy(&myPlayList, &MediaPlayList::dataChanged); QSignalSpy newTrackByIdInListSpy(&myPlayList, &MediaPlayList::newTrackByIdInList); @@ -169,7 +169,6 @@ QCOMPARE(rowsRemovedSpy.count(), 0); QCOMPARE(rowsMovedSpy.count(), 0); QCOMPARE(rowsInsertedSpy.count(), 0); - QCOMPARE(trackHasBeenAddedSpy.count(), 0); QCOMPARE(persistentStateChangedSpy.count(), 0); QCOMPARE(dataChangedSpy.count(), 0); QCOMPARE(newTrackByIdInListSpy.count(), 0); @@ -208,7 +207,6 @@ QCOMPARE(rowsRemovedSpy.count(), 0); QCOMPARE(rowsMovedSpy.count(), 0); QCOMPARE(rowsInsertedSpy.count(), 0); - QCOMPARE(trackHasBeenAddedSpy.count(), 0); QCOMPARE(persistentStateChangedSpy.count(), 0); QCOMPARE(dataChangedSpy.count(), 0); QCOMPARE(newTrackByIdInListSpy.count(), 0); @@ -225,7 +223,6 @@ QCOMPARE(rowsRemovedSpy.count(), 0); QCOMPARE(rowsMovedSpy.count(), 0); QCOMPARE(rowsInsertedSpy.count(), 1); - QCOMPARE(trackHasBeenAddedSpy.count(), 1); QCOMPARE(persistentStateChangedSpy.count(), 1); QCOMPARE(dataChangedSpy.count(), 0); QCOMPARE(newTrackByIdInListSpy.count(), 1); @@ -241,7 +238,6 @@ QCOMPARE(rowsRemovedSpy.count(), 0); QCOMPARE(rowsMovedSpy.count(), 0); QCOMPARE(rowsInsertedSpy.count(), 1); - QCOMPARE(trackHasBeenAddedSpy.count(), 1); QCOMPARE(persistentStateChangedSpy.count(), 1); QCOMPARE(dataChangedSpy.count(), 1); QCOMPARE(newTrackByIdInListSpy.count(), 1); @@ -263,7 +259,6 @@ QSignalSpy rowsMovedSpy(&myPlayList, &MediaPlayList::rowsMoved); QSignalSpy rowsRemovedSpy(&myPlayList, &MediaPlayList::rowsRemoved); QSignalSpy rowsInsertedSpy(&myPlayList, &MediaPlayList::rowsInserted); - QSignalSpy trackHasBeenAddedSpy(&myPlayList, &MediaPlayList::trackHasBeenAdded); QSignalSpy persistentStateChangedSpy(&myPlayList, &MediaPlayList::persistentStateChanged); QSignalSpy dataChangedSpy(&myPlayList, &MediaPlayList::dataChanged); QSignalSpy newTrackByIdInListSpy(&myPlayList, &MediaPlayList::newTrackByIdInList); @@ -277,7 +272,6 @@ QCOMPARE(rowsRemovedSpy.count(), 0); QCOMPARE(rowsMovedSpy.count(), 0); QCOMPARE(rowsInsertedSpy.count(), 0); - QCOMPARE(trackHasBeenAddedSpy.count(), 0); QCOMPARE(persistentStateChangedSpy.count(), 0); QCOMPARE(dataChangedSpy.count(), 0); QCOMPARE(newTrackByIdInListSpy.count(), 0); @@ -316,7 +310,6 @@ QCOMPARE(rowsRemovedSpy.count(), 0); QCOMPARE(rowsMovedSpy.count(), 0); QCOMPARE(rowsInsertedSpy.count(), 0); - QCOMPARE(trackHasBeenAddedSpy.count(), 0); QCOMPARE(persistentStateChangedSpy.count(), 0); QCOMPARE(dataChangedSpy.count(), 0); QCOMPARE(newTrackByIdInListSpy.count(), 0); @@ -332,7 +325,6 @@ QCOMPARE(rowsRemovedSpy.count(), 0); QCOMPARE(rowsMovedSpy.count(), 0); QCOMPARE(rowsInsertedSpy.count(), 6); - QCOMPARE(trackHasBeenAddedSpy.count(), 6); QCOMPARE(persistentStateChangedSpy.count(), 6); QCOMPARE(dataChangedSpy.count(), 0); QCOMPARE(newTrackByIdInListSpy.count(), 6); @@ -393,7 +385,6 @@ QSignalSpy rowsMovedSpy(&myPlayList, &MediaPlayList::rowsMoved); QSignalSpy rowsRemovedSpy(&myPlayList, &MediaPlayList::rowsRemoved); QSignalSpy rowsInsertedSpy(&myPlayList, &MediaPlayList::rowsInserted); - QSignalSpy trackHasBeenAddedSpy(&myPlayList, &MediaPlayList::trackHasBeenAdded); QSignalSpy persistentStateChangedSpy(&myPlayList, &MediaPlayList::persistentStateChanged); QSignalSpy dataChangedSpy(&myPlayList, &MediaPlayList::dataChanged); QSignalSpy newTrackByIdInListSpy(&myPlayList, &MediaPlayList::newTrackByIdInList); @@ -407,7 +398,6 @@ QCOMPARE(rowsRemovedSpy.count(), 0); QCOMPARE(rowsMovedSpy.count(), 0); QCOMPARE(rowsInsertedSpy.count(), 0); - QCOMPARE(trackHasBeenAddedSpy.count(), 0); QCOMPARE(persistentStateChangedSpy.count(), 0); QCOMPARE(dataChangedSpy.count(), 0); QCOMPARE(newTrackByIdInListSpy.count(), 0); @@ -446,7 +436,6 @@ QCOMPARE(rowsRemovedSpy.count(), 0); QCOMPARE(rowsMovedSpy.count(), 0); QCOMPARE(rowsInsertedSpy.count(), 0); - QCOMPARE(trackHasBeenAddedSpy.count(), 0); QCOMPARE(persistentStateChangedSpy.count(), 0); QCOMPARE(dataChangedSpy.count(), 0); QCOMPARE(newTrackByIdInListSpy.count(), 0); @@ -462,7 +451,6 @@ QCOMPARE(rowsRemovedSpy.count(), 0); QCOMPARE(rowsMovedSpy.count(), 0); QCOMPARE(rowsInsertedSpy.count(), 1); - QCOMPARE(trackHasBeenAddedSpy.count(), 0); QCOMPARE(persistentStateChangedSpy.count(), 1); QCOMPARE(dataChangedSpy.count(), 0); QCOMPARE(newTrackByIdInListSpy.count(), 0); @@ -480,7 +468,6 @@ QCOMPARE(rowsRemovedSpy.count(), 0); QCOMPARE(rowsMovedSpy.count(), 0); QCOMPARE(rowsInsertedSpy.count(), 2); - QCOMPARE(trackHasBeenAddedSpy.count(), 0); QCOMPARE(persistentStateChangedSpy.count(), 2); QCOMPARE(dataChangedSpy.count(), 1); QCOMPARE(newTrackByIdInListSpy.count(), 0); @@ -541,7 +528,6 @@ QSignalSpy rowsMovedSpy(&myPlayList, &MediaPlayList::rowsMoved); QSignalSpy rowsRemovedSpy(&myPlayList, &MediaPlayList::rowsRemoved); QSignalSpy rowsInsertedSpy(&myPlayList, &MediaPlayList::rowsInserted); - QSignalSpy trackHasBeenAddedSpy(&myPlayList, &MediaPlayList::trackHasBeenAdded); QSignalSpy persistentStateChangedSpy(&myPlayList, &MediaPlayList::persistentStateChanged); QSignalSpy dataChangedSpy(&myPlayList, &MediaPlayList::dataChanged); QSignalSpy newTrackByIdInListSpy(&myPlayList, &MediaPlayList::newTrackByIdInList); @@ -555,7 +541,6 @@ QCOMPARE(rowsRemovedSpy.count(), 0); QCOMPARE(rowsMovedSpy.count(), 0); QCOMPARE(rowsInsertedSpy.count(), 0); - QCOMPARE(trackHasBeenAddedSpy.count(), 0); QCOMPARE(persistentStateChangedSpy.count(), 0); QCOMPARE(dataChangedSpy.count(), 0); QCOMPARE(newTrackByIdInListSpy.count(), 0); @@ -594,7 +579,6 @@ QCOMPARE(rowsRemovedSpy.count(), 0); QCOMPARE(rowsMovedSpy.count(), 0); QCOMPARE(rowsInsertedSpy.count(), 0); - QCOMPARE(trackHasBeenAddedSpy.count(), 0); QCOMPARE(persistentStateChangedSpy.count(), 0); QCOMPARE(dataChangedSpy.count(), 0); QCOMPARE(newTrackByIdInListSpy.count(), 0); @@ -610,7 +594,6 @@ QCOMPARE(rowsRemovedSpy.count(), 0); QCOMPARE(rowsMovedSpy.count(), 0); QCOMPARE(rowsInsertedSpy.count(), 6); - QCOMPARE(trackHasBeenAddedSpy.count(), 6); QCOMPARE(persistentStateChangedSpy.count(), 6); QCOMPARE(dataChangedSpy.count(), 0); QCOMPARE(newTrackByIdInListSpy.count(), 6); @@ -633,7 +616,6 @@ QCOMPARE(rowsRemovedSpy.count(), 1); QCOMPARE(rowsMovedSpy.count(), 0); QCOMPARE(rowsInsertedSpy.count(), 6); - QCOMPARE(trackHasBeenAddedSpy.count(), 6); QCOMPARE(persistentStateChangedSpy.count(), 7); QCOMPARE(dataChangedSpy.count(), 1); QCOMPARE(newTrackByIdInListSpy.count(), 6); @@ -661,7 +643,6 @@ QSignalSpy rowsMovedSpy(&myPlayList, &MediaPlayList::rowsMoved); QSignalSpy rowsRemovedSpy(&myPlayList, &MediaPlayList::rowsRemoved); QSignalSpy rowsInsertedSpy(&myPlayList, &MediaPlayList::rowsInserted); - QSignalSpy trackHasBeenAddedSpy(&myPlayList, &MediaPlayList::trackHasBeenAdded); QSignalSpy persistentStateChangedSpy(&myPlayList, &MediaPlayList::persistentStateChanged); QSignalSpy dataChangedSpy(&myPlayList, &MediaPlayList::dataChanged); QSignalSpy newTrackByIdInListSpy(&myPlayList, &MediaPlayList::newTrackByIdInList); @@ -675,7 +656,6 @@ QCOMPARE(rowsRemovedSpy.count(), 0); QCOMPARE(rowsMovedSpy.count(), 0); QCOMPARE(rowsInsertedSpy.count(), 0); - QCOMPARE(trackHasBeenAddedSpy.count(), 0); QCOMPARE(persistentStateChangedSpy.count(), 0); QCOMPARE(dataChangedSpy.count(), 0); QCOMPARE(newTrackByIdInListSpy.count(), 0); @@ -714,7 +694,6 @@ QCOMPARE(rowsRemovedSpy.count(), 0); QCOMPARE(rowsMovedSpy.count(), 0); QCOMPARE(rowsInsertedSpy.count(), 0); - QCOMPARE(trackHasBeenAddedSpy.count(), 0); QCOMPARE(persistentStateChangedSpy.count(), 0); QCOMPARE(dataChangedSpy.count(), 0); QCOMPARE(newTrackByIdInListSpy.count(), 0); @@ -731,7 +710,6 @@ QCOMPARE(rowsRemovedSpy.count(), 0); QCOMPARE(rowsMovedSpy.count(), 0); QCOMPARE(rowsInsertedSpy.count(), 1); - QCOMPARE(trackHasBeenAddedSpy.count(), 1); QCOMPARE(persistentStateChangedSpy.count(), 1); QCOMPARE(dataChangedSpy.count(), 0); QCOMPARE(newTrackByIdInListSpy.count(), 1); @@ -747,7 +725,6 @@ QCOMPARE(rowsRemovedSpy.count(), 0); QCOMPARE(rowsMovedSpy.count(), 0); QCOMPARE(rowsInsertedSpy.count(), 1); - QCOMPARE(trackHasBeenAddedSpy.count(), 1); QCOMPARE(persistentStateChangedSpy.count(), 1); QCOMPARE(dataChangedSpy.count(), 1); QCOMPARE(newTrackByIdInListSpy.count(), 1); @@ -766,7 +743,6 @@ QCOMPARE(rowsRemovedSpy.count(), 0); QCOMPARE(rowsMovedSpy.count(), 0); QCOMPARE(rowsInsertedSpy.count(), 2); - QCOMPARE(trackHasBeenAddedSpy.count(), 2); QCOMPARE(persistentStateChangedSpy.count(), 2); QCOMPARE(dataChangedSpy.count(), 1); QCOMPARE(newTrackByIdInListSpy.count(), 2); @@ -782,7 +758,6 @@ QCOMPARE(rowsRemovedSpy.count(), 0); QCOMPARE(rowsMovedSpy.count(), 0); QCOMPARE(rowsInsertedSpy.count(), 2); - QCOMPARE(trackHasBeenAddedSpy.count(), 2); QCOMPARE(persistentStateChangedSpy.count(), 2); QCOMPARE(dataChangedSpy.count(), 2); QCOMPARE(newTrackByIdInListSpy.count(), 2); @@ -802,7 +777,6 @@ QCOMPARE(rowsRemovedSpy.count(), 0); QCOMPARE(rowsMovedSpy.count(), 0); QCOMPARE(rowsInsertedSpy.count(), 3); - QCOMPARE(trackHasBeenAddedSpy.count(), 3); QCOMPARE(persistentStateChangedSpy.count(), 3); QCOMPARE(dataChangedSpy.count(), 2); QCOMPARE(newTrackByIdInListSpy.count(), 3); @@ -818,7 +792,6 @@ QCOMPARE(rowsRemovedSpy.count(), 0); QCOMPARE(rowsMovedSpy.count(), 0); QCOMPARE(rowsInsertedSpy.count(), 3); - QCOMPARE(trackHasBeenAddedSpy.count(), 3); QCOMPARE(persistentStateChangedSpy.count(), 3); QCOMPARE(dataChangedSpy.count(), 3); QCOMPARE(newTrackByIdInListSpy.count(), 3); @@ -839,7 +812,6 @@ QCOMPARE(rowsRemovedSpy.count(), 0); QCOMPARE(rowsMovedSpy.count(), 0); QCOMPARE(rowsInsertedSpy.count(), 4); - QCOMPARE(trackHasBeenAddedSpy.count(), 4); QCOMPARE(persistentStateChangedSpy.count(), 4); QCOMPARE(dataChangedSpy.count(), 3); QCOMPARE(newTrackByIdInListSpy.count(), 4); @@ -855,7 +827,6 @@ QCOMPARE(rowsRemovedSpy.count(), 0); QCOMPARE(rowsMovedSpy.count(), 0); QCOMPARE(rowsInsertedSpy.count(), 4); - QCOMPARE(trackHasBeenAddedSpy.count(), 4); QCOMPARE(persistentStateChangedSpy.count(), 4); QCOMPARE(dataChangedSpy.count(), 4); QCOMPARE(newTrackByIdInListSpy.count(), 4); @@ -876,7 +847,6 @@ QCOMPARE(rowsRemovedSpy.count(), 1); QCOMPARE(rowsMovedSpy.count(), 0); QCOMPARE(rowsInsertedSpy.count(), 4); - QCOMPARE(trackHasBeenAddedSpy.count(), 4); QCOMPARE(persistentStateChangedSpy.count(), 5); QCOMPARE(dataChangedSpy.count(), 5); QCOMPARE(newTrackByIdInListSpy.count(), 4); @@ -902,7 +872,6 @@ QSignalSpy rowsMovedSpy(&myPlayList, &MediaPlayList::rowsMoved); QSignalSpy rowsRemovedSpy(&myPlayList, &MediaPlayList::rowsRemoved); QSignalSpy rowsInsertedSpy(&myPlayList, &MediaPlayList::rowsInserted); - QSignalSpy trackHasBeenAddedSpy(&myPlayList, &MediaPlayList::trackHasBeenAdded); QSignalSpy persistentStateChangedSpy(&myPlayList, &MediaPlayList::persistentStateChanged); QSignalSpy dataChangedSpy(&myPlayList, &MediaPlayList::dataChanged); QSignalSpy newTrackByIdInListSpy(&myPlayList, &MediaPlayList::newTrackByIdInList); @@ -916,7 +885,6 @@ QCOMPARE(rowsRemovedSpy.count(), 0); QCOMPARE(rowsMovedSpy.count(), 0); QCOMPARE(rowsInsertedSpy.count(), 0); - QCOMPARE(trackHasBeenAddedSpy.count(), 0); QCOMPARE(persistentStateChangedSpy.count(), 0); QCOMPARE(dataChangedSpy.count(), 0); QCOMPARE(newTrackByIdInListSpy.count(), 0); @@ -955,7 +923,6 @@ QCOMPARE(rowsRemovedSpy.count(), 0); QCOMPARE(rowsMovedSpy.count(), 0); QCOMPARE(rowsInsertedSpy.count(), 1); - QCOMPARE(trackHasBeenAddedSpy.count(), 1); QCOMPARE(persistentStateChangedSpy.count(), 1); QCOMPARE(dataChangedSpy.count(), 1); QCOMPARE(newTrackByIdInListSpy.count(), 0); @@ -975,7 +942,6 @@ QCOMPARE(rowsRemovedSpy.count(), 0); QCOMPARE(rowsMovedSpy.count(), 0); QCOMPARE(rowsInsertedSpy.count(), 2); - QCOMPARE(trackHasBeenAddedSpy.count(), 2); QCOMPARE(persistentStateChangedSpy.count(), 2); QCOMPARE(dataChangedSpy.count(), 2); QCOMPARE(newTrackByIdInListSpy.count(), 0); @@ -996,7 +962,6 @@ QCOMPARE(rowsRemovedSpy.count(), 0); QCOMPARE(rowsMovedSpy.count(), 0); QCOMPARE(rowsInsertedSpy.count(), 3); - QCOMPARE(trackHasBeenAddedSpy.count(), 3); QCOMPARE(persistentStateChangedSpy.count(), 3); QCOMPARE(dataChangedSpy.count(), 3); QCOMPARE(newTrackByIdInListSpy.count(), 0); @@ -1018,7 +983,6 @@ QCOMPARE(rowsRemovedSpy.count(), 0); QCOMPARE(rowsMovedSpy.count(), 0); QCOMPARE(rowsInsertedSpy.count(), 4); - QCOMPARE(trackHasBeenAddedSpy.count(), 4); QCOMPARE(persistentStateChangedSpy.count(), 4); QCOMPARE(dataChangedSpy.count(), 4); QCOMPARE(newTrackByIdInListSpy.count(), 0); @@ -1037,7 +1001,6 @@ QCOMPARE(rowsRemovedSpy.count(), 0); QCOMPARE(rowsMovedSpy.count(), 0); QCOMPARE(rowsInsertedSpy.count(), 4); - QCOMPARE(trackHasBeenAddedSpy.count(), 4); QCOMPARE(persistentStateChangedSpy.count(), 4); QCOMPARE(dataChangedSpy.count(), 4); QCOMPARE(newTrackByIdInListSpy.count(), 0); @@ -1056,7 +1019,6 @@ QCOMPARE(rowsRemovedSpy.count(), 0); QCOMPARE(rowsMovedSpy.count(), 0); QCOMPARE(rowsInsertedSpy.count(), 4); - QCOMPARE(trackHasBeenAddedSpy.count(), 4); QCOMPARE(persistentStateChangedSpy.count(), 4); QCOMPARE(dataChangedSpy.count(), 8); QCOMPARE(newTrackByIdInListSpy.count(), 0); @@ -1108,7 +1070,6 @@ QSignalSpy rowsMovedSpy(&myPlayList, &MediaPlayList::rowsMoved); QSignalSpy rowsRemovedSpy(&myPlayList, &MediaPlayList::rowsRemoved); QSignalSpy rowsInsertedSpy(&myPlayList, &MediaPlayList::rowsInserted); - QSignalSpy trackHasBeenAddedSpy(&myPlayList, &MediaPlayList::trackHasBeenAdded); QSignalSpy persistentStateChangedSpy(&myPlayList, &MediaPlayList::persistentStateChanged); QSignalSpy dataChangedSpy(&myPlayList, &MediaPlayList::dataChanged); QSignalSpy newTrackByIdInListSpy(&myPlayList, &MediaPlayList::newTrackByIdInList); @@ -1122,7 +1083,6 @@ QCOMPARE(rowsRemovedSpy.count(), 0); QCOMPARE(rowsMovedSpy.count(), 0); QCOMPARE(rowsInsertedSpy.count(), 0); - QCOMPARE(trackHasBeenAddedSpy.count(), 0); QCOMPARE(persistentStateChangedSpy.count(), 0); QCOMPARE(dataChangedSpy.count(), 0); QCOMPARE(newTrackByIdInListSpy.count(), 0); @@ -1161,7 +1121,6 @@ QCOMPARE(rowsRemovedSpy.count(), 0); QCOMPARE(rowsMovedSpy.count(), 0); QCOMPARE(rowsInsertedSpy.count(), 0); - QCOMPARE(trackHasBeenAddedSpy.count(), 0); QCOMPARE(persistentStateChangedSpy.count(), 0); QCOMPARE(dataChangedSpy.count(), 0); QCOMPARE(newTrackByIdInListSpy.count(), 0); @@ -1178,7 +1137,6 @@ QCOMPARE(rowsRemovedSpy.count(), 0); QCOMPARE(rowsMovedSpy.count(), 0); QCOMPARE(rowsInsertedSpy.count(), 1); - QCOMPARE(trackHasBeenAddedSpy.count(), 1); QCOMPARE(persistentStateChangedSpy.count(), 1); QCOMPARE(dataChangedSpy.count(), 0); QCOMPARE(newTrackByIdInListSpy.count(), 1); @@ -1194,7 +1152,6 @@ QCOMPARE(rowsRemovedSpy.count(), 0); QCOMPARE(rowsMovedSpy.count(), 0); QCOMPARE(rowsInsertedSpy.count(), 1); - QCOMPARE(trackHasBeenAddedSpy.count(), 1); QCOMPARE(persistentStateChangedSpy.count(), 1); QCOMPARE(dataChangedSpy.count(), 1); QCOMPARE(newTrackByIdInListSpy.count(), 1); @@ -1213,7 +1170,6 @@ QCOMPARE(rowsRemovedSpy.count(), 0); QCOMPARE(rowsMovedSpy.count(), 0); QCOMPARE(rowsInsertedSpy.count(), 2); - QCOMPARE(trackHasBeenAddedSpy.count(), 2); QCOMPARE(persistentStateChangedSpy.count(), 2); QCOMPARE(dataChangedSpy.count(), 1); QCOMPARE(newTrackByIdInListSpy.count(), 2); @@ -1229,7 +1185,6 @@ QCOMPARE(rowsRemovedSpy.count(), 0); QCOMPARE(rowsMovedSpy.count(), 0); QCOMPARE(rowsInsertedSpy.count(), 2); - QCOMPARE(trackHasBeenAddedSpy.count(), 2); QCOMPARE(persistentStateChangedSpy.count(), 2); QCOMPARE(dataChangedSpy.count(), 2); QCOMPARE(newTrackByIdInListSpy.count(), 2); @@ -1249,7 +1204,6 @@ QCOMPARE(rowsRemovedSpy.count(), 0); QCOMPARE(rowsMovedSpy.count(), 0); QCOMPARE(rowsInsertedSpy.count(), 3); - QCOMPARE(trackHasBeenAddedSpy.count(), 3); QCOMPARE(persistentStateChangedSpy.count(), 3); QCOMPARE(dataChangedSpy.count(), 2); QCOMPARE(newTrackByIdInListSpy.count(), 3); @@ -1265,7 +1219,6 @@ QCOMPARE(rowsRemovedSpy.count(), 0); QCOMPARE(rowsMovedSpy.count(), 0); QCOMPARE(rowsInsertedSpy.count(), 3); - QCOMPARE(trackHasBeenAddedSpy.count(), 3); QCOMPARE(persistentStateChangedSpy.count(), 3); QCOMPARE(dataChangedSpy.count(), 3); QCOMPARE(newTrackByIdInListSpy.count(), 3); @@ -1286,7 +1239,6 @@ QCOMPARE(rowsRemovedSpy.count(), 0); QCOMPARE(rowsMovedSpy.count(), 0); QCOMPARE(rowsInsertedSpy.count(), 4); - QCOMPARE(trackHasBeenAddedSpy.count(), 4); QCOMPARE(persistentStateChangedSpy.count(), 4); QCOMPARE(dataChangedSpy.count(), 3); QCOMPARE(newTrackByIdInListSpy.count(), 4); @@ -1302,7 +1254,6 @@ QCOMPARE(rowsRemovedSpy.count(), 0); QCOMPARE(rowsMovedSpy.count(), 0); QCOMPARE(rowsInsertedSpy.count(), 4); - QCOMPARE(trackHasBeenAddedSpy.count(), 4); QCOMPARE(persistentStateChangedSpy.count(), 4); QCOMPARE(dataChangedSpy.count(), 4); QCOMPARE(newTrackByIdInListSpy.count(), 4); @@ -1323,7 +1274,6 @@ QCOMPARE(rowsRemovedSpy.count(), 1); QCOMPARE(rowsMovedSpy.count(), 0); QCOMPARE(rowsInsertedSpy.count(), 4); - QCOMPARE(trackHasBeenAddedSpy.count(), 4); QCOMPARE(persistentStateChangedSpy.count(), 5); QCOMPARE(dataChangedSpy.count(), 5); QCOMPARE(newTrackByIdInListSpy.count(), 4); @@ -1343,7 +1293,6 @@ QCOMPARE(rowsRemovedSpy.count(), 2); QCOMPARE(rowsMovedSpy.count(), 0); QCOMPARE(rowsInsertedSpy.count(), 4); - QCOMPARE(trackHasBeenAddedSpy.count(), 4); QCOMPARE(persistentStateChangedSpy.count(), 6); QCOMPARE(dataChangedSpy.count(), 6); QCOMPARE(newTrackByIdInListSpy.count(), 4); @@ -1368,7 +1317,6 @@ QSignalSpy rowsMovedSpy(&myPlayList, &MediaPlayList::rowsMoved); QSignalSpy rowsRemovedSpy(&myPlayList, &MediaPlayList::rowsRemoved); QSignalSpy rowsInsertedSpy(&myPlayList, &MediaPlayList::rowsInserted); - QSignalSpy trackHasBeenAddedSpy(&myPlayList, &MediaPlayList::trackHasBeenAdded); QSignalSpy persistentStateChangedSpy(&myPlayList, &MediaPlayList::persistentStateChanged); QSignalSpy dataChangedSpy(&myPlayList, &MediaPlayList::dataChanged); QSignalSpy newTrackByIdInListSpy(&myPlayList, &MediaPlayList::newTrackByIdInList); @@ -1382,7 +1330,6 @@ QCOMPARE(rowsRemovedSpy.count(), 0); QCOMPARE(rowsMovedSpy.count(), 0); QCOMPARE(rowsInsertedSpy.count(), 0); - QCOMPARE(trackHasBeenAddedSpy.count(), 0); QCOMPARE(persistentStateChangedSpy.count(), 0); QCOMPARE(dataChangedSpy.count(), 0); QCOMPARE(newTrackByIdInListSpy.count(), 0); @@ -1421,7 +1368,6 @@ QCOMPARE(rowsRemovedSpy.count(), 0); QCOMPARE(rowsMovedSpy.count(), 0); QCOMPARE(rowsInsertedSpy.count(), 0); - QCOMPARE(trackHasBeenAddedSpy.count(), 0); QCOMPARE(persistentStateChangedSpy.count(), 0); QCOMPARE(dataChangedSpy.count(), 0); QCOMPARE(newTrackByIdInListSpy.count(), 0); @@ -1438,7 +1384,6 @@ QCOMPARE(rowsRemovedSpy.count(), 0); QCOMPARE(rowsMovedSpy.count(), 0); QCOMPARE(rowsInsertedSpy.count(), 1); - QCOMPARE(trackHasBeenAddedSpy.count(), 1); QCOMPARE(persistentStateChangedSpy.count(), 1); QCOMPARE(dataChangedSpy.count(), 0); QCOMPARE(newTrackByIdInListSpy.count(), 1); @@ -1454,7 +1399,6 @@ QCOMPARE(rowsRemovedSpy.count(), 0); QCOMPARE(rowsMovedSpy.count(), 0); QCOMPARE(rowsInsertedSpy.count(), 1); - QCOMPARE(trackHasBeenAddedSpy.count(), 1); QCOMPARE(persistentStateChangedSpy.count(), 1); QCOMPARE(dataChangedSpy.count(), 1); QCOMPARE(newTrackByIdInListSpy.count(), 1); @@ -1473,7 +1417,6 @@ QCOMPARE(rowsRemovedSpy.count(), 0); QCOMPARE(rowsMovedSpy.count(), 0); QCOMPARE(rowsInsertedSpy.count(), 2); - QCOMPARE(trackHasBeenAddedSpy.count(), 2); QCOMPARE(persistentStateChangedSpy.count(), 2); QCOMPARE(dataChangedSpy.count(), 1); QCOMPARE(newTrackByIdInListSpy.count(), 2); @@ -1489,7 +1432,6 @@ QCOMPARE(rowsRemovedSpy.count(), 0); QCOMPARE(rowsMovedSpy.count(), 0); QCOMPARE(rowsInsertedSpy.count(), 2); - QCOMPARE(trackHasBeenAddedSpy.count(), 2); QCOMPARE(persistentStateChangedSpy.count(), 2); QCOMPARE(dataChangedSpy.count(), 2); QCOMPARE(newTrackByIdInListSpy.count(), 2); @@ -1509,7 +1451,6 @@ QCOMPARE(rowsRemovedSpy.count(), 0); QCOMPARE(rowsMovedSpy.count(), 0); QCOMPARE(rowsInsertedSpy.count(), 3); - QCOMPARE(trackHasBeenAddedSpy.count(), 3); QCOMPARE(persistentStateChangedSpy.count(), 3); QCOMPARE(dataChangedSpy.count(), 2); QCOMPARE(newTrackByIdInListSpy.count(), 3); @@ -1525,7 +1466,6 @@ QCOMPARE(rowsRemovedSpy.count(), 0); QCOMPARE(rowsMovedSpy.count(), 0); QCOMPARE(rowsInsertedSpy.count(), 3); - QCOMPARE(trackHasBeenAddedSpy.count(), 3); QCOMPARE(persistentStateChangedSpy.count(), 3); QCOMPARE(dataChangedSpy.count(), 3); QCOMPARE(newTrackByIdInListSpy.count(), 3); @@ -1546,7 +1486,6 @@ QCOMPARE(rowsRemovedSpy.count(), 0); QCOMPARE(rowsMovedSpy.count(), 0); QCOMPARE(rowsInsertedSpy.count(), 4); - QCOMPARE(trackHasBeenAddedSpy.count(), 4); QCOMPARE(persistentStateChangedSpy.count(), 4); QCOMPARE(dataChangedSpy.count(), 3); QCOMPARE(newTrackByIdInListSpy.count(), 4); @@ -1562,7 +1501,6 @@ QCOMPARE(rowsRemovedSpy.count(), 0); QCOMPARE(rowsMovedSpy.count(), 0); QCOMPARE(rowsInsertedSpy.count(), 4); - QCOMPARE(trackHasBeenAddedSpy.count(), 4); QCOMPARE(persistentStateChangedSpy.count(), 4); QCOMPARE(dataChangedSpy.count(), 4); QCOMPARE(newTrackByIdInListSpy.count(), 4); @@ -1583,7 +1521,6 @@ QCOMPARE(rowsRemovedSpy.count(), 0); QCOMPARE(rowsMovedSpy.count(), 1); QCOMPARE(rowsInsertedSpy.count(), 4); - QCOMPARE(trackHasBeenAddedSpy.count(), 4); QCOMPARE(persistentStateChangedSpy.count(), 5); QCOMPARE(dataChangedSpy.count(), 6); QCOMPARE(newTrackByIdInListSpy.count(), 4); @@ -1622,7 +1559,6 @@ QSignalSpy rowsMovedSpy(&myPlayList, &MediaPlayList::rowsMoved); QSignalSpy rowsRemovedSpy(&myPlayList, &MediaPlayList::rowsRemoved); QSignalSpy rowsInsertedSpy(&myPlayList, &MediaPlayList::rowsInserted); - QSignalSpy trackHasBeenAddedSpy(&myPlayList, &MediaPlayList::trackHasBeenAdded); QSignalSpy persistentStateChangedSpy(&myPlayList, &MediaPlayList::persistentStateChanged); QSignalSpy dataChangedSpy(&myPlayList, &MediaPlayList::dataChanged); QSignalSpy newTrackByIdInListSpy(&myPlayList, &MediaPlayList::newTrackByIdInList); @@ -1636,7 +1572,6 @@ QCOMPARE(rowsRemovedSpy.count(), 0); QCOMPARE(rowsMovedSpy.count(), 0); QCOMPARE(rowsInsertedSpy.count(), 0); - QCOMPARE(trackHasBeenAddedSpy.count(), 0); QCOMPARE(persistentStateChangedSpy.count(), 0); QCOMPARE(dataChangedSpy.count(), 0); QCOMPARE(newTrackByIdInListSpy.count(), 0); @@ -1675,7 +1610,6 @@ QCOMPARE(rowsRemovedSpy.count(), 0); QCOMPARE(rowsMovedSpy.count(), 0); QCOMPARE(rowsInsertedSpy.count(), 0); - QCOMPARE(trackHasBeenAddedSpy.count(), 0); QCOMPARE(persistentStateChangedSpy.count(), 0); QCOMPARE(dataChangedSpy.count(), 0); QCOMPARE(newTrackByIdInListSpy.count(), 0); @@ -1692,7 +1626,6 @@ QCOMPARE(rowsRemovedSpy.count(), 0); QCOMPARE(rowsMovedSpy.count(), 0); QCOMPARE(rowsInsertedSpy.count(), 1); - QCOMPARE(trackHasBeenAddedSpy.count(), 1); QCOMPARE(persistentStateChangedSpy.count(), 1); QCOMPARE(dataChangedSpy.count(), 0); QCOMPARE(newTrackByIdInListSpy.count(), 1); @@ -1708,7 +1641,6 @@ QCOMPARE(rowsRemovedSpy.count(), 0); QCOMPARE(rowsMovedSpy.count(), 0); QCOMPARE(rowsInsertedSpy.count(), 1); - QCOMPARE(trackHasBeenAddedSpy.count(), 1); QCOMPARE(persistentStateChangedSpy.count(), 1); QCOMPARE(dataChangedSpy.count(), 1); QCOMPARE(newTrackByIdInListSpy.count(), 1); @@ -1727,7 +1659,6 @@ QCOMPARE(rowsRemovedSpy.count(), 0); QCOMPARE(rowsMovedSpy.count(), 0); QCOMPARE(rowsInsertedSpy.count(), 2); - QCOMPARE(trackHasBeenAddedSpy.count(), 2); QCOMPARE(persistentStateChangedSpy.count(), 2); QCOMPARE(dataChangedSpy.count(), 1); QCOMPARE(newTrackByIdInListSpy.count(), 2); @@ -1743,7 +1674,6 @@ QCOMPARE(rowsRemovedSpy.count(), 0); QCOMPARE(rowsMovedSpy.count(), 0); QCOMPARE(rowsInsertedSpy.count(), 2); - QCOMPARE(trackHasBeenAddedSpy.count(), 2); QCOMPARE(persistentStateChangedSpy.count(), 2); QCOMPARE(dataChangedSpy.count(), 2); QCOMPARE(newTrackByIdInListSpy.count(), 2); @@ -1763,7 +1693,6 @@ QCOMPARE(rowsRemovedSpy.count(), 0); QCOMPARE(rowsMovedSpy.count(), 0); QCOMPARE(rowsInsertedSpy.count(), 3); - QCOMPARE(trackHasBeenAddedSpy.count(), 3); QCOMPARE(persistentStateChangedSpy.count(), 3); QCOMPARE(dataChangedSpy.count(), 2); QCOMPARE(newTrackByIdInListSpy.count(), 3); @@ -1779,7 +1708,6 @@ QCOMPARE(rowsRemovedSpy.count(), 0); QCOMPARE(rowsMovedSpy.count(), 0); QCOMPARE(rowsInsertedSpy.count(), 3); - QCOMPARE(trackHasBeenAddedSpy.count(), 3); QCOMPARE(persistentStateChangedSpy.count(), 3); QCOMPARE(dataChangedSpy.count(), 3); QCOMPARE(newTrackByIdInListSpy.count(), 3); @@ -1800,7 +1728,6 @@ QCOMPARE(rowsRemovedSpy.count(), 0); QCOMPARE(rowsMovedSpy.count(), 0); QCOMPARE(rowsInsertedSpy.count(), 4); - QCOMPARE(trackHasBeenAddedSpy.count(), 4); QCOMPARE(persistentStateChangedSpy.count(), 4); QCOMPARE(dataChangedSpy.count(), 3); QCOMPARE(newTrackByIdInListSpy.count(), 4); @@ -1816,7 +1743,6 @@ QCOMPARE(rowsRemovedSpy.count(), 0); QCOMPARE(rowsMovedSpy.count(), 0); QCOMPARE(rowsInsertedSpy.count(), 4); - QCOMPARE(trackHasBeenAddedSpy.count(), 4); QCOMPARE(persistentStateChangedSpy.count(), 4); QCOMPARE(dataChangedSpy.count(), 4); QCOMPARE(newTrackByIdInListSpy.count(), 4); @@ -1837,7 +1763,6 @@ QCOMPARE(rowsRemovedSpy.count(), 0); QCOMPARE(rowsMovedSpy.count(), 1); QCOMPARE(rowsInsertedSpy.count(), 4); - QCOMPARE(trackHasBeenAddedSpy.count(), 4); QCOMPARE(persistentStateChangedSpy.count(), 5); QCOMPARE(dataChangedSpy.count(), 6); QCOMPARE(newTrackByIdInListSpy.count(), 4); @@ -1876,7 +1801,6 @@ QSignalSpy rowsMovedSpy(&myPlayList, &MediaPlayList::rowsMoved); QSignalSpy rowsRemovedSpy(&myPlayList, &MediaPlayList::rowsRemoved); QSignalSpy rowsInsertedSpy(&myPlayList, &MediaPlayList::rowsInserted); - QSignalSpy trackHasBeenAddedSpy(&myPlayList, &MediaPlayList::trackHasBeenAdded); QSignalSpy persistentStateChangedSpy(&myPlayList, &MediaPlayList::persistentStateChanged); QSignalSpy dataChangedSpy(&myPlayList, &MediaPlayList::dataChanged); QSignalSpy newTrackByIdInListSpy(&myPlayList, &MediaPlayList::newTrackByIdInList); @@ -1890,7 +1814,6 @@ QCOMPARE(rowsRemovedSpy.count(), 0); QCOMPARE(rowsMovedSpy.count(), 0); QCOMPARE(rowsInsertedSpy.count(), 0); - QCOMPARE(trackHasBeenAddedSpy.count(), 0); QCOMPARE(persistentStateChangedSpy.count(), 0); QCOMPARE(dataChangedSpy.count(), 0); QCOMPARE(newTrackByIdInListSpy.count(), 0); @@ -1929,7 +1852,6 @@ QCOMPARE(rowsRemovedSpy.count(), 0); QCOMPARE(rowsMovedSpy.count(), 0); QCOMPARE(rowsInsertedSpy.count(), 0); - QCOMPARE(trackHasBeenAddedSpy.count(), 0); QCOMPARE(persistentStateChangedSpy.count(), 0); QCOMPARE(dataChangedSpy.count(), 0); QCOMPARE(newTrackByIdInListSpy.count(), 0); @@ -1946,7 +1868,6 @@ QCOMPARE(rowsRemovedSpy.count(), 0); QCOMPARE(rowsMovedSpy.count(), 0); QCOMPARE(rowsInsertedSpy.count(), 1); - QCOMPARE(trackHasBeenAddedSpy.count(), 1); QCOMPARE(persistentStateChangedSpy.count(), 1); QCOMPARE(dataChangedSpy.count(), 0); QCOMPARE(newTrackByIdInListSpy.count(), 1); @@ -1962,7 +1883,6 @@ QCOMPARE(rowsRemovedSpy.count(), 0); QCOMPARE(rowsMovedSpy.count(), 0); QCOMPARE(rowsInsertedSpy.count(), 1); - QCOMPARE(trackHasBeenAddedSpy.count(), 1); QCOMPARE(persistentStateChangedSpy.count(), 1); QCOMPARE(dataChangedSpy.count(), 1); QCOMPARE(newTrackByIdInListSpy.count(), 1); @@ -1981,7 +1901,6 @@ QCOMPARE(rowsRemovedSpy.count(), 0); QCOMPARE(rowsMovedSpy.count(), 0); QCOMPARE(rowsInsertedSpy.count(), 2); - QCOMPARE(trackHasBeenAddedSpy.count(), 2); QCOMPARE(persistentStateChangedSpy.count(), 2); QCOMPARE(dataChangedSpy.count(), 1); QCOMPARE(newTrackByIdInListSpy.count(), 2); @@ -1997,7 +1916,6 @@ QCOMPARE(rowsRemovedSpy.count(), 0); QCOMPARE(rowsMovedSpy.count(), 0); QCOMPARE(rowsInsertedSpy.count(), 2); - QCOMPARE(trackHasBeenAddedSpy.count(), 2); QCOMPARE(persistentStateChangedSpy.count(), 2); QCOMPARE(dataChangedSpy.count(), 2); QCOMPARE(newTrackByIdInListSpy.count(), 2); @@ -2017,7 +1935,6 @@ QCOMPARE(rowsRemovedSpy.count(), 0); QCOMPARE(rowsMovedSpy.count(), 0); QCOMPARE(rowsInsertedSpy.count(), 3); - QCOMPARE(trackHasBeenAddedSpy.count(), 3); QCOMPARE(persistentStateChangedSpy.count(), 3); QCOMPARE(dataChangedSpy.count(), 2); QCOMPARE(newTrackByIdInListSpy.count(), 3); @@ -2033,7 +1950,6 @@ QCOMPARE(rowsRemovedSpy.count(), 0); QCOMPARE(rowsMovedSpy.count(), 0); QCOMPARE(rowsInsertedSpy.count(), 3); - QCOMPARE(trackHasBeenAddedSpy.count(), 3); QCOMPARE(persistentStateChangedSpy.count(), 3); QCOMPARE(dataChangedSpy.count(), 3); QCOMPARE(newTrackByIdInListSpy.count(), 3); @@ -2054,7 +1970,6 @@ QCOMPARE(rowsRemovedSpy.count(), 0); QCOMPARE(rowsMovedSpy.count(), 0); QCOMPARE(rowsInsertedSpy.count(), 4); - QCOMPARE(trackHasBeenAddedSpy.count(), 4); QCOMPARE(persistentStateChangedSpy.count(), 4); QCOMPARE(dataChangedSpy.count(), 3); QCOMPARE(newTrackByIdInListSpy.count(), 4); @@ -2070,7 +1985,6 @@ QCOMPARE(rowsRemovedSpy.count(), 0); QCOMPARE(rowsMovedSpy.count(), 0); QCOMPARE(rowsInsertedSpy.count(), 4); - QCOMPARE(trackHasBeenAddedSpy.count(), 4); QCOMPARE(persistentStateChangedSpy.count(), 4); QCOMPARE(dataChangedSpy.count(), 4); QCOMPARE(newTrackByIdInListSpy.count(), 4); @@ -2091,7 +2005,6 @@ QCOMPARE(rowsRemovedSpy.count(), 0); QCOMPARE(rowsMovedSpy.count(), 1); QCOMPARE(rowsInsertedSpy.count(), 4); - QCOMPARE(trackHasBeenAddedSpy.count(), 4); QCOMPARE(persistentStateChangedSpy.count(), 5); QCOMPARE(dataChangedSpy.count(), 6); QCOMPARE(newTrackByIdInListSpy.count(), 4); @@ -2130,7 +2043,6 @@ QSignalSpy rowsMovedSpy(&myPlayList, &MediaPlayList::rowsMoved); QSignalSpy rowsRemovedSpy(&myPlayList, &MediaPlayList::rowsRemoved); QSignalSpy rowsInsertedSpy(&myPlayList, &MediaPlayList::rowsInserted); - QSignalSpy trackHasBeenAddedSpy(&myPlayList, &MediaPlayList::trackHasBeenAdded); QSignalSpy persistentStateChangedSpy(&myPlayList, &MediaPlayList::persistentStateChanged); QSignalSpy dataChangedSpy(&myPlayList, &MediaPlayList::dataChanged); QSignalSpy newTrackByIdInListSpy(&myPlayList, &MediaPlayList::newTrackByIdInList); @@ -2144,7 +2056,6 @@ QCOMPARE(rowsRemovedSpy.count(), 0); QCOMPARE(rowsMovedSpy.count(), 0); QCOMPARE(rowsInsertedSpy.count(), 0); - QCOMPARE(trackHasBeenAddedSpy.count(), 0); QCOMPARE(persistentStateChangedSpy.count(), 0); QCOMPARE(dataChangedSpy.count(), 0); QCOMPARE(newTrackByIdInListSpy.count(), 0); @@ -2183,7 +2094,6 @@ QCOMPARE(rowsRemovedSpy.count(), 0); QCOMPARE(rowsMovedSpy.count(), 0); QCOMPARE(rowsInsertedSpy.count(), 0); - QCOMPARE(trackHasBeenAddedSpy.count(), 0); QCOMPARE(persistentStateChangedSpy.count(), 0); QCOMPARE(dataChangedSpy.count(), 0); QCOMPARE(newTrackByIdInListSpy.count(), 0); @@ -2200,7 +2110,6 @@ QCOMPARE(rowsRemovedSpy.count(), 0); QCOMPARE(rowsMovedSpy.count(), 0); QCOMPARE(rowsInsertedSpy.count(), 1); - QCOMPARE(trackHasBeenAddedSpy.count(), 1); QCOMPARE(persistentStateChangedSpy.count(), 1); QCOMPARE(dataChangedSpy.count(), 0); QCOMPARE(newTrackByIdInListSpy.count(), 1); @@ -2216,7 +2125,6 @@ QCOMPARE(rowsRemovedSpy.count(), 0); QCOMPARE(rowsMovedSpy.count(), 0); QCOMPARE(rowsInsertedSpy.count(), 1); - QCOMPARE(trackHasBeenAddedSpy.count(), 1); QCOMPARE(persistentStateChangedSpy.count(), 1); QCOMPARE(dataChangedSpy.count(), 1); QCOMPARE(newTrackByIdInListSpy.count(), 1); @@ -2235,7 +2143,6 @@ QCOMPARE(rowsRemovedSpy.count(), 0); QCOMPARE(rowsMovedSpy.count(), 0); QCOMPARE(rowsInsertedSpy.count(), 2); - QCOMPARE(trackHasBeenAddedSpy.count(), 2); QCOMPARE(persistentStateChangedSpy.count(), 2); QCOMPARE(dataChangedSpy.count(), 1); QCOMPARE(newTrackByIdInListSpy.count(), 2); @@ -2251,7 +2158,6 @@ QCOMPARE(rowsRemovedSpy.count(), 0); QCOMPARE(rowsMovedSpy.count(), 0); QCOMPARE(rowsInsertedSpy.count(), 2); - QCOMPARE(trackHasBeenAddedSpy.count(), 2); QCOMPARE(persistentStateChangedSpy.count(), 2); QCOMPARE(dataChangedSpy.count(), 2); QCOMPARE(newTrackByIdInListSpy.count(), 2); @@ -2271,7 +2177,6 @@ QCOMPARE(rowsRemovedSpy.count(), 0); QCOMPARE(rowsMovedSpy.count(), 0); QCOMPARE(rowsInsertedSpy.count(), 3); - QCOMPARE(trackHasBeenAddedSpy.count(), 3); QCOMPARE(persistentStateChangedSpy.count(), 3); QCOMPARE(dataChangedSpy.count(), 2); QCOMPARE(newTrackByIdInListSpy.count(), 3); @@ -2287,7 +2192,6 @@ QCOMPARE(rowsRemovedSpy.count(), 0); QCOMPARE(rowsMovedSpy.count(), 0); QCOMPARE(rowsInsertedSpy.count(), 3); - QCOMPARE(trackHasBeenAddedSpy.count(), 3); QCOMPARE(persistentStateChangedSpy.count(), 3); QCOMPARE(dataChangedSpy.count(), 3); QCOMPARE(newTrackByIdInListSpy.count(), 3); @@ -2308,7 +2212,6 @@ QCOMPARE(rowsRemovedSpy.count(), 0); QCOMPARE(rowsMovedSpy.count(), 0); QCOMPARE(rowsInsertedSpy.count(), 4); - QCOMPARE(trackHasBeenAddedSpy.count(), 4); QCOMPARE(persistentStateChangedSpy.count(), 4); QCOMPARE(dataChangedSpy.count(), 3); QCOMPARE(newTrackByIdInListSpy.count(), 4); @@ -2324,7 +2227,6 @@ QCOMPARE(rowsRemovedSpy.count(), 0); QCOMPARE(rowsMovedSpy.count(), 0); QCOMPARE(rowsInsertedSpy.count(), 4); - QCOMPARE(trackHasBeenAddedSpy.count(), 4); QCOMPARE(persistentStateChangedSpy.count(), 4); QCOMPARE(dataChangedSpy.count(), 4); QCOMPARE(newTrackByIdInListSpy.count(), 4); @@ -2345,7 +2247,6 @@ QCOMPARE(rowsRemovedSpy.count(), 0); QCOMPARE(rowsMovedSpy.count(), 1); QCOMPARE(rowsInsertedSpy.count(), 4); - QCOMPARE(trackHasBeenAddedSpy.count(), 4); QCOMPARE(persistentStateChangedSpy.count(), 5); QCOMPARE(dataChangedSpy.count(), 6); QCOMPARE(newTrackByIdInListSpy.count(), 4); @@ -2384,7 +2285,6 @@ QSignalSpy rowsMovedSpy(&myPlayList, &MediaPlayList::rowsMoved); QSignalSpy rowsRemovedSpy(&myPlayList, &MediaPlayList::rowsRemoved); QSignalSpy rowsInsertedSpy(&myPlayList, &MediaPlayList::rowsInserted); - QSignalSpy trackHasBeenAddedSpy(&myPlayList, &MediaPlayList::trackHasBeenAdded); QSignalSpy persistentStateChangedSpy(&myPlayList, &MediaPlayList::persistentStateChanged); QSignalSpy dataChangedSpy(&myPlayList, &MediaPlayList::dataChanged); QSignalSpy newTrackByIdInListSpy(&myPlayList, &MediaPlayList::newTrackByIdInList); @@ -2398,7 +2298,6 @@ QCOMPARE(rowsRemovedSpy.count(), 0); QCOMPARE(rowsMovedSpy.count(), 0); QCOMPARE(rowsInsertedSpy.count(), 0); - QCOMPARE(trackHasBeenAddedSpy.count(), 0); QCOMPARE(persistentStateChangedSpy.count(), 0); QCOMPARE(dataChangedSpy.count(), 0); QCOMPARE(newTrackByIdInListSpy.count(), 0); @@ -2437,7 +2336,6 @@ QCOMPARE(rowsRemovedSpy.count(), 0); QCOMPARE(rowsMovedSpy.count(), 0); QCOMPARE(rowsInsertedSpy.count(), 0); - QCOMPARE(trackHasBeenAddedSpy.count(), 0); QCOMPARE(persistentStateChangedSpy.count(), 0); QCOMPARE(dataChangedSpy.count(), 0); QCOMPARE(newTrackByIdInListSpy.count(), 0); @@ -2454,7 +2352,6 @@ QCOMPARE(rowsRemovedSpy.count(), 0); QCOMPARE(rowsMovedSpy.count(), 0); QCOMPARE(rowsInsertedSpy.count(), 1); - QCOMPARE(trackHasBeenAddedSpy.count(), 1); QCOMPARE(persistentStateChangedSpy.count(), 1); QCOMPARE(dataChangedSpy.count(), 0); QCOMPARE(newTrackByIdInListSpy.count(), 1); @@ -2470,7 +2367,6 @@ QCOMPARE(rowsRemovedSpy.count(), 0); QCOMPARE(rowsMovedSpy.count(), 0); QCOMPARE(rowsInsertedSpy.count(), 1); - QCOMPARE(trackHasBeenAddedSpy.count(), 1); QCOMPARE(persistentStateChangedSpy.count(), 1); QCOMPARE(dataChangedSpy.count(), 1); QCOMPARE(newTrackByIdInListSpy.count(), 1); @@ -2489,7 +2385,6 @@ QCOMPARE(rowsRemovedSpy.count(), 0); QCOMPARE(rowsMovedSpy.count(), 0); QCOMPARE(rowsInsertedSpy.count(), 2); - QCOMPARE(trackHasBeenAddedSpy.count(), 2); QCOMPARE(persistentStateChangedSpy.count(), 2); QCOMPARE(dataChangedSpy.count(), 1); QCOMPARE(newTrackByIdInListSpy.count(), 2); @@ -2505,7 +2400,6 @@ QCOMPARE(rowsRemovedSpy.count(), 0); QCOMPARE(rowsMovedSpy.count(), 0); QCOMPARE(rowsInsertedSpy.count(), 2); - QCOMPARE(trackHasBeenAddedSpy.count(), 2); QCOMPARE(persistentStateChangedSpy.count(), 2); QCOMPARE(dataChangedSpy.count(), 2); QCOMPARE(newTrackByIdInListSpy.count(), 2); @@ -2525,7 +2419,6 @@ QCOMPARE(rowsRemovedSpy.count(), 0); QCOMPARE(rowsMovedSpy.count(), 0); QCOMPARE(rowsInsertedSpy.count(), 3); - QCOMPARE(trackHasBeenAddedSpy.count(), 3); QCOMPARE(persistentStateChangedSpy.count(), 3); QCOMPARE(dataChangedSpy.count(), 2); QCOMPARE(newTrackByIdInListSpy.count(), 3); @@ -2541,7 +2434,6 @@ QCOMPARE(rowsRemovedSpy.count(), 0); QCOMPARE(rowsMovedSpy.count(), 0); QCOMPARE(rowsInsertedSpy.count(), 3); - QCOMPARE(trackHasBeenAddedSpy.count(), 3); QCOMPARE(persistentStateChangedSpy.count(), 3); QCOMPARE(dataChangedSpy.count(), 3); QCOMPARE(newTrackByIdInListSpy.count(), 3); @@ -2562,7 +2454,6 @@ QCOMPARE(rowsRemovedSpy.count(), 0); QCOMPARE(rowsMovedSpy.count(), 0); QCOMPARE(rowsInsertedSpy.count(), 4); - QCOMPARE(trackHasBeenAddedSpy.count(), 4); QCOMPARE(persistentStateChangedSpy.count(), 4); QCOMPARE(dataChangedSpy.count(), 3); QCOMPARE(newTrackByIdInListSpy.count(), 4); @@ -2578,7 +2469,6 @@ QCOMPARE(rowsRemovedSpy.count(), 0); QCOMPARE(rowsMovedSpy.count(), 0); QCOMPARE(rowsInsertedSpy.count(), 4); - QCOMPARE(trackHasBeenAddedSpy.count(), 4); QCOMPARE(persistentStateChangedSpy.count(), 4); QCOMPARE(dataChangedSpy.count(), 4); QCOMPARE(newTrackByIdInListSpy.count(), 4); @@ -2599,7 +2489,6 @@ QCOMPARE(rowsRemovedSpy.count(), 0); QCOMPARE(rowsMovedSpy.count(), 1); QCOMPARE(rowsInsertedSpy.count(), 4); - QCOMPARE(trackHasBeenAddedSpy.count(), 4); QCOMPARE(persistentStateChangedSpy.count(), 5); QCOMPARE(dataChangedSpy.count(), 6); QCOMPARE(newTrackByIdInListSpy.count(), 4); @@ -2632,7 +2521,6 @@ QCOMPARE(rowsRemovedSpy.count(), 0); QCOMPARE(rowsMovedSpy.count(), 2); QCOMPARE(rowsInsertedSpy.count(), 4); - QCOMPARE(trackHasBeenAddedSpy.count(), 4); QCOMPARE(persistentStateChangedSpy.count(), 6); QCOMPARE(dataChangedSpy.count(), 8); QCOMPARE(newTrackByIdInListSpy.count(), 4); @@ -2671,7 +2559,6 @@ QSignalSpy rowsMovedSpy(&myPlayList, &MediaPlayList::rowsMoved); QSignalSpy rowsRemovedSpy(&myPlayList, &MediaPlayList::rowsRemoved); QSignalSpy rowsInsertedSpy(&myPlayList, &MediaPlayList::rowsInserted); - QSignalSpy trackHasBeenAddedSpy(&myPlayList, &MediaPlayList::trackHasBeenAdded); QSignalSpy persistentStateChangedSpy(&myPlayList, &MediaPlayList::persistentStateChanged); QSignalSpy dataChangedSpy(&myPlayList, &MediaPlayList::dataChanged); QSignalSpy newTrackByIdInListSpy(&myPlayList, &MediaPlayList::newTrackByIdInList); @@ -2685,7 +2572,6 @@ QCOMPARE(rowsRemovedSpy.count(), 0); QCOMPARE(rowsMovedSpy.count(), 0); QCOMPARE(rowsInsertedSpy.count(), 0); - QCOMPARE(trackHasBeenAddedSpy.count(), 0); QCOMPARE(persistentStateChangedSpy.count(), 0); QCOMPARE(dataChangedSpy.count(), 0); QCOMPARE(newTrackByIdInListSpy.count(), 0); @@ -2724,7 +2610,6 @@ QCOMPARE(rowsRemovedSpy.count(), 0); QCOMPARE(rowsMovedSpy.count(), 0); QCOMPARE(rowsInsertedSpy.count(), 0); - QCOMPARE(trackHasBeenAddedSpy.count(), 0); QCOMPARE(persistentStateChangedSpy.count(), 0); QCOMPARE(dataChangedSpy.count(), 0); QCOMPARE(newTrackByIdInListSpy.count(), 0); @@ -2742,7 +2627,6 @@ QCOMPARE(rowsRemovedSpy.count(), 0); QCOMPARE(rowsMovedSpy.count(), 0); QCOMPARE(rowsInsertedSpy.count(), 1); - QCOMPARE(trackHasBeenAddedSpy.count(), 1); QCOMPARE(persistentStateChangedSpy.count(), 1); QCOMPARE(dataChangedSpy.count(), 0); QCOMPARE(newTrackByIdInListSpy.count(), 1); @@ -2758,7 +2642,6 @@ QCOMPARE(rowsRemovedSpy.count(), 0); QCOMPARE(rowsMovedSpy.count(), 0); QCOMPARE(rowsInsertedSpy.count(), 1); - QCOMPARE(trackHasBeenAddedSpy.count(), 1); QCOMPARE(persistentStateChangedSpy.count(), 1); QCOMPARE(dataChangedSpy.count(), 1); QCOMPARE(newTrackByIdInListSpy.count(), 1); @@ -2782,7 +2665,6 @@ QCOMPARE(rowsRemovedSpy.count(), 0); QCOMPARE(rowsMovedSpy.count(), 0); QCOMPARE(rowsInsertedSpy.count(), 2); - QCOMPARE(trackHasBeenAddedSpy.count(), 2); QCOMPARE(persistentStateChangedSpy.count(), 2); QCOMPARE(dataChangedSpy.count(), 1); QCOMPARE(newTrackByIdInListSpy.count(), 2); @@ -2798,7 +2680,6 @@ QCOMPARE(rowsRemovedSpy.count(), 0); QCOMPARE(rowsMovedSpy.count(), 0); QCOMPARE(rowsInsertedSpy.count(), 2); - QCOMPARE(trackHasBeenAddedSpy.count(), 2); QCOMPARE(persistentStateChangedSpy.count(), 2); QCOMPARE(dataChangedSpy.count(), 2); QCOMPARE(newTrackByIdInListSpy.count(), 2); @@ -2820,7 +2701,6 @@ QCOMPARE(rowsRemovedSpy.count(), 1); QCOMPARE(rowsMovedSpy.count(), 0); QCOMPARE(rowsInsertedSpy.count(), 6); - QCOMPARE(trackHasBeenAddedSpy.count(), 6); QCOMPARE(persistentStateChangedSpy.count(), 6); QCOMPARE(dataChangedSpy.count(), 2); QCOMPARE(newTrackByIdInListSpy.count(), 6); @@ -2870,7 +2750,6 @@ QSignalSpy rowsMovedSpy(&myPlayList, &MediaPlayList::rowsMoved); QSignalSpy rowsRemovedSpy(&myPlayList, &MediaPlayList::rowsRemoved); QSignalSpy rowsInsertedSpy(&myPlayList, &MediaPlayList::rowsInserted); - QSignalSpy trackHasBeenAddedSpy(&myPlayList, &MediaPlayList::trackHasBeenAdded); QSignalSpy persistentStateChangedSpy(&myPlayList, &MediaPlayList::persistentStateChanged); QSignalSpy dataChangedSpy(&myPlayList, &MediaPlayList::dataChanged); QSignalSpy newTrackByIdInListSpy(&myPlayList, &MediaPlayList::newTrackByIdInList); @@ -2884,7 +2763,6 @@ QCOMPARE(rowsRemovedSpy.count(), 0); QCOMPARE(rowsMovedSpy.count(), 0); QCOMPARE(rowsInsertedSpy.count(), 0); - QCOMPARE(trackHasBeenAddedSpy.count(), 0); QCOMPARE(persistentStateChangedSpy.count(), 0); QCOMPARE(dataChangedSpy.count(), 0); QCOMPARE(newTrackByIdInListSpy.count(), 0); @@ -2923,7 +2801,6 @@ QCOMPARE(rowsRemovedSpy.count(), 0); QCOMPARE(rowsMovedSpy.count(), 0); QCOMPARE(rowsInsertedSpy.count(), 0); - QCOMPARE(trackHasBeenAddedSpy.count(), 0); QCOMPARE(persistentStateChangedSpy.count(), 0); QCOMPARE(dataChangedSpy.count(), 0); QCOMPARE(newTrackByIdInListSpy.count(), 0); @@ -2941,7 +2818,6 @@ QCOMPARE(rowsRemovedSpy.count(), 0); QCOMPARE(rowsMovedSpy.count(), 0); QCOMPARE(rowsInsertedSpy.count(), 1); - QCOMPARE(trackHasBeenAddedSpy.count(), 1); QCOMPARE(persistentStateChangedSpy.count(), 1); QCOMPARE(dataChangedSpy.count(), 0); QCOMPARE(newTrackByIdInListSpy.count(), 1); @@ -2957,7 +2833,6 @@ QCOMPARE(rowsRemovedSpy.count(), 0); QCOMPARE(rowsMovedSpy.count(), 0); QCOMPARE(rowsInsertedSpy.count(), 1); - QCOMPARE(trackHasBeenAddedSpy.count(), 1); QCOMPARE(persistentStateChangedSpy.count(), 1); QCOMPARE(dataChangedSpy.count(), 1); QCOMPARE(newTrackByIdInListSpy.count(), 1); @@ -2979,7 +2854,6 @@ QSignalSpy rowsMovedSpy(&myPlayList, &MediaPlayList::rowsMoved); QSignalSpy rowsRemovedSpy(&myPlayList, &MediaPlayList::rowsRemoved); QSignalSpy rowsInsertedSpy(&myPlayList, &MediaPlayList::rowsInserted); - QSignalSpy trackHasBeenAddedSpy(&myPlayList, &MediaPlayList::trackHasBeenAdded); QSignalSpy persistentStateChangedSpy(&myPlayList, &MediaPlayList::persistentStateChanged); QSignalSpy dataChangedSpy(&myPlayList, &MediaPlayList::dataChanged); QSignalSpy newTrackByIdInListSpy(&myPlayList, &MediaPlayList::newTrackByIdInList); @@ -2993,7 +2867,6 @@ QCOMPARE(rowsRemovedSpy.count(), 0); QCOMPARE(rowsMovedSpy.count(), 0); QCOMPARE(rowsInsertedSpy.count(), 0); - QCOMPARE(trackHasBeenAddedSpy.count(), 0); QCOMPARE(persistentStateChangedSpy.count(), 0); QCOMPARE(dataChangedSpy.count(), 0); QCOMPARE(newTrackByIdInListSpy.count(), 0); @@ -3032,7 +2905,6 @@ QCOMPARE(rowsRemovedSpy.count(), 0); QCOMPARE(rowsMovedSpy.count(), 0); QCOMPARE(rowsInsertedSpy.count(), 1); - QCOMPARE(trackHasBeenAddedSpy.count(), 1); QCOMPARE(persistentStateChangedSpy.count(), 1); QCOMPARE(dataChangedSpy.count(), 1); QCOMPARE(newTrackByIdInListSpy.count(), 0); @@ -3050,7 +2922,6 @@ QCOMPARE(rowsRemovedSpy.count(), 0); QCOMPARE(rowsMovedSpy.count(), 0); QCOMPARE(rowsInsertedSpy.count(), 2); - QCOMPARE(trackHasBeenAddedSpy.count(), 2); QCOMPARE(persistentStateChangedSpy.count(), 2); QCOMPARE(dataChangedSpy.count(), 2); QCOMPARE(newTrackByIdInListSpy.count(), 0); @@ -3069,7 +2940,6 @@ QCOMPARE(rowsRemovedSpy.count(), 0); QCOMPARE(rowsMovedSpy.count(), 0); QCOMPARE(rowsInsertedSpy.count(), 3); - QCOMPARE(trackHasBeenAddedSpy.count(), 3); QCOMPARE(persistentStateChangedSpy.count(), 3); QCOMPARE(dataChangedSpy.count(), 3); QCOMPARE(newTrackByIdInListSpy.count(), 0); @@ -3089,7 +2959,6 @@ QCOMPARE(rowsRemovedSpy.count(), 0); QCOMPARE(rowsMovedSpy.count(), 0); QCOMPARE(rowsInsertedSpy.count(), 4); - QCOMPARE(trackHasBeenAddedSpy.count(), 4); QCOMPARE(persistentStateChangedSpy.count(), 4); QCOMPARE(dataChangedSpy.count(), 4); QCOMPARE(newTrackByIdInListSpy.count(), 0); @@ -3110,7 +2979,6 @@ QCOMPARE(rowsRemovedSpy.count(), 0); QCOMPARE(rowsMovedSpy.count(), 0); QCOMPARE(rowsInsertedSpy.count(), 4); - QCOMPARE(trackHasBeenAddedSpy.count(), 4); QCOMPARE(persistentStateChangedSpy.count(), 4); QCOMPARE(dataChangedSpy.count(), 4); QCOMPARE(newTrackByIdInListSpy.count(), 0); @@ -3126,7 +2994,6 @@ QCOMPARE(rowsRemovedSpy.count(), 0); QCOMPARE(rowsMovedSpy.count(), 0); QCOMPARE(rowsInsertedSpy.count(), 4); - QCOMPARE(trackHasBeenAddedSpy.count(), 4); QCOMPARE(persistentStateChangedSpy.count(), 4); QCOMPARE(dataChangedSpy.count(), 8); QCOMPARE(newTrackByIdInListSpy.count(), 0); @@ -3178,7 +3045,6 @@ QSignalSpy rowsMovedSpy(&myPlayList, &MediaPlayList::rowsMoved); QSignalSpy rowsRemovedSpy(&myPlayList, &MediaPlayList::rowsRemoved); QSignalSpy rowsInsertedSpy(&myPlayList, &MediaPlayList::rowsInserted); - QSignalSpy trackHasBeenAddedSpy(&myPlayList, &MediaPlayList::trackHasBeenAdded); QSignalSpy persistentStateChangedSpy(&myPlayList, &MediaPlayList::persistentStateChanged); QSignalSpy dataChangedSpy(&myPlayList, &MediaPlayList::dataChanged); QSignalSpy newTrackByIdInListSpy(&myPlayList, &MediaPlayList::newTrackByIdInList); @@ -3192,7 +3058,6 @@ QCOMPARE(rowsRemovedSpy.count(), 0); QCOMPARE(rowsMovedSpy.count(), 0); QCOMPARE(rowsInsertedSpy.count(), 0); - QCOMPARE(trackHasBeenAddedSpy.count(), 0); QCOMPARE(persistentStateChangedSpy.count(), 0); QCOMPARE(dataChangedSpy.count(), 0); QCOMPARE(newTrackByIdInListSpy.count(), 0); @@ -3231,7 +3096,6 @@ QCOMPARE(rowsRemovedSpy.count(), 0); QCOMPARE(rowsMovedSpy.count(), 0); QCOMPARE(rowsInsertedSpy.count(), 0); - QCOMPARE(trackHasBeenAddedSpy.count(), 0); QCOMPARE(persistentStateChangedSpy.count(), 0); QCOMPARE(dataChangedSpy.count(), 0); QCOMPARE(newTrackByIdInListSpy.count(), 0); @@ -3249,7 +3113,6 @@ QCOMPARE(rowsRemovedSpy.count(), 0); QCOMPARE(rowsMovedSpy.count(), 0); QCOMPARE(rowsInsertedSpy.count(), 1); - QCOMPARE(trackHasBeenAddedSpy.count(), 1); QCOMPARE(persistentStateChangedSpy.count(), 1); QCOMPARE(dataChangedSpy.count(), 0); QCOMPARE(newTrackByIdInListSpy.count(), 1); @@ -3265,7 +3128,6 @@ QCOMPARE(rowsRemovedSpy.count(), 0); QCOMPARE(rowsMovedSpy.count(), 0); QCOMPARE(rowsInsertedSpy.count(), 1); - QCOMPARE(trackHasBeenAddedSpy.count(), 1); QCOMPARE(persistentStateChangedSpy.count(), 1); QCOMPARE(dataChangedSpy.count(), 1); QCOMPARE(newTrackByIdInListSpy.count(), 1); @@ -3285,7 +3147,6 @@ QCOMPARE(rowsRemovedSpy.count(), 0); QCOMPARE(rowsMovedSpy.count(), 0); QCOMPARE(rowsInsertedSpy.count(), 2); - QCOMPARE(trackHasBeenAddedSpy.count(), 2); QCOMPARE(persistentStateChangedSpy.count(), 2); QCOMPARE(dataChangedSpy.count(), 1); QCOMPARE(newTrackByIdInListSpy.count(), 2); @@ -3301,7 +3162,6 @@ QCOMPARE(rowsRemovedSpy.count(), 0); QCOMPARE(rowsMovedSpy.count(), 0); QCOMPARE(rowsInsertedSpy.count(), 2); - QCOMPARE(trackHasBeenAddedSpy.count(), 2); QCOMPARE(persistentStateChangedSpy.count(), 2); QCOMPARE(dataChangedSpy.count(), 2); QCOMPARE(newTrackByIdInListSpy.count(), 2); @@ -3322,7 +3182,6 @@ QCOMPARE(rowsRemovedSpy.count(), 0); QCOMPARE(rowsMovedSpy.count(), 0); QCOMPARE(rowsInsertedSpy.count(), 3); - QCOMPARE(trackHasBeenAddedSpy.count(), 3); QCOMPARE(persistentStateChangedSpy.count(), 3); QCOMPARE(dataChangedSpy.count(), 2); QCOMPARE(newTrackByIdInListSpy.count(), 3); @@ -3338,7 +3197,6 @@ QCOMPARE(rowsRemovedSpy.count(), 0); QCOMPARE(rowsMovedSpy.count(), 0); QCOMPARE(rowsInsertedSpy.count(), 3); - QCOMPARE(trackHasBeenAddedSpy.count(), 3); QCOMPARE(persistentStateChangedSpy.count(), 3); QCOMPARE(dataChangedSpy.count(), 3); QCOMPARE(newTrackByIdInListSpy.count(), 3); @@ -3360,7 +3218,6 @@ QCOMPARE(rowsRemovedSpy.count(), 0); QCOMPARE(rowsMovedSpy.count(), 0); QCOMPARE(rowsInsertedSpy.count(), 4); - QCOMPARE(trackHasBeenAddedSpy.count(), 4); QCOMPARE(persistentStateChangedSpy.count(), 4); QCOMPARE(dataChangedSpy.count(), 3); QCOMPARE(newTrackByIdInListSpy.count(), 4); @@ -3376,7 +3233,6 @@ QCOMPARE(rowsRemovedSpy.count(), 0); QCOMPARE(rowsMovedSpy.count(), 0); QCOMPARE(rowsInsertedSpy.count(), 4); - QCOMPARE(trackHasBeenAddedSpy.count(), 4); QCOMPARE(persistentStateChangedSpy.count(), 4); QCOMPARE(dataChangedSpy.count(), 4); QCOMPARE(newTrackByIdInListSpy.count(), 4); @@ -3399,7 +3255,6 @@ QCOMPARE(rowsRemovedSpy.count(), 0); QCOMPARE(rowsMovedSpy.count(), 0); QCOMPARE(rowsInsertedSpy.count(), 5); - QCOMPARE(trackHasBeenAddedSpy.count(), 5); QCOMPARE(persistentStateChangedSpy.count(), 5); QCOMPARE(dataChangedSpy.count(), 4); QCOMPARE(newTrackByIdInListSpy.count(), 5); @@ -3415,7 +3270,6 @@ QCOMPARE(rowsRemovedSpy.count(), 0); QCOMPARE(rowsMovedSpy.count(), 0); QCOMPARE(rowsInsertedSpy.count(), 5); - QCOMPARE(trackHasBeenAddedSpy.count(), 5); QCOMPARE(persistentStateChangedSpy.count(), 5); QCOMPARE(dataChangedSpy.count(), 5); QCOMPARE(newTrackByIdInListSpy.count(), 5); @@ -3439,7 +3293,6 @@ QCOMPARE(rowsRemovedSpy.count(), 0); QCOMPARE(rowsMovedSpy.count(), 0); QCOMPARE(rowsInsertedSpy.count(), 6); - QCOMPARE(trackHasBeenAddedSpy.count(), 6); QCOMPARE(persistentStateChangedSpy.count(), 6); QCOMPARE(dataChangedSpy.count(), 5); QCOMPARE(newTrackByIdInListSpy.count(), 6); @@ -3455,7 +3308,6 @@ QCOMPARE(rowsRemovedSpy.count(), 0); QCOMPARE(rowsMovedSpy.count(), 0); QCOMPARE(rowsInsertedSpy.count(), 6); - QCOMPARE(trackHasBeenAddedSpy.count(), 6); QCOMPARE(persistentStateChangedSpy.count(), 6); QCOMPARE(dataChangedSpy.count(), 6); QCOMPARE(newTrackByIdInListSpy.count(), 6); @@ -3487,7 +3339,6 @@ QSignalSpy rowsMovedSpySave(&myPlayListSave, &MediaPlayList::rowsMoved); QSignalSpy rowsRemovedSpySave(&myPlayListSave, &MediaPlayList::rowsRemoved); QSignalSpy rowsInsertedSpySave(&myPlayListSave, &MediaPlayList::rowsInserted); - QSignalSpy trackHasBeenAddedSpySave(&myPlayListSave, &MediaPlayList::trackHasBeenAdded); QSignalSpy persistentStateChangedSpySave(&myPlayListSave, &MediaPlayList::persistentStateChanged); QSignalSpy dataChangedSpySave(&myPlayListSave, &MediaPlayList::dataChanged); QSignalSpy newTrackByIdInListSpySave(&myPlayListSave, &MediaPlayList::newTrackByIdInList); @@ -3500,7 +3351,6 @@ QSignalSpy rowsMovedSpyRead(&myPlayListRead, &MediaPlayList::rowsMoved); QSignalSpy rowsRemovedSpyRead(&myPlayListRead, &MediaPlayList::rowsRemoved); QSignalSpy rowsInsertedSpyRead(&myPlayListRead, &MediaPlayList::rowsInserted); - QSignalSpy trackHasBeenAddedSpyRead(&myPlayListRead, &MediaPlayList::trackHasBeenAdded); QSignalSpy persistentStateChangedSpyRead(&myPlayListRead, &MediaPlayList::persistentStateChanged); QSignalSpy dataChangedSpyRead(&myPlayListRead, &MediaPlayList::dataChanged); QSignalSpy newTrackByIdInListSpyRead(&myPlayListRead, &MediaPlayList::newTrackByIdInList); @@ -3514,7 +3364,6 @@ QCOMPARE(rowsRemovedSpySave.count(), 0); QCOMPARE(rowsMovedSpySave.count(), 0); QCOMPARE(rowsInsertedSpySave.count(), 0); - QCOMPARE(trackHasBeenAddedSpySave.count(), 0); QCOMPARE(persistentStateChangedSpySave.count(), 0); QCOMPARE(dataChangedSpySave.count(), 0); QCOMPARE(newTrackByIdInListSpySave.count(), 0); @@ -3526,7 +3375,6 @@ QCOMPARE(rowsRemovedSpyRead.count(), 0); QCOMPARE(rowsMovedSpyRead.count(), 0); QCOMPARE(rowsInsertedSpyRead.count(), 0); - QCOMPARE(trackHasBeenAddedSpyRead.count(), 0); QCOMPARE(persistentStateChangedSpyRead.count(), 0); QCOMPARE(dataChangedSpyRead.count(), 0); QCOMPARE(newTrackByIdInListSpyRead.count(), 0); @@ -3547,6 +3395,9 @@ connect(&myPlayListSave, &MediaPlayList::newTrackByNameInList, &myListenerSave, &TracksListener::trackByNameInList, Qt::QueuedConnection); + connect(&myPlayListSave, &MediaPlayList::newTracksByNameInList, + &myListenerSave, &TracksListener::tracksByNameInList, + Qt::QueuedConnection); connect(&myPlayListSave, &MediaPlayList::newTrackByFileNameInList, &myListenerSave, &TracksListener::trackByFileNameInList, Qt::QueuedConnection); @@ -3564,6 +3415,9 @@ connect(&myPlayListRead, &MediaPlayList::newTrackByIdInList, &myListenerRead, &TracksListener::trackByIdInList, Qt::QueuedConnection); + connect(&myPlayListRead, &MediaPlayList::newTracksByNameInList, + &myListenerRead, &TracksListener::tracksByNameInList, + Qt::QueuedConnection); connect(&myPlayListRead, &MediaPlayList::newTrackByNameInList, &myListenerRead, &TracksListener::trackByNameInList, Qt::QueuedConnection); @@ -3584,7 +3438,6 @@ QCOMPARE(rowsRemovedSpySave.count(), 0); QCOMPARE(rowsMovedSpySave.count(), 0); QCOMPARE(rowsInsertedSpySave.count(), 0); - QCOMPARE(trackHasBeenAddedSpySave.count(), 0); QCOMPARE(persistentStateChangedSpySave.count(), 0); QCOMPARE(dataChangedSpySave.count(), 0); QCOMPARE(newTrackByIdInListSpySave.count(), 0); @@ -3596,7 +3449,6 @@ QCOMPARE(rowsRemovedSpyRead.count(), 0); QCOMPARE(rowsMovedSpyRead.count(), 0); QCOMPARE(rowsInsertedSpyRead.count(), 0); - QCOMPARE(trackHasBeenAddedSpyRead.count(), 0); QCOMPARE(persistentStateChangedSpyRead.count(), 0); QCOMPARE(dataChangedSpyRead.count(), 0); QCOMPARE(newTrackByIdInListSpyRead.count(), 0); @@ -3613,7 +3465,6 @@ QCOMPARE(rowsRemovedSpySave.count(), 0); QCOMPARE(rowsMovedSpySave.count(), 0); QCOMPARE(rowsInsertedSpySave.count(), 1); - QCOMPARE(trackHasBeenAddedSpySave.count(), 1); QCOMPARE(persistentStateChangedSpySave.count(), 1); QCOMPARE(dataChangedSpySave.count(), 0); QCOMPARE(newTrackByIdInListSpySave.count(), 1); @@ -3625,7 +3476,6 @@ QCOMPARE(rowsRemovedSpyRead.count(), 0); QCOMPARE(rowsMovedSpyRead.count(), 0); QCOMPARE(rowsInsertedSpyRead.count(), 0); - QCOMPARE(trackHasBeenAddedSpyRead.count(), 0); QCOMPARE(persistentStateChangedSpyRead.count(), 0); QCOMPARE(dataChangedSpyRead.count(), 0); QCOMPARE(newTrackByIdInListSpyRead.count(), 0); @@ -3640,7 +3490,6 @@ QCOMPARE(rowsRemovedSpySave.count(), 0); QCOMPARE(rowsMovedSpySave.count(), 0); QCOMPARE(rowsInsertedSpySave.count(), 1); - QCOMPARE(trackHasBeenAddedSpySave.count(), 1); QCOMPARE(persistentStateChangedSpySave.count(), 1); QCOMPARE(dataChangedSpySave.count(), 1); QCOMPARE(newTrackByIdInListSpySave.count(), 1); @@ -3652,7 +3501,6 @@ QCOMPARE(rowsRemovedSpyRead.count(), 0); QCOMPARE(rowsMovedSpyRead.count(), 0); QCOMPARE(rowsInsertedSpyRead.count(), 0); - QCOMPARE(trackHasBeenAddedSpyRead.count(), 0); QCOMPARE(persistentStateChangedSpyRead.count(), 0); QCOMPARE(dataChangedSpyRead.count(), 0); QCOMPARE(newTrackByIdInListSpyRead.count(), 0); @@ -3671,7 +3519,6 @@ QCOMPARE(rowsRemovedSpySave.count(), 0); QCOMPARE(rowsMovedSpySave.count(), 0); QCOMPARE(rowsInsertedSpySave.count(), 2); - QCOMPARE(trackHasBeenAddedSpySave.count(), 2); QCOMPARE(persistentStateChangedSpySave.count(), 2); QCOMPARE(dataChangedSpySave.count(), 1); QCOMPARE(newTrackByIdInListSpySave.count(), 2); @@ -3683,7 +3530,6 @@ QCOMPARE(rowsRemovedSpyRead.count(), 0); QCOMPARE(rowsMovedSpyRead.count(), 0); QCOMPARE(rowsInsertedSpyRead.count(), 0); - QCOMPARE(trackHasBeenAddedSpyRead.count(), 0); QCOMPARE(persistentStateChangedSpyRead.count(), 0); QCOMPARE(dataChangedSpyRead.count(), 0); QCOMPARE(newTrackByIdInListSpyRead.count(), 0); @@ -3698,7 +3544,6 @@ QCOMPARE(rowsRemovedSpySave.count(), 0); QCOMPARE(rowsMovedSpySave.count(), 0); QCOMPARE(rowsInsertedSpySave.count(), 2); - QCOMPARE(trackHasBeenAddedSpySave.count(), 2); QCOMPARE(persistentStateChangedSpySave.count(), 2); QCOMPARE(dataChangedSpySave.count(), 2); QCOMPARE(newTrackByIdInListSpySave.count(), 2); @@ -3710,7 +3555,6 @@ QCOMPARE(rowsRemovedSpyRead.count(), 0); QCOMPARE(rowsMovedSpyRead.count(), 0); QCOMPARE(rowsInsertedSpyRead.count(), 0); - QCOMPARE(trackHasBeenAddedSpyRead.count(), 0); QCOMPARE(persistentStateChangedSpyRead.count(), 0); QCOMPARE(dataChangedSpyRead.count(), 0); QCOMPARE(newTrackByIdInListSpyRead.count(), 0); @@ -3730,7 +3574,6 @@ QCOMPARE(rowsRemovedSpySave.count(), 0); QCOMPARE(rowsMovedSpySave.count(), 0); QCOMPARE(rowsInsertedSpySave.count(), 3); - QCOMPARE(trackHasBeenAddedSpySave.count(), 3); QCOMPARE(persistentStateChangedSpySave.count(), 3); QCOMPARE(dataChangedSpySave.count(), 2); QCOMPARE(newTrackByIdInListSpySave.count(), 3); @@ -3742,7 +3585,6 @@ QCOMPARE(rowsRemovedSpyRead.count(), 0); QCOMPARE(rowsMovedSpyRead.count(), 0); QCOMPARE(rowsInsertedSpyRead.count(), 0); - QCOMPARE(trackHasBeenAddedSpyRead.count(), 0); QCOMPARE(persistentStateChangedSpyRead.count(), 0); QCOMPARE(dataChangedSpyRead.count(), 0); QCOMPARE(newTrackByIdInListSpyRead.count(), 0); @@ -3757,7 +3599,6 @@ QCOMPARE(rowsRemovedSpySave.count(), 0); QCOMPARE(rowsMovedSpySave.count(), 0); QCOMPARE(rowsInsertedSpySave.count(), 3); - QCOMPARE(trackHasBeenAddedSpySave.count(), 3); QCOMPARE(persistentStateChangedSpySave.count(), 3); QCOMPARE(dataChangedSpySave.count(), 3); QCOMPARE(newTrackByIdInListSpySave.count(), 3); @@ -3769,7 +3610,6 @@ QCOMPARE(rowsRemovedSpyRead.count(), 0); QCOMPARE(rowsMovedSpyRead.count(), 0); QCOMPARE(rowsInsertedSpyRead.count(), 0); - QCOMPARE(trackHasBeenAddedSpyRead.count(), 0); QCOMPARE(persistentStateChangedSpyRead.count(), 0); QCOMPARE(dataChangedSpyRead.count(), 0); QCOMPARE(newTrackByIdInListSpyRead.count(), 0); @@ -3826,23 +3666,21 @@ QCOMPARE(rowsRemovedSpySave.count(), 0); QCOMPARE(rowsMovedSpySave.count(), 0); QCOMPARE(rowsInsertedSpySave.count(), 3); - QCOMPARE(trackHasBeenAddedSpySave.count(), 3); QCOMPARE(persistentStateChangedSpySave.count(), 3); QCOMPARE(dataChangedSpySave.count(), 3); QCOMPARE(newTrackByIdInListSpySave.count(), 3); QCOMPARE(newTrackByNameInListSpySave.count(), 0); QCOMPARE(newArtistInListSpySave.count(), 0); QCOMPARE(rowsAboutToBeRemovedSpyRead.count(), 0); QCOMPARE(rowsAboutToBeMovedSpyRead.count(), 0); - QCOMPARE(rowsAboutToBeInsertedSpyRead.count(), 3); + QCOMPARE(rowsAboutToBeInsertedSpyRead.count(), 1); QCOMPARE(rowsRemovedSpyRead.count(), 0); QCOMPARE(rowsMovedSpyRead.count(), 0); - QCOMPARE(rowsInsertedSpyRead.count(), 3); - QCOMPARE(trackHasBeenAddedSpyRead.count(), 3); - QCOMPARE(persistentStateChangedSpyRead.count(), 4); - QCOMPARE(dataChangedSpyRead.count(), 6); + QCOMPARE(rowsInsertedSpyRead.count(), 1); + QCOMPARE(persistentStateChangedSpyRead.count(), 2); + QCOMPARE(dataChangedSpyRead.count(), 4); QCOMPARE(newTrackByIdInListSpyRead.count(), 0); - QCOMPARE(newTrackByNameInListSpyRead.count(), 3); + QCOMPARE(newTrackByNameInListSpyRead.count(), 0); QCOMPARE(newArtistInListSpyRead.count(), 0); QCOMPARE(myPlayListRead.tracksCount(), 3); @@ -3901,7 +3739,6 @@ QSignalSpy rowsMovedSpy(&myPlayList, &MediaPlayList::rowsMoved); QSignalSpy rowsRemovedSpy(&myPlayList, &MediaPlayList::rowsRemoved); QSignalSpy rowsInsertedSpy(&myPlayList, &MediaPlayList::rowsInserted); - QSignalSpy trackHasBeenAddedSpy(&myPlayList, &MediaPlayList::trackHasBeenAdded); QSignalSpy persistentStateChangedSpy(&myPlayList, &MediaPlayList::persistentStateChanged); QSignalSpy dataChangedSpy(&myPlayList, &MediaPlayList::dataChanged); QSignalSpy newTrackByIdInListSpy(&myPlayList, &MediaPlayList::newTrackByIdInList); @@ -3915,7 +3752,6 @@ QCOMPARE(rowsRemovedSpy.count(), 0); QCOMPARE(rowsMovedSpy.count(), 0); QCOMPARE(rowsInsertedSpy.count(), 0); - QCOMPARE(trackHasBeenAddedSpy.count(), 0); QCOMPARE(persistentStateChangedSpy.count(), 0); QCOMPARE(dataChangedSpy.count(), 0); QCOMPARE(newTrackByIdInListSpy.count(), 0); @@ -3954,7 +3790,6 @@ QCOMPARE(rowsRemovedSpy.count(), 0); QCOMPARE(rowsMovedSpy.count(), 0); QCOMPARE(rowsInsertedSpy.count(), 0); - QCOMPARE(trackHasBeenAddedSpy.count(), 0); QCOMPARE(persistentStateChangedSpy.count(), 0); QCOMPARE(dataChangedSpy.count(), 0); QCOMPARE(newTrackByIdInListSpy.count(), 0); @@ -3970,7 +3805,6 @@ QCOMPARE(rowsRemovedSpy.count(), 0); QCOMPARE(rowsMovedSpy.count(), 0); QCOMPARE(rowsInsertedSpy.count(), 1); - QCOMPARE(trackHasBeenAddedSpy.count(), 0); QCOMPARE(persistentStateChangedSpy.count(), 1); QCOMPARE(dataChangedSpy.count(), 0); QCOMPARE(newTrackByIdInListSpy.count(), 0); @@ -3986,7 +3820,6 @@ QCOMPARE(rowsRemovedSpy.count(), 0); QCOMPARE(rowsMovedSpy.count(), 0); QCOMPARE(rowsInsertedSpy.count(), 1); - QCOMPARE(trackHasBeenAddedSpy.count(), 0); QCOMPARE(persistentStateChangedSpy.count(), 2); QCOMPARE(dataChangedSpy.count(), 1); QCOMPARE(newTrackByIdInListSpy.count(), 0); @@ -4018,7 +3851,6 @@ QCOMPARE(rowsRemovedSpy.count(), 1); QCOMPARE(rowsMovedSpy.count(), 0); QCOMPARE(rowsInsertedSpy.count(), 2); - QCOMPARE(trackHasBeenAddedSpy.count(), 0); QCOMPARE(persistentStateChangedSpy.count(), 3); QCOMPARE(dataChangedSpy.count(), 1); QCOMPARE(newTrackByIdInListSpy.count(), 0); @@ -4034,7 +3866,6 @@ QCOMPARE(rowsRemovedSpy.count(), 1); QCOMPARE(rowsMovedSpy.count(), 0); QCOMPARE(rowsInsertedSpy.count(), 2); - QCOMPARE(trackHasBeenAddedSpy.count(), 0); QCOMPARE(persistentStateChangedSpy.count(), 4); QCOMPARE(dataChangedSpy.count(), 2); QCOMPARE(newTrackByIdInListSpy.count(), 0); @@ -4072,7 +3903,6 @@ QSignalSpy rowsMovedSpy(&myPlayList, &MediaPlayList::rowsMoved); QSignalSpy rowsRemovedSpy(&myPlayList, &MediaPlayList::rowsRemoved); QSignalSpy rowsInsertedSpy(&myPlayList, &MediaPlayList::rowsInserted); - QSignalSpy trackHasBeenAddedSpy(&myPlayList, &MediaPlayList::trackHasBeenAdded); QSignalSpy persistentStateChangedSpy(&myPlayList, &MediaPlayList::persistentStateChanged); QSignalSpy dataChangedSpy(&myPlayList, &MediaPlayList::dataChanged); QSignalSpy newTrackByIdInListSpy(&myPlayList, &MediaPlayList::newTrackByIdInList); @@ -4086,7 +3916,6 @@ QCOMPARE(rowsRemovedSpy.count(), 0); QCOMPARE(rowsMovedSpy.count(), 0); QCOMPARE(rowsInsertedSpy.count(), 0); - QCOMPARE(trackHasBeenAddedSpy.count(), 0); QCOMPARE(persistentStateChangedSpy.count(), 0); QCOMPARE(dataChangedSpy.count(), 0); QCOMPARE(newTrackByIdInListSpy.count(), 0); @@ -4125,7 +3954,6 @@ QCOMPARE(rowsRemovedSpy.count(), 0); QCOMPARE(rowsMovedSpy.count(), 0); QCOMPARE(rowsInsertedSpy.count(), 0); - QCOMPARE(trackHasBeenAddedSpy.count(), 0); QCOMPARE(persistentStateChangedSpy.count(), 0); QCOMPARE(dataChangedSpy.count(), 0); QCOMPARE(newTrackByIdInListSpy.count(), 0); @@ -4146,7 +3974,6 @@ QCOMPARE(rowsRemovedSpy.count(), 0); QCOMPARE(rowsMovedSpy.count(), 0); QCOMPARE(rowsInsertedSpy.count(), 1); - QCOMPARE(trackHasBeenAddedSpy.count(), 1); QCOMPARE(persistentStateChangedSpy.count(), 1); QCOMPARE(dataChangedSpy.count(), 0); QCOMPARE(newTrackByIdInListSpy.count(), 1); @@ -4162,7 +3989,6 @@ QCOMPARE(rowsRemovedSpy.count(), 0); QCOMPARE(rowsMovedSpy.count(), 0); QCOMPARE(rowsInsertedSpy.count(), 1); - QCOMPARE(trackHasBeenAddedSpy.count(), 1); QCOMPARE(persistentStateChangedSpy.count(), 1); QCOMPARE(dataChangedSpy.count(), 1); QCOMPARE(newTrackByIdInListSpy.count(), 1); @@ -4199,7 +4025,6 @@ QCOMPARE(rowsRemovedSpy.count(), 1); QCOMPARE(rowsMovedSpy.count(), 0); QCOMPARE(rowsInsertedSpy.count(), 2); - QCOMPARE(trackHasBeenAddedSpy.count(), 2); QCOMPARE(persistentStateChangedSpy.count(), 2); QCOMPARE(dataChangedSpy.count(), 1); QCOMPARE(newTrackByIdInListSpy.count(), 2); @@ -4215,7 +4040,6 @@ QCOMPARE(rowsRemovedSpy.count(), 1); QCOMPARE(rowsMovedSpy.count(), 0); QCOMPARE(rowsInsertedSpy.count(), 2); - QCOMPARE(trackHasBeenAddedSpy.count(), 2); QCOMPARE(persistentStateChangedSpy.count(), 2); QCOMPARE(dataChangedSpy.count(), 2); QCOMPARE(newTrackByIdInListSpy.count(), 2); @@ -4253,7 +4077,6 @@ QSignalSpy rowsMovedSpy(&myPlayList, &MediaPlayList::rowsMoved); QSignalSpy rowsRemovedSpy(&myPlayList, &MediaPlayList::rowsRemoved); QSignalSpy rowsInsertedSpy(&myPlayList, &MediaPlayList::rowsInserted); - QSignalSpy trackHasBeenAddedSpy(&myPlayList, &MediaPlayList::trackHasBeenAdded); QSignalSpy persistentStateChangedSpy(&myPlayList, &MediaPlayList::persistentStateChanged); QSignalSpy dataChangedSpy(&myPlayList, &MediaPlayList::dataChanged); QSignalSpy newTrackByIdInListSpy(&myPlayList, &MediaPlayList::newTrackByIdInList); @@ -4267,7 +4090,6 @@ QCOMPARE(rowsRemovedSpy.count(), 0); QCOMPARE(rowsMovedSpy.count(), 0); QCOMPARE(rowsInsertedSpy.count(), 0); - QCOMPARE(trackHasBeenAddedSpy.count(), 0); QCOMPARE(persistentStateChangedSpy.count(), 0); QCOMPARE(dataChangedSpy.count(), 0); QCOMPARE(newTrackByIdInListSpy.count(), 0); @@ -4306,7 +4128,6 @@ QCOMPARE(rowsRemovedSpy.count(), 0); QCOMPARE(rowsMovedSpy.count(), 0); QCOMPARE(rowsInsertedSpy.count(), 0); - QCOMPARE(trackHasBeenAddedSpy.count(), 0); QCOMPARE(persistentStateChangedSpy.count(), 0); QCOMPARE(dataChangedSpy.count(), 0); QCOMPARE(newTrackByIdInListSpy.count(), 0); @@ -4331,7 +4152,6 @@ QCOMPARE(rowsRemovedSpy.count(), 0); QCOMPARE(rowsMovedSpy.count(), 0); QCOMPARE(rowsInsertedSpy.count(), 1); - QCOMPARE(trackHasBeenAddedSpy.count(), 1); QCOMPARE(persistentStateChangedSpy.count(), 1); QCOMPARE(dataChangedSpy.count(), 0); QCOMPARE(newTrackByIdInListSpy.count(), 1); @@ -4372,7 +4192,6 @@ QCOMPARE(rowsRemovedSpy.count(), 1); QCOMPARE(rowsMovedSpy.count(), 0); QCOMPARE(rowsInsertedSpy.count(), 2); - QCOMPARE(trackHasBeenAddedSpy.count(), 2); QCOMPARE(persistentStateChangedSpy.count(), 2); QCOMPARE(dataChangedSpy.count(), 0); QCOMPARE(newTrackByIdInListSpy.count(), 2); @@ -4410,7 +4229,6 @@ QSignalSpy rowsMovedSpy(&myPlayList, &MediaPlayList::rowsMoved); QSignalSpy rowsRemovedSpy(&myPlayList, &MediaPlayList::rowsRemoved); QSignalSpy rowsInsertedSpy(&myPlayList, &MediaPlayList::rowsInserted); - QSignalSpy trackHasBeenAddedSpy(&myPlayList, &MediaPlayList::trackHasBeenAdded); QSignalSpy persistentStateChangedSpy(&myPlayList, &MediaPlayList::persistentStateChanged); QSignalSpy dataChangedSpy(&myPlayList, &MediaPlayList::dataChanged); QSignalSpy newTrackByIdInListSpy(&myPlayList, &MediaPlayList::newTrackByIdInList); @@ -4424,7 +4242,6 @@ QCOMPARE(rowsRemovedSpy.count(), 0); QCOMPARE(rowsMovedSpy.count(), 0); QCOMPARE(rowsInsertedSpy.count(), 0); - QCOMPARE(trackHasBeenAddedSpy.count(), 0); QCOMPARE(persistentStateChangedSpy.count(), 0); QCOMPARE(dataChangedSpy.count(), 0); QCOMPARE(newTrackByIdInListSpy.count(), 0); @@ -4463,7 +4280,6 @@ QCOMPARE(rowsRemovedSpy.count(), 0); QCOMPARE(rowsMovedSpy.count(), 0); QCOMPARE(rowsInsertedSpy.count(), 0); - QCOMPARE(trackHasBeenAddedSpy.count(), 0); QCOMPARE(persistentStateChangedSpy.count(), 0); QCOMPARE(dataChangedSpy.count(), 0); QCOMPARE(newTrackByIdInListSpy.count(), 0); @@ -4481,7 +4297,6 @@ QCOMPARE(rowsRemovedSpy.count(), 0); QCOMPARE(rowsMovedSpy.count(), 0); QCOMPARE(rowsInsertedSpy.count(), 1); - QCOMPARE(trackHasBeenAddedSpy.count(), 1); QCOMPARE(persistentStateChangedSpy.count(), 1); QCOMPARE(dataChangedSpy.count(), 0); QCOMPARE(newTrackByIdInListSpy.count(), 1); @@ -4497,7 +4312,6 @@ QCOMPARE(rowsRemovedSpy.count(), 0); QCOMPARE(rowsMovedSpy.count(), 0); QCOMPARE(rowsInsertedSpy.count(), 1); - QCOMPARE(trackHasBeenAddedSpy.count(), 1); QCOMPARE(persistentStateChangedSpy.count(), 1); QCOMPARE(dataChangedSpy.count(), 1); QCOMPARE(newTrackByIdInListSpy.count(), 1); @@ -4518,7 +4332,6 @@ QCOMPARE(rowsRemovedSpy.count(), 0); QCOMPARE(rowsMovedSpy.count(), 0); QCOMPARE(rowsInsertedSpy.count(), 2); - QCOMPARE(trackHasBeenAddedSpy.count(), 2); QCOMPARE(persistentStateChangedSpy.count(), 2); QCOMPARE(dataChangedSpy.count(), 1); QCOMPARE(newTrackByIdInListSpy.count(), 2); @@ -4534,7 +4347,6 @@ QCOMPARE(rowsRemovedSpy.count(), 0); QCOMPARE(rowsMovedSpy.count(), 0); QCOMPARE(rowsInsertedSpy.count(), 2); - QCOMPARE(trackHasBeenAddedSpy.count(), 2); QCOMPARE(persistentStateChangedSpy.count(), 2); QCOMPARE(dataChangedSpy.count(), 2); QCOMPARE(newTrackByIdInListSpy.count(), 2); @@ -4557,7 +4369,6 @@ QCOMPARE(rowsRemovedSpy.count(), 0); QCOMPARE(rowsMovedSpy.count(), 0); QCOMPARE(rowsInsertedSpy.count(), 3); - QCOMPARE(trackHasBeenAddedSpy.count(), 3); QCOMPARE(persistentStateChangedSpy.count(), 3); QCOMPARE(dataChangedSpy.count(), 2); QCOMPARE(newTrackByIdInListSpy.count(), 3); @@ -4573,7 +4384,6 @@ QCOMPARE(rowsRemovedSpy.count(), 0); QCOMPARE(rowsMovedSpy.count(), 0); QCOMPARE(rowsInsertedSpy.count(), 3); - QCOMPARE(trackHasBeenAddedSpy.count(), 3); QCOMPARE(persistentStateChangedSpy.count(), 3); QCOMPARE(dataChangedSpy.count(), 3); QCOMPARE(newTrackByIdInListSpy.count(), 3); @@ -4596,7 +4406,6 @@ QCOMPARE(rowsRemovedSpy.count(), 0); QCOMPARE(rowsMovedSpy.count(), 0); QCOMPARE(rowsInsertedSpy.count(), 3); - QCOMPARE(trackHasBeenAddedSpy.count(), 3); QCOMPARE(persistentStateChangedSpy.count(), 3); QCOMPARE(dataChangedSpy.count(), 4); QCOMPARE(newTrackByIdInListSpy.count(), 3); @@ -4619,7 +4428,6 @@ QCOMPARE(rowsRemovedSpy.count(), 0); QCOMPARE(rowsMovedSpy.count(), 0); QCOMPARE(rowsInsertedSpy.count(), 3); - QCOMPARE(trackHasBeenAddedSpy.count(), 3); QCOMPARE(persistentStateChangedSpy.count(), 3); QCOMPARE(dataChangedSpy.count(), 4); QCOMPARE(newTrackByIdInListSpy.count(), 3); @@ -4635,7 +4443,6 @@ QCOMPARE(rowsRemovedSpy.count(), 0); QCOMPARE(rowsMovedSpy.count(), 0); QCOMPARE(rowsInsertedSpy.count(), 3); - QCOMPARE(trackHasBeenAddedSpy.count(), 3); QCOMPARE(persistentStateChangedSpy.count(), 3); QCOMPARE(dataChangedSpy.count(), 4); QCOMPARE(newTrackByIdInListSpy.count(), 3); @@ -4651,7 +4458,6 @@ QCOMPARE(rowsRemovedSpy.count(), 0); QCOMPARE(rowsMovedSpy.count(), 0); QCOMPARE(rowsInsertedSpy.count(), 3); - QCOMPARE(trackHasBeenAddedSpy.count(), 3); QCOMPARE(persistentStateChangedSpy.count(), 3); QCOMPARE(dataChangedSpy.count(), 4); QCOMPARE(newTrackByIdInListSpy.count(), 3); @@ -4673,7 +4479,6 @@ QSignalSpy rowsMovedSpy(&myPlayList, &MediaPlayList::rowsMoved); QSignalSpy rowsRemovedSpy(&myPlayList, &MediaPlayList::rowsRemoved); QSignalSpy rowsInsertedSpy(&myPlayList, &MediaPlayList::rowsInserted); - QSignalSpy trackHasBeenAddedSpy(&myPlayList, &MediaPlayList::trackHasBeenAdded); QSignalSpy persistentStateChangedSpy(&myPlayList, &MediaPlayList::persistentStateChanged); QSignalSpy dataChangedSpy(&myPlayList, &MediaPlayList::dataChanged); QSignalSpy newTrackByIdInListSpy(&myPlayList, &MediaPlayList::newTrackByIdInList); @@ -4687,7 +4492,6 @@ QCOMPARE(rowsRemovedSpy.count(), 0); QCOMPARE(rowsMovedSpy.count(), 0); QCOMPARE(rowsInsertedSpy.count(), 0); - QCOMPARE(trackHasBeenAddedSpy.count(), 0); QCOMPARE(persistentStateChangedSpy.count(), 0); QCOMPARE(dataChangedSpy.count(), 0); QCOMPARE(newTrackByIdInListSpy.count(), 0); @@ -4726,7 +4530,6 @@ QCOMPARE(rowsRemovedSpy.count(), 0); QCOMPARE(rowsMovedSpy.count(), 0); QCOMPARE(rowsInsertedSpy.count(), 0); - QCOMPARE(trackHasBeenAddedSpy.count(), 0); QCOMPARE(persistentStateChangedSpy.count(), 0); QCOMPARE(dataChangedSpy.count(), 0); QCOMPARE(newTrackByIdInListSpy.count(), 0); @@ -4742,7 +4545,6 @@ QCOMPARE(rowsRemovedSpy.count(), 0); QCOMPARE(rowsMovedSpy.count(), 0); QCOMPARE(rowsInsertedSpy.count(), 1); - QCOMPARE(trackHasBeenAddedSpy.count(), 0); QCOMPARE(persistentStateChangedSpy.count(), 1); QCOMPARE(dataChangedSpy.count(), 0); QCOMPARE(newTrackByIdInListSpy.count(), 0); @@ -4758,7 +4560,6 @@ QCOMPARE(rowsRemovedSpy.count(), 0); QCOMPARE(rowsMovedSpy.count(), 0); QCOMPARE(rowsInsertedSpy.count(), 2); - QCOMPARE(trackHasBeenAddedSpy.count(), 0); QCOMPARE(persistentStateChangedSpy.count(), 2); QCOMPARE(dataChangedSpy.count(), 1); QCOMPARE(newTrackByIdInListSpy.count(), 0); @@ -4819,7 +4620,6 @@ QCOMPARE(rowsRemovedSpy.count(), 3); QCOMPARE(rowsMovedSpy.count(), 0); QCOMPARE(rowsInsertedSpy.count(), 2); - QCOMPARE(trackHasBeenAddedSpy.count(), 0); QCOMPARE(persistentStateChangedSpy.count(), 5); QCOMPARE(dataChangedSpy.count(), 1); QCOMPARE(newTrackByIdInListSpy.count(), 0); @@ -4865,7 +4665,6 @@ QSignalSpy rowsMovedSpy(&myPlayList, &MediaPlayList::rowsMoved); QSignalSpy rowsRemovedSpy(&myPlayList, &MediaPlayList::rowsRemoved); QSignalSpy rowsInsertedSpy(&myPlayList, &MediaPlayList::rowsInserted); - QSignalSpy trackHasBeenAddedSpy(&myPlayList, &MediaPlayList::trackHasBeenAdded); QSignalSpy persistentStateChangedSpy(&myPlayList, &MediaPlayList::persistentStateChanged); QSignalSpy dataChangedSpy(&myPlayList, &MediaPlayList::dataChanged); QSignalSpy newTrackByIdInListSpy(&myPlayList, &MediaPlayList::newTrackByIdInList); @@ -4879,7 +4678,6 @@ QCOMPARE(rowsRemovedSpy.count(), 0); QCOMPARE(rowsMovedSpy.count(), 0); QCOMPARE(rowsInsertedSpy.count(), 0); - QCOMPARE(trackHasBeenAddedSpy.count(), 0); QCOMPARE(persistentStateChangedSpy.count(), 0); QCOMPARE(dataChangedSpy.count(), 0); QCOMPARE(newTrackByIdInListSpy.count(), 0); @@ -4918,7 +4716,6 @@ QCOMPARE(rowsRemovedSpy.count(), 0); QCOMPARE(rowsMovedSpy.count(), 0); QCOMPARE(rowsInsertedSpy.count(), 0); - QCOMPARE(trackHasBeenAddedSpy.count(), 0); QCOMPARE(persistentStateChangedSpy.count(), 0); QCOMPARE(dataChangedSpy.count(), 0); QCOMPARE(newTrackByIdInListSpy.count(), 0); @@ -4934,7 +4731,6 @@ QCOMPARE(rowsRemovedSpy.count(), 0); QCOMPARE(rowsMovedSpy.count(), 0); QCOMPARE(rowsInsertedSpy.count(), 1); - QCOMPARE(trackHasBeenAddedSpy.count(), 0); QCOMPARE(persistentStateChangedSpy.count(), 1); QCOMPARE(dataChangedSpy.count(), 0); QCOMPARE(newTrackByIdInListSpy.count(), 0); @@ -4950,7 +4746,6 @@ QCOMPARE(rowsRemovedSpy.count(), 0); QCOMPARE(rowsMovedSpy.count(), 0); QCOMPARE(rowsInsertedSpy.count(), 2); - QCOMPARE(trackHasBeenAddedSpy.count(), 0); QCOMPARE(persistentStateChangedSpy.count(), 2); QCOMPARE(dataChangedSpy.count(), 1); QCOMPARE(newTrackByIdInListSpy.count(), 0); @@ -5020,7 +4815,6 @@ QCOMPARE(rowsRemovedSpy.count(), 0); QCOMPARE(rowsMovedSpy.count(), 0); QCOMPARE(rowsInsertedSpy.count(), 2); - QCOMPARE(trackHasBeenAddedSpy.count(), 0); QCOMPARE(persistentStateChangedSpy.count(), 2); QCOMPARE(dataChangedSpy.count(), 2); QCOMPARE(newTrackByIdInListSpy.count(), 0); @@ -7132,7 +6926,6 @@ QSignalSpy rowsMovedSpy(&myPlayList, &MediaPlayList::rowsMoved); QSignalSpy rowsRemovedSpy(&myPlayList, &MediaPlayList::rowsRemoved); QSignalSpy rowsInsertedSpy(&myPlayList, &MediaPlayList::rowsInserted); - QSignalSpy trackHasBeenAddedSpy(&myPlayList, &MediaPlayList::trackHasBeenAdded); QSignalSpy persistentStateChangedSpy(&myPlayList, &MediaPlayList::persistentStateChanged); QSignalSpy dataChangedSpy(&myPlayList, &MediaPlayList::dataChanged); QSignalSpy newTrackByIdInListSpy(&myPlayList, &MediaPlayList::newTrackByIdInList); @@ -7146,7 +6939,6 @@ QCOMPARE(rowsRemovedSpy.count(), 0); QCOMPARE(rowsMovedSpy.count(), 0); QCOMPARE(rowsInsertedSpy.count(), 0); - QCOMPARE(trackHasBeenAddedSpy.count(), 0); QCOMPARE(persistentStateChangedSpy.count(), 0); QCOMPARE(dataChangedSpy.count(), 0); QCOMPARE(newTrackByIdInListSpy.count(), 0); @@ -7185,7 +6977,6 @@ QCOMPARE(rowsRemovedSpy.count(), 0); QCOMPARE(rowsMovedSpy.count(), 0); QCOMPARE(rowsInsertedSpy.count(), 0); - QCOMPARE(trackHasBeenAddedSpy.count(), 0); QCOMPARE(persistentStateChangedSpy.count(), 0); QCOMPARE(dataChangedSpy.count(), 0); QCOMPARE(newTrackByIdInListSpy.count(), 0); @@ -7201,7 +6992,6 @@ QCOMPARE(rowsRemovedSpy.count(), 0); QCOMPARE(rowsMovedSpy.count(), 0); QCOMPARE(rowsInsertedSpy.count(), 2); - QCOMPARE(trackHasBeenAddedSpy.count(), 2); QCOMPARE(persistentStateChangedSpy.count(), 2); QCOMPARE(dataChangedSpy.count(), 2); QCOMPARE(newTrackByIdInListSpy.count(), 0); @@ -7219,7 +7009,6 @@ QCOMPARE(rowsRemovedSpy.count(), 0); QCOMPARE(rowsMovedSpy.count(), 0); QCOMPARE(rowsInsertedSpy.count(), 2); - QCOMPARE(trackHasBeenAddedSpy.count(), 2); QCOMPARE(persistentStateChangedSpy.count(), 2); QCOMPARE(dataChangedSpy.count(), 4); QCOMPARE(newTrackByIdInListSpy.count(), 0); @@ -7254,7 +7043,6 @@ QSignalSpy rowsMovedSpy(&myPlayList, &MediaPlayList::rowsMoved); QSignalSpy rowsRemovedSpy(&myPlayList, &MediaPlayList::rowsRemoved); QSignalSpy rowsInsertedSpy(&myPlayList, &MediaPlayList::rowsInserted); - QSignalSpy trackHasBeenAddedSpy(&myPlayList, &MediaPlayList::trackHasBeenAdded); QSignalSpy persistentStateChangedSpy(&myPlayList, &MediaPlayList::persistentStateChanged); QSignalSpy dataChangedSpy(&myPlayList, &MediaPlayList::dataChanged); QSignalSpy newTrackByIdInListSpy(&myPlayList, &MediaPlayList::newTrackByIdInList); @@ -7268,7 +7056,6 @@ QCOMPARE(rowsRemovedSpy.count(), 0); QCOMPARE(rowsMovedSpy.count(), 0); QCOMPARE(rowsInsertedSpy.count(), 0); - QCOMPARE(trackHasBeenAddedSpy.count(), 0); QCOMPARE(persistentStateChangedSpy.count(), 0); QCOMPARE(dataChangedSpy.count(), 0); QCOMPARE(newTrackByIdInListSpy.count(), 0); @@ -7307,7 +7094,6 @@ QCOMPARE(rowsRemovedSpy.count(), 0); QCOMPARE(rowsMovedSpy.count(), 0); QCOMPARE(rowsInsertedSpy.count(), 0); - QCOMPARE(trackHasBeenAddedSpy.count(), 0); QCOMPARE(persistentStateChangedSpy.count(), 0); QCOMPARE(dataChangedSpy.count(), 0); QCOMPARE(newTrackByIdInListSpy.count(), 0); @@ -7324,7 +7110,6 @@ QCOMPARE(rowsRemovedSpy.count(), 0); QCOMPARE(rowsMovedSpy.count(), 0); QCOMPARE(rowsInsertedSpy.count(), 2); - QCOMPARE(trackHasBeenAddedSpy.count(), 2); QCOMPARE(persistentStateChangedSpy.count(), 2); QCOMPARE(dataChangedSpy.count(), 2); QCOMPARE(newTrackByIdInListSpy.count(), 0); @@ -7342,7 +7127,6 @@ QCOMPARE(rowsRemovedSpy.count(), 0); QCOMPARE(rowsMovedSpy.count(), 0); QCOMPARE(rowsInsertedSpy.count(), 2); - QCOMPARE(trackHasBeenAddedSpy.count(), 2); QCOMPARE(persistentStateChangedSpy.count(), 2); QCOMPARE(dataChangedSpy.count(), 4); QCOMPARE(newTrackByIdInListSpy.count(), 0); diff --git a/autotests/trackslistenertest.cpp b/autotests/trackslistenertest.cpp --- a/autotests/trackslistenertest.cpp +++ b/autotests/trackslistenertest.cpp @@ -147,15 +147,17 @@ QSignalSpy trackHasChangedSpy(&myListener, &TracksListener::trackHasChanged); QSignalSpy trackHasBeenRemovedSpy(&myListener, &TracksListener::trackHasBeenRemoved); QSignalSpy albumAddedSpy(&myListener, &TracksListener::albumAdded); + QSignalSpy playListTracksAddedSpy(&myPlayList, &MediaPlayList::rowsInserted); + QSignalSpy playListDataChangedSpy(&myPlayList, &MediaPlayList::dataChanged); myDatabaseContent.init(QStringLiteral("testDbDirectContent")); connect(&myDatabaseContent, &DatabaseInterface::trackRemoved, &myListener, &TracksListener::trackRemoved); connect(&myDatabaseContent, &DatabaseInterface::tracksAdded, &myListener, &TracksListener::tracksAdded); connect(&myDatabaseContent, &DatabaseInterface::trackModified, &myListener, &TracksListener::trackModified); - connect(&myListener, &TracksListener::trackHasChanged, &myPlayList, &MediaPlayList::trackChanged); - connect(&myListener, &TracksListener::trackHasBeenRemoved, &myPlayList, &MediaPlayList::trackRemoved); - connect(&myListener, &TracksListener::albumAdded, &myPlayList, &MediaPlayList::albumAdded); + connect(&myListener, &TracksListener::trackHasChanged, &myPlayList, &MediaPlayList::trackChanged, Qt::QueuedConnection); + connect(&myListener, &TracksListener::trackHasBeenRemoved, &myPlayList, &MediaPlayList::trackRemoved, Qt::QueuedConnection); + connect(&myListener, &TracksListener::albumAdded, &myPlayList, &MediaPlayList::albumAdded, Qt::QueuedConnection); connect(&myPlayList, &MediaPlayList::newTrackByIdInList, &myListener, &TracksListener::trackByIdInList); connect(&myPlayList, &MediaPlayList::newTrackByNameInList, &myListener, &TracksListener::trackByNameInList); connect(&myPlayList, &MediaPlayList::newArtistInList, &myListener, &TracksListener::newArtistInList); @@ -176,6 +178,8 @@ QCOMPARE(trackHasBeenRemovedSpy.count(), 0); QCOMPARE(albumAddedSpy.count(), 1); + QCOMPARE(playListTracksAddedSpy.wait(300), true); + QCOMPARE(myPlayList.tracksCount(), 6); QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::ColumnsRoles::IsValidRole).toBool(), true); @@ -223,6 +227,8 @@ QCOMPARE(myPlayList.tracksCount(), 6); + QCOMPARE(playListDataChangedSpy.wait(300), true); + QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::ColumnsRoles::IsValidRole).toBool(), false); QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::ColumnsRoles::TitleRole).toString(), QStringLiteral("track1")); QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::ColumnsRoles::ArtistRole).toString(), QStringLiteral("artist1")); @@ -270,15 +276,16 @@ QSignalSpy trackHasChangedSpy(&myListener, &TracksListener::trackHasChanged); QSignalSpy trackHasBeenRemovedSpy(&myListener, &TracksListener::trackHasBeenRemoved); QSignalSpy albumAddedSpy(&myListener, &TracksListener::albumAdded); + QSignalSpy playListDataChangedSpy(&myPlayList, &MediaPlayList::dataChanged); myDatabaseContent.init(QStringLiteral("testDbDirectContent")); connect(&myDatabaseContent, &DatabaseInterface::trackRemoved, &myListener, &TracksListener::trackRemoved); connect(&myDatabaseContent, &DatabaseInterface::tracksAdded, &myListener, &TracksListener::tracksAdded); connect(&myDatabaseContent, &DatabaseInterface::trackModified, &myListener, &TracksListener::trackModified); - connect(&myListener, &TracksListener::trackHasChanged, &myPlayList, &MediaPlayList::trackChanged); - connect(&myListener, &TracksListener::trackHasBeenRemoved, &myPlayList, &MediaPlayList::trackRemoved); - connect(&myListener, &TracksListener::albumAdded, &myPlayList, &MediaPlayList::albumAdded); + connect(&myListener, &TracksListener::trackHasChanged, &myPlayList, &MediaPlayList::trackChanged, Qt::QueuedConnection); + connect(&myListener, &TracksListener::trackHasBeenRemoved, &myPlayList, &MediaPlayList::trackRemoved, Qt::QueuedConnection); + connect(&myListener, &TracksListener::albumAdded, &myPlayList, &MediaPlayList::albumAdded, Qt::QueuedConnection); connect(&myPlayList, &MediaPlayList::newTrackByIdInList, &myListener, &TracksListener::trackByIdInList); connect(&myPlayList, &MediaPlayList::newTrackByNameInList, &myListener, &TracksListener::trackByNameInList); connect(&myPlayList, &MediaPlayList::newArtistInList, &myListener, &TracksListener::newArtistInList); @@ -306,6 +313,8 @@ QCOMPARE(myPlayList.tracksCount(), 1); + QCOMPARE(playListDataChangedSpy.wait(300), true); + QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::ColumnsRoles::IsValidRole).toBool(), true); QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::ColumnsRoles::TitleRole).toString(), QStringLiteral("track1")); QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::ColumnsRoles::ArtistRole).toString(), QStringLiteral("artist1")); @@ -321,6 +330,8 @@ QCOMPARE(myPlayList.tracksCount(), 1); + QCOMPARE(playListDataChangedSpy.wait(300), true); + QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::ColumnsRoles::IsValidRole).toBool(), false); QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::ColumnsRoles::TitleRole).toString(), QStringLiteral("track1")); QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::ColumnsRoles::ArtistRole).toString(), QStringLiteral("artist1")); @@ -338,15 +349,16 @@ QSignalSpy trackHasChangedSpy(&myListener, &TracksListener::trackHasChanged); QSignalSpy trackHasBeenRemovedSpy(&myListener, &TracksListener::trackHasBeenRemoved); QSignalSpy albumAddedSpy(&myListener, &TracksListener::albumAdded); + QSignalSpy playListDataChangedSpy(&myPlayList, &MediaPlayList::dataChanged); myDatabaseContent.init(QStringLiteral("testDbDirectContent")); connect(&myDatabaseContent, &DatabaseInterface::trackRemoved, &myListener, &TracksListener::trackRemoved); connect(&myDatabaseContent, &DatabaseInterface::tracksAdded, &myListener, &TracksListener::tracksAdded); connect(&myDatabaseContent, &DatabaseInterface::trackModified, &myListener, &TracksListener::trackModified); - connect(&myListener, &TracksListener::trackHasChanged, &myPlayList, &MediaPlayList::trackChanged); - connect(&myListener, &TracksListener::trackHasBeenRemoved, &myPlayList, &MediaPlayList::trackRemoved); - connect(&myListener, &TracksListener::albumAdded, &myPlayList, &MediaPlayList::albumAdded); + connect(&myListener, &TracksListener::trackHasChanged, &myPlayList, &MediaPlayList::trackChanged, Qt::QueuedConnection); + connect(&myListener, &TracksListener::trackHasBeenRemoved, &myPlayList, &MediaPlayList::trackRemoved, Qt::QueuedConnection); + connect(&myListener, &TracksListener::albumAdded, &myPlayList, &MediaPlayList::albumAdded, Qt::QueuedConnection); connect(&myPlayList, &MediaPlayList::newTrackByIdInList, &myListener, &TracksListener::trackByIdInList); connect(&myPlayList, &MediaPlayList::newTrackByNameInList, &myListener, &TracksListener::trackByNameInList); connect(&myPlayList, &MediaPlayList::newArtistInList, &myListener, &TracksListener::newArtistInList); @@ -370,6 +382,8 @@ QCOMPARE(myPlayList.tracksCount(), 1); + QCOMPARE(playListDataChangedSpy.wait(300), true); + QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::ColumnsRoles::IsValidRole).toBool(), true); QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::ColumnsRoles::TitleRole).toString(), QStringLiteral("track1")); QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::ColumnsRoles::ArtistRole).toString(), QStringLiteral("artist1")); @@ -385,6 +399,8 @@ QCOMPARE(myPlayList.tracksCount(), 1); + QCOMPARE(playListDataChangedSpy.wait(300), true); + QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::ColumnsRoles::IsValidRole).toBool(), false); QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::ColumnsRoles::TitleRole).toString(), QStringLiteral("track1")); QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::ColumnsRoles::ArtistRole).toString(), QStringLiteral("artist1")); @@ -402,15 +418,16 @@ QSignalSpy trackHasChangedSpy(&myListener, &TracksListener::trackHasChanged); QSignalSpy trackHasBeenRemovedSpy(&myListener, &TracksListener::trackHasBeenRemoved); QSignalSpy albumAddedSpy(&myListener, &TracksListener::albumAdded); + QSignalSpy playListDataChangedSpy(&myPlayList, &MediaPlayList::dataChanged); myDatabaseContent.init(QStringLiteral("testDbDirectContent")); connect(&myDatabaseContent, &DatabaseInterface::trackRemoved, &myListener, &TracksListener::trackRemoved); connect(&myDatabaseContent, &DatabaseInterface::tracksAdded, &myListener, &TracksListener::tracksAdded); connect(&myDatabaseContent, &DatabaseInterface::trackModified, &myListener, &TracksListener::trackModified); - connect(&myListener, &TracksListener::trackHasChanged, &myPlayList, &MediaPlayList::trackChanged); - connect(&myListener, &TracksListener::trackHasBeenRemoved, &myPlayList, &MediaPlayList::trackRemoved); - connect(&myListener, &TracksListener::albumAdded, &myPlayList, &MediaPlayList::albumAdded); + connect(&myListener, &TracksListener::trackHasChanged, &myPlayList, &MediaPlayList::trackChanged, Qt::QueuedConnection); + connect(&myListener, &TracksListener::trackHasBeenRemoved, &myPlayList, &MediaPlayList::trackRemoved, Qt::QueuedConnection); + connect(&myListener, &TracksListener::albumAdded, &myPlayList, &MediaPlayList::albumAdded, Qt::QueuedConnection); connect(&myPlayList, &MediaPlayList::newTrackByIdInList, &myListener, &TracksListener::trackByIdInList); connect(&myPlayList, &MediaPlayList::newTrackByNameInList, &myListener, &TracksListener::trackByNameInList); connect(&myPlayList, &MediaPlayList::newArtistInList, &myListener, &TracksListener::newArtistInList); @@ -441,6 +458,8 @@ QCOMPARE(trackHasBeenRemovedSpy.count(), 0); QCOMPARE(albumAddedSpy.count(), 0); + QCOMPARE(playListDataChangedSpy.wait(300), true); + QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::ColumnsRoles::IsValidRole).toBool(), true); QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::ColumnsRoles::TitleRole).toString(), QStringLiteral("track1")); QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::ColumnsRoles::ArtistRole).toString(), QStringLiteral("artist1")); @@ -456,6 +475,8 @@ QCOMPARE(myPlayList.tracksCount(), 1); + QCOMPARE(playListDataChangedSpy.wait(300), true); + QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::ColumnsRoles::IsValidRole).toBool(), false); QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::ColumnsRoles::TitleRole).toString(), QStringLiteral("track1")); QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::ColumnsRoles::ArtistRole).toString(), QStringLiteral("artist1")); @@ -473,15 +494,16 @@ QSignalSpy trackHasChangedSpy(&myListener, &TracksListener::trackHasChanged); QSignalSpy trackHasBeenRemovedSpy(&myListener, &TracksListener::trackHasBeenRemoved); QSignalSpy albumAddedSpy(&myListener, &TracksListener::albumAdded); + QSignalSpy playListDataChangedSpy(&myPlayList, &MediaPlayList::dataChanged); myDatabaseContent.init(QStringLiteral("testDbDirectContent")); connect(&myDatabaseContent, &DatabaseInterface::trackRemoved, &myListener, &TracksListener::trackRemoved); connect(&myDatabaseContent, &DatabaseInterface::tracksAdded, &myListener, &TracksListener::tracksAdded); connect(&myDatabaseContent, &DatabaseInterface::trackModified, &myListener, &TracksListener::trackModified); - connect(&myListener, &TracksListener::trackHasChanged, &myPlayList, &MediaPlayList::trackChanged); - connect(&myListener, &TracksListener::trackHasBeenRemoved, &myPlayList, &MediaPlayList::trackRemoved); - connect(&myListener, &TracksListener::albumAdded, &myPlayList, &MediaPlayList::albumAdded); + connect(&myListener, &TracksListener::trackHasChanged, &myPlayList, &MediaPlayList::trackChanged, Qt::QueuedConnection); + connect(&myListener, &TracksListener::trackHasBeenRemoved, &myPlayList, &MediaPlayList::trackRemoved, Qt::QueuedConnection); + connect(&myListener, &TracksListener::albumAdded, &myPlayList, &MediaPlayList::albumAdded, Qt::QueuedConnection); connect(&myPlayList, &MediaPlayList::newTrackByIdInList, &myListener, &TracksListener::trackByIdInList); connect(&myPlayList, &MediaPlayList::newTrackByNameInList, &myListener, &TracksListener::trackByNameInList); connect(&myPlayList, &MediaPlayList::newArtistInList, &myListener, &TracksListener::newArtistInList); @@ -505,6 +527,8 @@ QCOMPARE(myPlayList.tracksCount(), 1); + QCOMPARE(playListDataChangedSpy.wait(300), true); + QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::ColumnsRoles::IsValidRole).toBool(), true); QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::ColumnsRoles::TitleRole).toString(), QStringLiteral("track1")); QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::ColumnsRoles::ArtistRole).toString(), QStringLiteral("artist1")); @@ -525,6 +549,8 @@ QCOMPARE(myPlayList.tracksCount(), 1); + QCOMPARE(playListDataChangedSpy.wait(300), true); + QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::ColumnsRoles::IsValidRole).toBool(), true); QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::ColumnsRoles::TitleRole).toString(), QStringLiteral("track1")); QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::ColumnsRoles::ArtistRole).toString(), QStringLiteral("artist1")); @@ -540,6 +566,8 @@ QCOMPARE(myPlayList.tracksCount(), 1); + QCOMPARE(playListDataChangedSpy.wait(300), true); + QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::ColumnsRoles::IsValidRole).toBool(), false); QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::ColumnsRoles::TitleRole).toString(), QStringLiteral("track1")); QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::ColumnsRoles::ArtistRole).toString(), QStringLiteral("artist1")); diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -35,6 +35,7 @@ models/alltracksproxymodel.cpp models/singleartistproxymodel.cpp models/singlealbumproxymodel.cpp + models/mediaplaylistproxymodel.cpp windows/WindowsTheme.qml windows/PlatformIntegration.qml @@ -123,6 +124,8 @@ qt5_add_resources(elisa_SOURCES resources.qrc) set_property(SOURCE qrc_resources.cpp PROPERTY SKIP_AUTOMOC ON) + set_property(SOURCE qrc_resources.cpp PROPERTY SKIP_AUTOMOC ON) + set(elisa_ICONS_PNG ../icons/128-apps-elisa.png ../icons/64-apps-elisa.png @@ -250,6 +253,7 @@ models/alltracksproxymodel.cpp models/singleartistproxymodel.cpp models/singlealbumproxymodel.cpp + models/mediaplaylistproxymodel.cpp databaseinterface.cpp musiclistenersmanager.cpp trackslistener.cpp diff --git a/src/elisaapplication.h b/src/elisaapplication.h --- a/src/elisaapplication.h +++ b/src/elisaapplication.h @@ -35,7 +35,7 @@ class AllTracksProxyModel; class SingleArtistProxyModel; class SingleAlbumProxyModel; -class MediaPlayList; +class MediaPlayListProxyModel; class ElisaApplicationPrivate; class ElisaApplication : public QObject @@ -72,7 +72,7 @@ READ singleAlbumProxyModel NOTIFY singleAlbumProxyModelChanged) - Q_PROPERTY(MediaPlayList *mediaPlayList + Q_PROPERTY(MediaPlayListProxyModel *mediaPlayList READ mediaPlayList NOTIFY mediaPlayListChanged) @@ -99,7 +99,7 @@ SingleAlbumProxyModel *singleAlbumProxyModel() const; - MediaPlayList *mediaPlayList() const; + MediaPlayListProxyModel *mediaPlayList() const; Q_SIGNALS: diff --git a/src/elisaapplication.cpp b/src/elisaapplication.cpp --- a/src/elisaapplication.cpp +++ b/src/elisaapplication.cpp @@ -21,12 +21,13 @@ #include "elisaapplication.h" #include "musiclistenersmanager.h" +#include "mediaplaylist.h" #include "models/allalbumsproxymodel.h" #include "models/alltracksproxymodel.h" #include "models/allartistsproxymodel.h" #include "models/singleartistproxymodel.h" #include "models/singlealbumproxymodel.h" -#include "mediaplaylist.h" +#include "models/mediaplaylistproxymodel.h" #include "elisa_settings.h" #include @@ -58,6 +59,7 @@ #include #include #include +#include #include #include @@ -92,7 +94,7 @@ std::unique_ptr mSingleAlbumProxyModel; - std::unique_ptr mMediaPlayList; + std::unique_ptr mMediaPlayListProxyModel; }; @@ -260,42 +262,89 @@ Q_EMIT singleArtistProxyModelChanged(); d->mSingleAlbumProxyModel = std::make_unique(); Q_EMIT singleAlbumProxyModelChanged(); - d->mMediaPlayList = std::make_unique(); + d->mMediaPlayListProxyModel = std::make_unique(); Q_EMIT mediaPlayListChanged(); + d->mMediaPlayListProxyModel->setSourceModel(d->mMusicManager->mediaPlayList()); + connect(d->mMusicManager->mediaPlayList(), &MediaPlayList::ensurePlay, + d->mMediaPlayListProxyModel.get(), &MediaPlayListProxyModel::ensurePlay); + connect(d->mMusicManager->mediaPlayList(), &MediaPlayList::playListLoaded, + d->mMediaPlayListProxyModel.get(), &MediaPlayListProxyModel::playListLoaded); + connect(d->mMusicManager->mediaPlayList(), &MediaPlayList::playListLoadFailed, + d->mMediaPlayListProxyModel.get(), &MediaPlayListProxyModel::playListLoadFailed); + connect(d->mMediaPlayListProxyModel.get(), static_cast &, + ElisaUtils::PlayListEnqueueMode, + ElisaUtils::PlayListEnqueueTriggerPlay)>(&MediaPlayListProxyModel::triggerEnqueue), + d->mMusicManager->mediaPlayList(), static_cast &, + ElisaUtils::PlayListEnqueueMode, + ElisaUtils::PlayListEnqueueTriggerPlay)>(&MediaPlayList::enqueue)); + connect(d->mMediaPlayListProxyModel.get(), static_cast &, + ElisaUtils::PlayListEnqueueMode, + ElisaUtils::PlayListEnqueueTriggerPlay)>(&MediaPlayListProxyModel::triggerEnqueue), + d->mMusicManager->mediaPlayList(), static_cast &, + ElisaUtils::PlayListEnqueueMode, + ElisaUtils::PlayListEnqueueTriggerPlay)>(&MediaPlayList::enqueue)); + connect(d->mMediaPlayListProxyModel.get(), static_cast &, + ElisaUtils::PlayListEnqueueMode, + ElisaUtils::PlayListEnqueueTriggerPlay)>(&MediaPlayListProxyModel::triggerEnqueue), + d->mMusicManager->mediaPlayList(), static_cast &, + ElisaUtils::PlayListEnqueueMode, + ElisaUtils::PlayListEnqueueTriggerPlay)>(&MediaPlayList::enqueue)); + connect(d->mMediaPlayListProxyModel.get(), &MediaPlayListProxyModel::triggerEnqueueAndPlay, + d->mMusicManager->mediaPlayList(), &MediaPlayList::enqueueAndPlay); + connect(d->mMediaPlayListProxyModel.get(), &MediaPlayListProxyModel::triggerEnqueueArtists, + d->mMusicManager->mediaPlayList(), &MediaPlayList::enqueueArtists); + connect(d->mMediaPlayListProxyModel.get(), &MediaPlayListProxyModel::triggerSeedRandomGenerator, + d->mMusicManager->mediaPlayList(), &MediaPlayList::seedRandomGenerator); + connect(d->mMediaPlayListProxyModel.get(), &MediaPlayListProxyModel::triggerSkipNextTrack, + d->mMusicManager->mediaPlayList(), &MediaPlayList::skipNextTrack); + connect(d->mMediaPlayListProxyModel.get(), &MediaPlayListProxyModel::triggerSkipPreviousTrack, + d->mMusicManager->mediaPlayList(), &MediaPlayList::skipPreviousTrack); + connect(d->mMediaPlayListProxyModel.get(), &MediaPlayListProxyModel::triggerClearPlayList, + d->mMusicManager->mediaPlayList(), &MediaPlayList::clearPlayList); + connect(d->mMusicManager->mediaPlayList(), &MediaPlayList::currentTrackChanged, + d->mMediaPlayListProxyModel.get(), &MediaPlayListProxyModel::currentTrackChanged); + connect(d->mMusicManager->mediaPlayList(), &MediaPlayList::currentTrackRowChanged, + d->mMediaPlayListProxyModel.get(), &MediaPlayListProxyModel::currentTrackRowChanged); + connect(d->mMusicManager->mediaPlayList(), &MediaPlayList::repeatPlayChanged, + d->mMediaPlayListProxyModel.get(), &MediaPlayListProxyModel::repeatPlayChanged); + connect(d->mMusicManager->mediaPlayList(), &MediaPlayList::randomPlayChanged, + d->mMediaPlayListProxyModel.get(), &MediaPlayListProxyModel::randomPlayChanged); + connect(d->mMusicManager->mediaPlayList(), &MediaPlayList::persistentStateChanged, + d->mMediaPlayListProxyModel.get(), &MediaPlayListProxyModel::persistentStateChanged); + d->mMusicManager->setElisaApplication(this); - d->mMediaPlayList->setMusicListenersManager(d->mMusicManager.get()); - QObject::connect(this, &ElisaApplication::enqueue, d->mMediaPlayList.get(), &MediaPlayList::enqueueAndPlay); + QObject::connect(this, &ElisaApplication::enqueue, d->mMediaPlayListProxyModel.get(), &MediaPlayListProxyModel::enqueueAndPlay); d->mAllAlbumsProxyModel->setSourceModel(d->mMusicManager->allAlbumsModel()); d->mAllArtistsProxyModel->setSourceModel(d->mMusicManager->allArtistsModel()); d->mAllTracksProxyModel->setSourceModel(d->mMusicManager->allTracksModel()); d->mSingleArtistProxyModel->setSourceModel(d->mMusicManager->allAlbumsModel()); d->mSingleAlbumProxyModel->setSourceModel(d->mMusicManager->albumModel()); QObject::connect(d->mAllAlbumsProxyModel.get(), &AllAlbumsProxyModel::albumToEnqueue, - d->mMediaPlayList.get(), static_cast &, + d->mMediaPlayListProxyModel.get(), static_cast &, ElisaUtils::PlayListEnqueueMode, - ElisaUtils::PlayListEnqueueTriggerPlay)>(&MediaPlayList::enqueue)); + ElisaUtils::PlayListEnqueueTriggerPlay)>(&MediaPlayListProxyModel::enqueue)); QObject::connect(d->mAllArtistsProxyModel.get(), &AllArtistsProxyModel::artistToEnqueue, - d->mMediaPlayList.get(), &MediaPlayList::enqueueArtists); + d->mMediaPlayListProxyModel.get(), &MediaPlayListProxyModel::enqueueArtists); QObject::connect(d->mAllTracksProxyModel.get(), &AllTracksProxyModel::trackToEnqueue, - d->mMediaPlayList.get(), static_cast &, + d->mMediaPlayListProxyModel.get(), static_cast &, ElisaUtils::PlayListEnqueueMode, - ElisaUtils::PlayListEnqueueTriggerPlay)>(&MediaPlayList::enqueue)); + ElisaUtils::PlayListEnqueueTriggerPlay)>(&MediaPlayListProxyModel::enqueue)); QObject::connect(d->mSingleArtistProxyModel.get(), &SingleArtistProxyModel::albumToEnqueue, - d->mMediaPlayList.get(), static_cast &, + d->mMediaPlayListProxyModel.get(), static_cast &, ElisaUtils::PlayListEnqueueMode, - ElisaUtils::PlayListEnqueueTriggerPlay)>(&MediaPlayList::enqueue)); + ElisaUtils::PlayListEnqueueTriggerPlay)>(&MediaPlayListProxyModel::enqueue)); QObject::connect(d->mSingleAlbumProxyModel.get(), &SingleAlbumProxyModel::trackToEnqueue, - d->mMediaPlayList.get(), static_cast &, + d->mMediaPlayListProxyModel.get(), static_cast &, ElisaUtils::PlayListEnqueueMode, - ElisaUtils::PlayListEnqueueTriggerPlay)>(&MediaPlayList::enqueue)); + ElisaUtils::PlayListEnqueueTriggerPlay)>(&MediaPlayListProxyModel::enqueue)); } QAction * ElisaApplication::action(const QString& name) @@ -356,9 +405,9 @@ return d->mSingleAlbumProxyModel.get(); } -MediaPlayList *ElisaApplication::mediaPlayList() const +MediaPlayListProxyModel *ElisaApplication::mediaPlayList() const { - return d->mMediaPlayList.get(); + return d->mMediaPlayListProxyModel.get(); } diff --git a/src/main.cpp b/src/main.cpp --- a/src/main.cpp +++ b/src/main.cpp @@ -54,6 +54,7 @@ #include "models/allartistsproxymodel.h" #include "models/singleartistproxymodel.h" #include "models/singlealbumproxymodel.h" +#include "models/mediaplaylistproxymodel.h" #include "elisaapplication.h" #include "audiowrapper.h" #include "notificationitem.h" @@ -161,6 +162,7 @@ qmlRegisterType("org.kde.elisa", 1, 0, "AllTracksProxyModel"); qmlRegisterType("org.kde.elisa", 1, 0, "SingleAlbumProxyModel"); qmlRegisterType("org.kde.elisa", 1, 0, "SingleArtistProxyModel"); + qmlRegisterType("org.kde.elisa", 1, 0, "MediaPlayListProxyModel"); qmlRegisterType("org.kde.elisa", 1, 0, "AudioWrapper"); qmlRegisterType("org.kde.elisa", 1, 0, "TopNotificationManager"); qmlRegisterType("org.kde.elisa", 1, 0, "TrackDataHelper"); @@ -185,7 +187,10 @@ qRegisterMetaType>("QMap"); qRegisterMetaType("ElisaUtils::PlayListEnqueueMode"); qRegisterMetaType("ElisaUtils::PlayListEnqueueTriggerPlay"); + qRegisterMetaType>("QList"); + qRegisterMetaType>("QList"); qmlRegisterUncreatableType("org.kde.elisa", 1, 0, "ElisaApplication", QStringLiteral("only one and done in c++")); + qmlRegisterUncreatableMetaObject(ElisaUtils::staticMetaObject, "org.kde.elisa", 1, 0, "ElisaUtils", QStringLiteral("Access to enums & flags only")); qRegisterMetaTypeStreamOperators("PlayListControler::PlayerState"); diff --git a/src/mediaplaylist.h b/src/mediaplaylist.h --- a/src/mediaplaylist.h +++ b/src/mediaplaylist.h @@ -34,6 +34,7 @@ class DatabaseInterface; class MusicListenersManager; class MediaPlayListEntry; +class QReadLocker; class QDebug; class MediaPlayList : public QAbstractListModel @@ -133,8 +134,6 @@ Q_INVOKABLE void move(int from, int to, int n); - Q_INVOKABLE void clearPlayList(); - Q_INVOKABLE bool savePlaylist(const QUrl &fileName); QVariantMap persistentState() const; @@ -153,16 +152,16 @@ Q_SIGNALS: + void newTracksByNameInList(const QList &tracks); + void newTrackByNameInList(const QString &title, const QString &artist, const QString &album, int trackNumber, int discNumber); void newTrackByFileNameInList(const QUrl &fileName); void newTrackByIdInList(qulonglong newTrackId); void newArtistInList(const QString &artist); - void trackHasBeenAdded(const QString &title, const QUrl &image); - void persistentStateChanged(); void musicListenersManagerChanged(); @@ -239,6 +238,10 @@ ElisaUtils::PlayListEnqueueMode enqueueMode, ElisaUtils::PlayListEnqueueTriggerPlay triggerPlay); + void enqueue(const QList &artists, + ElisaUtils::PlayListEnqueueMode enqueueMode, + ElisaUtils::PlayListEnqueueTriggerPlay triggerPlay); + void enqueueArtists(const QList &artistName, ElisaUtils::PlayListEnqueueMode enqueueMode, ElisaUtils::PlayListEnqueueTriggerPlay triggerPlay); @@ -259,6 +262,8 @@ void trackInError(QUrl sourceInError, QMediaPlayer::Error playerError); + void clearPlayList(); + private Q_SLOTS: void loadPlayListLoaded(); @@ -269,16 +274,30 @@ bool rowHasHeader(int row) const; - void resetCurrentTrack(); + void resetCurrentTrack(QReadLocker &locker); - void notifyCurrentTrackChanged(); + void notifyCurrentTrackChanged(QReadLocker &locker); - void restorePlayListPosition(); + void restorePlayListPosition(QReadLocker &locker); void restoreRandomPlay(); void restoreRepeatPlay(); + void internalEnqueue(const QList &newEntries, QReadLocker &locker); + + void internalEnqueue(const MediaPlayListEntry &newEntry, QReadLocker &locker, const MusicAudioTrack &audioTrack = {}); + + void internalEnqueue(const MusicAudioTrack &audioTrack, QReadLocker &locker); + + void internalEnqueue(const MusicAlbum &album, QReadLocker &locker); + + void internalEnqueue(const QString &artistName, QReadLocker &locker); + + void internalEnqueue(const QUrl &fileName, QReadLocker &locker); + + void internalClearPlayList(QReadLocker &locker); + std::unique_ptr d; }; diff --git a/src/mediaplaylist.cpp b/src/mediaplaylist.cpp --- a/src/mediaplaylist.cpp +++ b/src/mediaplaylist.cpp @@ -27,14 +27,21 @@ #include #include #include +#include +#include +#include #include #include class MediaPlayListPrivate { public: + MediaPlayListPrivate() + { + } + QList mData; QList mTrackData; @@ -53,13 +60,14 @@ QMediaPlaylist mLoadPlaylist; + QReadWriteLock mDataLock; + }; MediaPlayList::MediaPlayList(QObject *parent) : QAbstractListModel(parent), d(new MediaPlayListPrivate) { connect(&d->mLoadPlaylist, &QMediaPlaylist::loaded, this, &MediaPlayList::loadPlayListLoaded); connect(&d->mLoadPlaylist, &QMediaPlaylist::loadFailed, this, &MediaPlayList::loadPlayListLoadFailed); - seedRandomGenerator(QTime::currentTime().msec()); } MediaPlayList::~MediaPlayList() @@ -71,6 +79,8 @@ return 0; } + QReadLocker locker(&d->mDataLock); + return d->mData.size(); } @@ -117,6 +127,8 @@ return result; } + QReadLocker locker(&d->mDataLock); + if (index.row() < 0 || index.row() >= d->mData.size()) { return result; } @@ -342,6 +354,8 @@ return modelModified; } + QReadLocker locker(&d->mDataLock); + if (index.row() < 0 || index.row() >= d->mData.size()) { return modelModified; } @@ -358,11 +372,17 @@ { modelModified = true; PlayState newState = static_cast(value.toInt()); - d->mData[index.row()].mIsPlaying = newState; + locker.unlock(); + { + QWriteLocker locker(&d->mDataLock); + + d->mData[index.row()].mIsPlaying = newState; + } + locker.relock(); Q_EMIT dataChanged(index, index, {role}); if (!d->mCurrentTrack.isValid()) { - resetCurrentTrack(); + resetCurrentTrack(locker); } break; @@ -376,57 +396,75 @@ bool MediaPlayList::removeRows(int row, int count, const QModelIndex &parent) { + QReadLocker locker(&d->mDataLock); + beginRemoveRows(parent, row, row + count - 1); bool hadAlbumHeader = false; if (rowCount() > row + count) { hadAlbumHeader = rowHasHeader(row + count); } - for (int i = row, cpt = 0; cpt < count; ++i, ++cpt) { - d->mData.removeAt(i); - d->mTrackData.removeAt(i); + locker.unlock(); + { + QWriteLocker writeLocker(&d->mDataLock); + + for (int i = row, cpt = 0; cpt < count; ++i, ++cpt) { + d->mData.removeAt(i); + d->mTrackData.removeAt(i); + } } + locker.relock(); + endRemoveRows(); if (!d->mCurrentTrack.isValid()) { - d->mCurrentTrack = index(d->mCurrentPlayListPosition, 0); + auto newCurrentTrack = index(d->mCurrentPlayListPosition, 0); + locker.unlock(); + { + QWriteLocker writeLocker(&d->mDataLock); + + d->mCurrentTrack = newCurrentTrack; + } + locker.relock(); if (d->mCurrentTrack.isValid()) { - notifyCurrentTrackChanged(); + notifyCurrentTrackChanged(locker); } if (!d->mCurrentTrack.isValid()) { Q_EMIT playListFinished(); - resetCurrentTrack(); + resetCurrentTrack(locker); if (!d->mCurrentTrack.isValid()) { - notifyCurrentTrackChanged(); + notifyCurrentTrackChanged(locker); } } } if (!d->mCurrentTrack.isValid() && rowCount(parent) <= row) { - resetCurrentTrack(); + resetCurrentTrack(locker); } Q_EMIT tracksCountChanged(); if (hadAlbumHeader != rowHasHeader(row)) { Q_EMIT dataChanged(index(row, 0), index(row, 0), {ColumnsRoles::HasAlbumHeader}); if (!d->mCurrentTrack.isValid()) { - resetCurrentTrack(); + resetCurrentTrack(locker); } } Q_EMIT persistentStateChanged(); - return false; + return true; } bool MediaPlayList::moveRows(const QModelIndex &sourceParent, int sourceRow, int count, const QModelIndex &destinationParent, int destinationChild) { + QReadLocker locker(&d->mDataLock); + if (sourceParent != destinationParent) { return false; } @@ -442,32 +480,38 @@ nextTrackHasHeader = rowHasHeader(sourceRow + count); } - for (auto cptItem = 0; cptItem < count; ++cptItem) { - if (sourceRow < destinationChild) { - d->mData.move(sourceRow, destinationChild - 1); - d->mTrackData.move(sourceRow, destinationChild - 1); - } else { - d->mData.move(sourceRow, destinationChild); - d->mTrackData.move(sourceRow, destinationChild); + locker.unlock(); + { + QWriteLocker writeLocker(&d->mDataLock); + + for (auto cptItem = 0; cptItem < count; ++cptItem) { + if (sourceRow < destinationChild) { + d->mData.move(sourceRow, destinationChild - 1); + d->mTrackData.move(sourceRow, destinationChild - 1); + } else { + d->mData.move(sourceRow, destinationChild); + d->mTrackData.move(sourceRow, destinationChild); + } } } + locker.relock(); endMoveRows(); if (sourceRow < destinationChild) { if (firstMovedTrackHasHeader != rowHasHeader(destinationChild - count)) { Q_EMIT dataChanged(index(destinationChild - count, 0), index(destinationChild - count, 0), {ColumnsRoles::HasAlbumHeader}); if (!d->mCurrentTrack.isValid()) { - resetCurrentTrack(); + resetCurrentTrack(locker); } } } else { if (firstMovedTrackHasHeader != rowHasHeader(destinationChild)) { Q_EMIT dataChanged(index(destinationChild, 0), index(destinationChild, 0), {ColumnsRoles::HasAlbumHeader}); if (!d->mCurrentTrack.isValid()) { - resetCurrentTrack(); + resetCurrentTrack(locker); } } } @@ -477,15 +521,15 @@ Q_EMIT dataChanged(index(sourceRow, 0), index(sourceRow, 0), {ColumnsRoles::HasAlbumHeader}); if (!d->mCurrentTrack.isValid()) { - resetCurrentTrack(); + resetCurrentTrack(locker); } } } else { if (nextTrackHasHeader != rowHasHeader(sourceRow + count)) { Q_EMIT dataChanged(index(sourceRow + count, 0), index(sourceRow + count, 0), {ColumnsRoles::HasAlbumHeader}); if (!d->mCurrentTrack.isValid()) { - resetCurrentTrack(); + resetCurrentTrack(locker); } } } @@ -495,15 +539,15 @@ Q_EMIT dataChanged(index(destinationChild + count - 1, 0), index(destinationChild + count - 1, 0), {ColumnsRoles::HasAlbumHeader}); if (!d->mCurrentTrack.isValid()) { - resetCurrentTrack(); + resetCurrentTrack(locker); } } } else { if (futureNextTrackHasHeader != rowHasHeader(destinationChild + count)) { Q_EMIT dataChanged(index(destinationChild + count, 0), index(destinationChild + count, 0), {ColumnsRoles::HasAlbumHeader}); if (!d->mCurrentTrack.isValid()) { - resetCurrentTrack(); + resetCurrentTrack(locker); } } } @@ -524,28 +568,49 @@ void MediaPlayList::enqueue(qulonglong newTrackId) { - enqueue(MediaPlayListEntry(newTrackId)); + QReadLocker locker(&d->mDataLock); + + internalEnqueue(MediaPlayListEntry{newTrackId}, locker); } void MediaPlayList::enqueue(const MusicAudioTrack &newTrack) { - enqueue(MediaPlayListEntry(newTrack), newTrack); + QReadLocker locker(&d->mDataLock); + + internalEnqueue(MediaPlayListEntry{newTrack}, locker, newTrack); } void MediaPlayList::enqueue(const MediaPlayListEntry &newEntry, const MusicAudioTrack &audioTrack) { - beginInsertRows(QModelIndex(), d->mData.size(), d->mData.size()); - d->mData.push_back(newEntry); - if (audioTrack.isValid()) { - d->mTrackData.push_back(audioTrack); - } else { - d->mTrackData.push_back({}); + QReadLocker locker(&d->mDataLock); + + internalEnqueue(newEntry, locker, audioTrack); +} + +void MediaPlayList::internalEnqueue(const MediaPlayListEntry &newEntry, QReadLocker &locker, const MusicAudioTrack &audioTrack) +{ + auto currentSize = 0; + + currentSize = d->mData.size(); + + beginInsertRows(QModelIndex(), currentSize, currentSize); + locker.unlock(); + { + QWriteLocker writeLocker(&d->mDataLock); + + d->mData.push_back(newEntry); + if (audioTrack.isValid()) { + d->mTrackData.push_back(audioTrack); + } else { + d->mTrackData.push_back({}); + } } + locker.relock(); endInsertRows(); - restorePlayListPosition(); + restorePlayListPosition(locker); if (!d->mCurrentTrack.isValid()) { - resetCurrentTrack(); + resetCurrentTrack(locker); } Q_EMIT tracksCountChanged(); @@ -568,55 +633,87 @@ Q_EMIT newTrackByIdInList(newEntry.mId); } - Q_EMIT trackHasBeenAdded(data(index(d->mData.size() - 1, 0), ColumnsRoles::TitleRole).toString(), data(index(d->mData.size() - 1, 0), ColumnsRoles::ImageRole).toUrl()); - if (!newEntry.mIsValid) { Q_EMIT dataChanged(index(rowCount() - 1, 0), index(rowCount() - 1, 0), {MediaPlayList::HasAlbumHeader}); if (!d->mCurrentTrack.isValid()) { - resetCurrentTrack(); + resetCurrentTrack(locker); } } } -void MediaPlayList::enqueue(const MusicAlbum &album) +void MediaPlayList::internalEnqueue(const MusicAudioTrack &audioTrack, QReadLocker &locker) { - for (auto oneTrackIndex = 0; oneTrackIndex < album.tracksCount(); ++oneTrackIndex) { - enqueue(album.trackFromIndex(oneTrackIndex)); - } + internalEnqueue(MediaPlayListEntry{audioTrack}, locker, audioTrack); } -void MediaPlayList::enqueue(const MusicArtist &artist) +void MediaPlayList::internalEnqueue(const MusicAlbum &album, QReadLocker &locker) { - enqueue(artist.name()); + for (auto oneTrackIndex = 0; oneTrackIndex < album.tracksCount(); ++oneTrackIndex) { + internalEnqueue(album.trackFromIndex(oneTrackIndex), locker); + } } -void MediaPlayList::enqueue(const QString &artistName) +void MediaPlayList::internalEnqueue(const QString &artistName, QReadLocker &locker) { - beginInsertRows(QModelIndex(), d->mData.size(), d->mData.size()); - d->mData.push_back(MediaPlayListEntry{artistName}); - d->mTrackData.push_back({}); + auto currentSize = 0; + + currentSize = d->mData.size(); + + beginInsertRows(QModelIndex(), currentSize, currentSize); + locker.unlock(); + { + QWriteLocker writeLocker(&d->mDataLock); + + d->mData.push_back(MediaPlayListEntry{artistName}); + d->mTrackData.push_back({}); + } + locker.relock(); endInsertRows(); - restorePlayListPosition(); + restorePlayListPosition(locker); if (!d->mCurrentTrack.isValid()) { - resetCurrentTrack(); + resetCurrentTrack(locker); } Q_EMIT tracksCountChanged(); Q_EMIT newArtistInList(artistName); Q_EMIT persistentStateChanged(); } +void MediaPlayList::internalEnqueue(const QUrl &fileName, QReadLocker &locker) +{ + internalEnqueue(MediaPlayListEntry{fileName}, locker); +} + +void MediaPlayList::enqueue(const MusicAlbum &album) +{ + QReadLocker locker(&d->mDataLock); + + internalEnqueue(album, locker); +} + +void MediaPlayList::enqueue(const MusicArtist &artist) +{ + enqueue(artist.name()); +} + +void MediaPlayList::enqueue(const QString &artistName) +{ + QReadLocker locker(&d->mDataLock); + + internalEnqueue(artistName, locker); +} + void MediaPlayList::enqueue(const QUrl &fileName) { - qDebug() << "MediaPlayList::enqueue" << fileName; - enqueue(MediaPlayListEntry(fileName)); + QReadLocker locker(&d->mDataLock); + + internalEnqueue({fileName}, locker); } void MediaPlayList::enqueue(const QStringList &files) { - qDebug() << "MediaPlayList::enqueue" << files; for (const auto &oneFileName : files) { enqueue(QUrl::fromLocalFile(oneFileName)); } @@ -638,17 +735,25 @@ return; } + QReadLocker locker(&d->mDataLock); + beginInsertRows(QModelIndex(), d->mData.size(), d->mData.size() + newTrackIds.size() - 1); for (auto newTrackId : newTrackIds) { - d->mData.push_back(MediaPlayListEntry{newTrackId}); - d->mTrackData.push_back({}); + locker.unlock(); + { + QWriteLocker writeLocker(&d->mDataLock); + + d->mData.push_back(MediaPlayListEntry{newTrackId}); + d->mTrackData.push_back({}); + } + locker.relock(); Q_EMIT newTrackByIdInList(newTrackId); } endInsertRows(); - restorePlayListPosition(); + restorePlayListPosition(locker); if (!d->mCurrentTrack.isValid()) { - resetCurrentTrack(); + resetCurrentTrack(locker); } Q_EMIT tracksCountChanged(); @@ -665,30 +770,38 @@ return; } + QReadLocker locker(&d->mDataLock); + auto tracksCount = 0; for (const auto &oneAlbum : albums) { for (auto oneTrackIndex = 0; oneTrackIndex < oneAlbum.tracksCount(); ++oneTrackIndex) { ++tracksCount; } } if (enqueueMode == ElisaUtils::ReplacePlayList) { - clearPlayList(); + internalClearPlayList(locker); } beginInsertRows(QModelIndex(), d->mData.size(), d->mData.size() + tracksCount - 1); for (const auto &oneAlbum : albums) { for (auto oneTrackIndex = 0; oneTrackIndex < oneAlbum.tracksCount(); ++oneTrackIndex) { const auto &oneTrack = oneAlbum.trackFromIndex(oneTrackIndex); - d->mData.push_back(MediaPlayListEntry{oneTrack.databaseId()}); - d->mTrackData.push_back(oneTrack); + locker.unlock(); + { + QWriteLocker writeLocker(&d->mDataLock); + + d->mData.push_back(MediaPlayListEntry{oneTrack.databaseId()}); + d->mTrackData.push_back(oneTrack); + } + locker.relock(); } } endInsertRows(); - restorePlayListPosition(); + restorePlayListPosition(locker); if (!d->mCurrentTrack.isValid()) { - resetCurrentTrack(); + resetCurrentTrack(locker); } Q_EMIT tracksCountChanged(); @@ -709,20 +822,28 @@ return; } + QReadLocker locker(&d->mDataLock); + if (enqueueMode == ElisaUtils::ReplacePlayList) { - clearPlayList(); + internalClearPlayList(locker); } beginInsertRows(QModelIndex(), d->mData.size(), d->mData.size() + tracks.size() - 1); for (const auto &oneTrack : tracks) { - d->mData.push_back(MediaPlayListEntry{oneTrack.databaseId()}); - d->mTrackData.push_back(oneTrack); + locker.unlock(); + { + QWriteLocker writeLocker(&d->mDataLock); + + d->mData.push_back(MediaPlayListEntry{oneTrack.databaseId()}); + d->mTrackData.push_back(oneTrack); + } + locker.relock(); } endInsertRows(); - restorePlayListPosition(); + restorePlayListPosition(locker); if (!d->mCurrentTrack.isValid()) { - resetCurrentTrack(); + resetCurrentTrack(locker); } Q_EMIT tracksCountChanged(); @@ -735,29 +856,74 @@ } } +void MediaPlayList::enqueue(const QList &artists, + ElisaUtils::PlayListEnqueueMode enqueueMode, + ElisaUtils::PlayListEnqueueTriggerPlay triggerPlay) +{ + QReadLocker locker(&d->mDataLock); + + if (enqueueMode == ElisaUtils::ReplacePlayList) { + internalClearPlayList(locker); + } + + beginInsertRows(QModelIndex(), d->mData.size(), d->mData.size() + artists.size() - 1); + for (const auto &artist : artists) { + locker.unlock(); + { + QWriteLocker writeLocker(&d->mDataLock); + + d->mData.push_back(MediaPlayListEntry{artist.name()}); + d->mTrackData.push_back({}); + } + locker.relock(); + Q_EMIT newArtistInList(artist.name()); + } + endInsertRows(); + + restorePlayListPosition(locker); + if (!d->mCurrentTrack.isValid()) { + resetCurrentTrack(locker); + } + + Q_EMIT tracksCountChanged(); + Q_EMIT persistentStateChanged(); + + if (triggerPlay == ElisaUtils::TriggerPlay) { + Q_EMIT ensurePlay(); + } +} + void MediaPlayList::enqueueArtists(const QList &artistNames, ElisaUtils::PlayListEnqueueMode enqueueMode, ElisaUtils::PlayListEnqueueTriggerPlay triggerPlay) { if (artistNames.isEmpty()) { return; } + QReadLocker locker(&d->mDataLock); + if (enqueueMode == ElisaUtils::ReplacePlayList) { - clearPlayList(); + internalClearPlayList(locker); } beginInsertRows(QModelIndex(), d->mData.size(), d->mData.size() + artistNames.size() - 1); for (const auto &artistName : artistNames) { - d->mData.push_back(MediaPlayListEntry{artistName}); - d->mTrackData.push_back({}); + locker.unlock(); + { + QWriteLocker writeLocker(&d->mDataLock); + + d->mData.push_back(MediaPlayListEntry{artistName}); + d->mTrackData.push_back({}); + } + locker.relock(); Q_EMIT newArtistInList(artistName); } endInsertRows(); - restorePlayListPosition(); + restorePlayListPosition(locker); if (!d->mCurrentTrack.isValid()) { - resetCurrentTrack(); + resetCurrentTrack(locker); } Q_EMIT tracksCountChanged(); @@ -768,57 +934,83 @@ } } - void MediaPlayList::replaceAndPlay(qulonglong newTrackId) +void MediaPlayList::replaceAndPlay(qulonglong newTrackId) { - clearPlayList(); - enqueue(MediaPlayListEntry(newTrackId)); + QReadLocker locker(&d->mDataLock); + + internalClearPlayList(locker); + internalEnqueue(MediaPlayListEntry(newTrackId), locker); Q_EMIT ensurePlay(); } void MediaPlayList::replaceAndPlay(const MusicAudioTrack &newTrack) { - clearPlayList(); - enqueue(newTrack); + QReadLocker locker(&d->mDataLock); + + internalClearPlayList(locker); + internalEnqueue(newTrack, locker); Q_EMIT ensurePlay(); } void MediaPlayList::replaceAndPlay(const MusicAlbum &album) { - clearPlayList(); - enqueue(album); + QReadLocker locker(&d->mDataLock); + + internalClearPlayList(locker); + internalEnqueue(album, locker); Q_EMIT ensurePlay(); } void MediaPlayList::replaceAndPlay(const MusicArtist &artist) { - clearPlayList(); - enqueue(artist.name()); + QReadLocker locker(&d->mDataLock); + + internalClearPlayList(locker); + internalEnqueue(artist.name(), locker); Q_EMIT ensurePlay(); } void MediaPlayList::replaceAndPlay(const QString &artistName) { - clearPlayList(); - enqueue(artistName); + QReadLocker locker(&d->mDataLock); + + internalClearPlayList(locker); + internalEnqueue(artistName, locker); Q_EMIT ensurePlay(); } void MediaPlayList::replaceAndPlay(const QUrl &fileName) { - clearPlayList(); - enqueue(fileName); + QReadLocker locker(&d->mDataLock); + + internalClearPlayList(locker); + internalEnqueue(fileName, locker); Q_EMIT ensurePlay(); } void MediaPlayList::clearPlayList() +{ + QReadLocker locker(&d->mDataLock); + + internalClearPlayList(locker); +} +void MediaPlayList::internalClearPlayList(QReadLocker &locker) { if (d->mData.isEmpty()) { return; } beginRemoveRows({}, 0, d->mData.count() - 1); - d->mData.clear(); - d->mTrackData.clear(); + { + locker.unlock(); + { + QWriteLocker writeLocker(&d->mDataLock); + + d->mData.clear(); + d->mTrackData.clear(); + } + locker.relock(); + } endRemoveRows(); Q_EMIT tracksCountChanged(); @@ -834,6 +1026,8 @@ { QMediaPlaylist savePlaylist; + QReadLocker locker(&d->mDataLock); + for (int i = 0; i < d->mData.size(); ++i) { const auto &oneTrack = d->mData.at(i); const auto &oneTrackData = d->mTrackData.at(i); @@ -850,6 +1044,8 @@ auto currentState = QVariantMap(); auto result = QList(); + QReadLocker locker(&d->mDataLock); + for (int trackIndex = 0; trackIndex < d->mData.size(); ++trackIndex) { auto oneData = QList(); const auto &oneEntry = d->mData[trackIndex]; @@ -906,16 +1102,25 @@ void MediaPlayList::setPersistentState(const QVariantMap &persistentStateValue) { + QReadLocker locker(&d->mDataLock); + if (d->mPersistentState == persistentStateValue) { return; } qDebug() << "MediaPlayList::setPersistentState" << persistentStateValue; - d->mPersistentState = persistentStateValue; + locker.unlock(); + { + QWriteLocker writeLocker(&d->mDataLock); + d->mPersistentState = persistentStateValue; + } + locker.relock(); auto persistentState = d->mPersistentState[QStringLiteral("playList")].toList(); + QList allPersistedEntries; + for (auto &oneData : persistentState) { auto trackData = oneData.toStringList(); if (trackData.size() != 5) { @@ -928,10 +1133,14 @@ auto restoredTrackNumber = trackData[3].toInt(); auto restoredDiscNumber = trackData[4].toInt(); - enqueue({restoredTitle, restoredArtist, restoredAlbum, restoredTrackNumber, restoredDiscNumber}); + allPersistedEntries.push_back({restoredTitle, restoredArtist, restoredAlbum, restoredTrackNumber, restoredDiscNumber}); + } + + if (!allPersistedEntries.isEmpty()) { + internalEnqueue(allPersistedEntries, locker); } - restorePlayListPosition(); + restorePlayListPosition(locker); restoreRandomPlay(); restoreRepeatPlay(); @@ -949,6 +1158,8 @@ void MediaPlayList::albumAdded(const QList &tracks) { + QReadLocker locker(&d->mDataLock); + for (int playListIndex = 0; playListIndex < d->mData.size(); ++playListIndex) { auto &oneEntry = d->mData[playListIndex]; @@ -960,28 +1171,47 @@ continue; } - d->mTrackData[playListIndex] = tracks.first(); - oneEntry.mId = tracks.first().databaseId(); - oneEntry.mIsValid = true; - oneEntry.mIsArtist = false; + locker.unlock(); + + { + QWriteLocker writeLocker(&d->mDataLock); + + d->mTrackData[playListIndex] = tracks.first(); + oneEntry.mId = tracks.first().databaseId(); + oneEntry.mIsValid = true; + oneEntry.mIsArtist = false; + } + + locker.relock(); + Q_EMIT dataChanged(index(playListIndex, 0), index(playListIndex, 0), {}); if (!d->mCurrentTrack.isValid()) { - resetCurrentTrack(); + resetCurrentTrack(locker); } if (tracks.size() > 1) { beginInsertRows(QModelIndex(), playListIndex + 1, playListIndex - 1 + tracks.size()); - for (int trackIndex = 1; trackIndex < tracks.size(); ++trackIndex) { - d->mData.push_back(MediaPlayListEntry{tracks[trackIndex].databaseId()}); - d->mTrackData.push_back(tracks[trackIndex]); + + locker.unlock(); + + { + QWriteLocker writeLocker(&d->mDataLock); + + for (int trackIndex = 1; trackIndex < tracks.size(); ++trackIndex) { + d->mData.push_back(MediaPlayListEntry{tracks[trackIndex].databaseId()}); + d->mTrackData.push_back(tracks[trackIndex]); + } } + + locker.unlock(); + endInsertRows(); - restorePlayListPosition(); + restorePlayListPosition(locker); if (!d->mCurrentTrack.isValid()) { - resetCurrentTrack(); + resetCurrentTrack(locker); } Q_EMIT tracksCountChanged(); @@ -993,6 +1223,8 @@ void MediaPlayList::trackChanged(const MusicAudioTrack &track) { + QReadLocker locker(&d->mDataLock); + for (int i = 0; i < d->mData.size(); ++i) { auto &oneEntry = d->mData[i]; @@ -1006,12 +1238,20 @@ } if (d->mTrackData[i] != track) { - d->mTrackData[i] = track; + locker.unlock(); + + { + QWriteLocker writeLocker(&d->mDataLock); + + d->mTrackData[i] = track; + } + + locker.relock(); Q_EMIT dataChanged(index(i, 0), index(i, 0), {}); if (!d->mCurrentTrack.isValid()) { - resetCurrentTrack(); + resetCurrentTrack(locker); } } continue; @@ -1032,14 +1272,22 @@ continue; } - d->mTrackData[i] = track; - oneEntry.mId = track.databaseId(); - oneEntry.mIsValid = true; + locker.unlock(); + + { + QWriteLocker writeLocker(&d->mDataLock); + + d->mTrackData[i] = track; + oneEntry.mId = track.databaseId(); + oneEntry.mIsValid = true; + } + + locker.relock(); Q_EMIT dataChanged(index(i, 0), index(i, 0), {}); if (!d->mCurrentTrack.isValid()) { - resetCurrentTrack(); + resetCurrentTrack(locker); } break; @@ -1050,16 +1298,24 @@ continue; } - d->mTrackData[i] = track; - oneEntry.mId = track.databaseId(); - oneEntry.mIsValid = true; + locker.unlock(); + + { + QWriteLocker writeLocker(&d->mDataLock); + + d->mTrackData[i] = track; + oneEntry.mId = track.databaseId(); + oneEntry.mIsValid = true; + } + + locker.relock(); Q_EMIT dataChanged(index(i, 0), index(i, 0), {}); - restorePlayListPosition(); + restorePlayListPosition(locker); if (!d->mCurrentTrack.isValid()) { - resetCurrentTrack(); + resetCurrentTrack(locker); } break; @@ -1069,22 +1325,32 @@ void MediaPlayList::trackRemoved(qulonglong trackId) { + QReadLocker locker(&d->mDataLock); + for (int i = 0; i < d->mData.size(); ++i) { auto &oneEntry = d->mData[i]; if (oneEntry.mIsValid) { if (oneEntry.mId == trackId) { - oneEntry.mIsValid = false; - oneEntry.mTitle = d->mTrackData[i].title(); - oneEntry.mArtist = d->mTrackData[i].artist(); - oneEntry.mAlbum = d->mTrackData[i].albumName(); - oneEntry.mTrackNumber = d->mTrackData[i].trackNumber(); - oneEntry.mDiscNumber = d->mTrackData[i].discNumber(); + locker.unlock(); + + { + QWriteLocker writeLocker(&d->mDataLock); + + oneEntry.mIsValid = false; + oneEntry.mTitle = d->mTrackData[i].title(); + oneEntry.mArtist = d->mTrackData[i].artist(); + oneEntry.mAlbum = d->mTrackData[i].albumName(); + oneEntry.mTrackNumber = d->mTrackData[i].trackNumber(); + oneEntry.mDiscNumber = d->mTrackData[i].discNumber(); + } + + locker.relock(); Q_EMIT dataChanged(index(i, 0), index(i, 0), {}); if (!d->mCurrentTrack.isValid()) { - resetCurrentTrack(); + resetCurrentTrack(locker); } } } @@ -1120,6 +1386,8 @@ void MediaPlayList::skipNextTrack() { + QReadLocker locker(&d->mDataLock); + if (!d->mCurrentTrack.isValid()) { return; } @@ -1131,27 +1399,34 @@ if (rowCount() == 1) { d->mCurrentTrack = QPersistentModelIndex{}; - notifyCurrentTrackChanged(); + notifyCurrentTrackChanged(locker); } - resetCurrentTrack(); + resetCurrentTrack(locker); return; } if (d->mRandomPlay) { int randomValue = qrand(); randomValue = randomValue % (rowCount()); - d->mCurrentTrack = index(randomValue, 0); + auto newTrack = index(randomValue, 0); + locker.unlock(); + { + QWriteLocker writeLocaker(&d->mDataLock); + d->mCurrentTrack = newTrack; + } } else { d->mCurrentTrack = index(d->mCurrentTrack.row() + 1, 0); } - notifyCurrentTrackChanged(); + notifyCurrentTrackChanged(locker); } void MediaPlayList::skipPreviousTrack() { + QReadLocker locker(&d->mDataLock); + if (!d->mCurrentTrack.isValid()) { return; } @@ -1175,7 +1450,7 @@ d->mCurrentTrack = index(d->mCurrentTrack.row() - 1, d->mCurrentTrack.column(), d->mCurrentTrack.parent()); } } - notifyCurrentTrackChanged(); + notifyCurrentTrackChanged(locker); } void MediaPlayList::seedRandomGenerator(uint seed) @@ -1185,26 +1460,50 @@ void MediaPlayList::switchTo(int row) { + QReadLocker locker(&d->mDataLock); + if (!d->mCurrentTrack.isValid()) { return; } - d->mCurrentTrack = index(row, 0); + auto newCurrentTrack = index(row, 0); - notifyCurrentTrackChanged(); + locker.unlock(); + + { + QWriteLocker writeLocker(&d->mDataLock); + + d->mCurrentTrack = newCurrentTrack; + } + + locker.relock(); + + notifyCurrentTrackChanged(locker); } void MediaPlayList::trackInError(QUrl sourceInError, QMediaPlayer::Error playerError) { Q_UNUSED(playerError) + QReadLocker locker(&d->mDataLock); + + for (int i = 0; i < d->mData.size(); ++i) { auto &oneTrack = d->mData[i]; if (oneTrack.mIsValid) { const auto &oneTrackData = d->mTrackData.at(i); if (oneTrackData.resourceURI() == sourceInError) { - oneTrack.mIsValid = false; + locker.unlock(); + + { + QWriteLocker writeLocker(&d->mDataLock); + + oneTrack.mIsValid = false; + } + + locker.relock(); + Q_EMIT dataChanged(index(i, 0), index(i, 0), {ColumnsRoles::IsValidRole}); } } @@ -1225,6 +1524,8 @@ return true; } + QReadLocker locker(&d->mDataLock); + auto currentAlbumTitle = QString(); auto currentAlbumArtist = QString(); if (d->mData[row].mIsValid) { @@ -1254,13 +1555,15 @@ void MediaPlayList::loadPlayListLoaded() { - clearPlayList(); + QReadLocker locker(&d->mDataLock); + + internalClearPlayList(locker); for (int i = 0; i < d->mLoadPlaylist.mediaCount(); ++i) { - enqueue(d->mLoadPlaylist.media(i).canonicalUrl()); + internalEnqueue(d->mLoadPlaylist.media(i).canonicalUrl(), locker); } - restorePlayListPosition(); + restorePlayListPosition(locker); restoreRandomPlay(); restoreRepeatPlay(); @@ -1276,37 +1579,52 @@ Q_EMIT playListLoadFailed(); } -void MediaPlayList::resetCurrentTrack() +void MediaPlayList::resetCurrentTrack(QReadLocker &locker) { for(int row = 0; row < rowCount(); ++row) { auto candidateTrack = index(row, 0); if (candidateTrack.isValid() && candidateTrack.data(ColumnsRoles::IsValidRole).toBool()) { - d->mCurrentTrack = candidateTrack; - notifyCurrentTrackChanged(); + locker.unlock(); + { + QWriteLocker writeLocker(&d->mDataLock); + d->mCurrentTrack = candidateTrack; + } + locker.relock(); + notifyCurrentTrackChanged(locker); break; } } } -void MediaPlayList::notifyCurrentTrackChanged() +void MediaPlayList::notifyCurrentTrackChanged(QReadLocker &locker) { Q_EMIT currentTrackChanged(); Q_EMIT currentTrackRowChanged(); bool currentTrackIsValid = d->mCurrentTrack.isValid(); if (currentTrackIsValid) { - d->mCurrentPlayListPosition = d->mCurrentTrack.row(); + locker.unlock(); + { + QWriteLocker writeLocker(&d->mDataLock); + d->mCurrentPlayListPosition = d->mCurrentTrack.row(); + } + locker.relock(); } } -void MediaPlayList::restorePlayListPosition() +void MediaPlayList::restorePlayListPosition(QReadLocker &locker) { auto playerCurrentTrack = d->mPersistentState.find(QStringLiteral("currentTrack")); if (playerCurrentTrack != d->mPersistentState.end()) { auto newIndex = index(playerCurrentTrack->toInt(), 0); if (newIndex.isValid() && (newIndex != d->mCurrentTrack)) { - d->mCurrentTrack = newIndex; - notifyCurrentTrackChanged(); + locker.unlock(); + { + QWriteLocker writeLocker(&d->mDataLock); + d->mCurrentTrack = newIndex; + } + locker.relock(); + notifyCurrentTrackChanged(locker); if (d->mCurrentTrack.isValid()) { d->mPersistentState.erase(playerCurrentTrack); @@ -1317,6 +1635,8 @@ void MediaPlayList::restoreRandomPlay() { + QReadLocker locker(&d->mDataLock); + auto randomPlayStoredValue = d->mPersistentState.find(QStringLiteral("randomPlay")); if (randomPlayStoredValue != d->mPersistentState.end()) { setRandomPlay(randomPlayStoredValue->toBool()); @@ -1326,13 +1646,53 @@ void MediaPlayList::restoreRepeatPlay() { + QReadLocker locker(&d->mDataLock); + auto repeatPlayStoredValue = d->mPersistentState.find(QStringLiteral("repeatPlay")); if (repeatPlayStoredValue != d->mPersistentState.end()) { setRepeatPlay(repeatPlayStoredValue->toBool()); d->mPersistentState.erase(repeatPlayStoredValue); } } +void MediaPlayList::internalEnqueue(const QList &newEntries, QReadLocker &locker) +{ + auto currentSize = 0; + + currentSize = d->mData.size(); + + beginInsertRows(QModelIndex(), currentSize, currentSize + newEntries.size() - 1); + locker.unlock(); + { + QWriteLocker writeLocker(&d->mDataLock); + + d->mData.reserve(currentSize + newEntries.size()); + d->mData.append(newEntries); + d->mTrackData.reserve(currentSize + newEntries.size()); + for (int i = 0; i < newEntries.size(); ++i) { + d->mTrackData.push_back({}); + } + } + locker.relock(); + endInsertRows(); + + restorePlayListPosition(locker); + if (!d->mCurrentTrack.isValid()) { + resetCurrentTrack(locker); + } + + Q_EMIT tracksCountChanged(); + Q_EMIT persistentStateChanged(); + + Q_EMIT newTracksByNameInList(newEntries); + + Q_EMIT dataChanged(index(currentSize + 1, 0), index(currentSize + 1, 0), {MediaPlayList::HasAlbumHeader}); + + if (!d->mCurrentTrack.isValid()) { + resetCurrentTrack(locker); + } +} + QDebug operator<<(QDebug stream, const MediaPlayListEntry &data) { stream << data.mTitle << data.mAlbum << data.mArtist << data.mTrackUrl << data.mTrackNumber << data.mDiscNumber << data.mId << data.mIsValid; diff --git a/src/models/allalbumsmodel.cpp b/src/models/allalbumsmodel.cpp --- a/src/models/allalbumsmodel.cpp +++ b/src/models/allalbumsmodel.cpp @@ -30,8 +30,6 @@ #include #include #include -#include -#include #include @@ -41,7 +39,6 @@ AllAlbumsModelPrivate() { - mThreadPool.setMaxThreadCount(1); } QVector mAllAlbums; @@ -52,8 +49,6 @@ QReadWriteLock mDataLock; - QThreadPool mThreadPool; - }; AllAlbumsModel::AllAlbumsModel(QObject *parent) : QAbstractItemModel(parent), d(std::make_unique()) @@ -269,85 +264,79 @@ void AllAlbumsModel::albumsAdded(const QList &newAlbums) { - QtConcurrent::run(&d->mThreadPool, [=] () { - for (const auto &newAlbum : newAlbums) { - if (newAlbum.isValid()) { - beginInsertRows({}, d->mAllAlbums.size(), d->mAllAlbums.size()); + for (const auto &newAlbum : newAlbums) { + if (newAlbum.isValid()) { + beginInsertRows({}, d->mAllAlbums.size(), d->mAllAlbums.size()); - { - QWriteLocker locker(&d->mDataLock); + { + QWriteLocker locker(&d->mDataLock); - d->mAllAlbums.push_back(newAlbum.databaseId()); - d->mAlbumsData[newAlbum.databaseId()] = newAlbum; - } + d->mAllAlbums.push_back(newAlbum.databaseId()); + d->mAlbumsData[newAlbum.databaseId()] = newAlbum; + } - endInsertRows(); + endInsertRows(); - Q_EMIT albumCountChanged(); - } + Q_EMIT albumCountChanged(); } - }); + } } void AllAlbumsModel::albumRemoved(const MusicAlbum &removedAlbum) { - QtConcurrent::run(&d->mThreadPool, [=] () { - auto removedAlbumIterator = d->mAllAlbums.end(); + auto removedAlbumIterator = d->mAllAlbums.end(); - { - QReadLocker locker(&d->mDataLock); + { + QReadLocker locker(&d->mDataLock); - removedAlbumIterator = std::find(d->mAllAlbums.begin(), d->mAllAlbums.end(), removedAlbum.databaseId()); + removedAlbumIterator = std::find(d->mAllAlbums.begin(), d->mAllAlbums.end(), removedAlbum.databaseId()); - if (removedAlbumIterator == d->mAllAlbums.end()) { - return; - } + if (removedAlbumIterator == d->mAllAlbums.end()) { + return; + } - int albumIndex = removedAlbumIterator - d->mAllAlbums.begin(); + int albumIndex = removedAlbumIterator - d->mAllAlbums.begin(); - beginRemoveRows({}, albumIndex, albumIndex); + beginRemoveRows({}, albumIndex, albumIndex); - } + } - { - QWriteLocker writeLocker(&d->mDataLock); - d->mAlbumsData.remove(removedAlbum.databaseId()); - d->mAllAlbums.erase(removedAlbumIterator); - } + { + QWriteLocker writeLocker(&d->mDataLock); + d->mAlbumsData.remove(removedAlbum.databaseId()); + d->mAllAlbums.erase(removedAlbumIterator); + } - endRemoveRows(); + endRemoveRows(); - Q_EMIT albumCountChanged(); - }); + Q_EMIT albumCountChanged(); } void AllAlbumsModel::albumModified(const MusicAlbum &modifiedAlbum) { - QtConcurrent::run(&d->mThreadPool, [=] () { - auto modifiedAlbumIterator = d->mAllAlbums.end(); + auto modifiedAlbumIterator = d->mAllAlbums.end(); - { - QReadLocker locker(&d->mDataLock); + { + QReadLocker locker(&d->mDataLock); - modifiedAlbumIterator = std::find(d->mAllAlbums.begin(), d->mAllAlbums.end(), modifiedAlbum.databaseId()); - } + modifiedAlbumIterator = std::find(d->mAllAlbums.begin(), d->mAllAlbums.end(), modifiedAlbum.databaseId()); + } - int albumIndex = 0; + int albumIndex = 0; - { - QWriteLocker writeLocker(&d->mDataLock); + { + QWriteLocker writeLocker(&d->mDataLock); - if (modifiedAlbumIterator == d->mAllAlbums.end()) { - return; - } + if (modifiedAlbumIterator == d->mAllAlbums.end()) { + return; + } - albumIndex = modifiedAlbumIterator - d->mAllAlbums.begin(); + albumIndex = modifiedAlbumIterator - d->mAllAlbums.begin(); - d->mAlbumsData[modifiedAlbum.databaseId()] = modifiedAlbum; - } + d->mAlbumsData[modifiedAlbum.databaseId()] = modifiedAlbum; + } - Q_EMIT dataChanged(index(albumIndex, 0), index(albumIndex, 0)); - }); + Q_EMIT dataChanged(index(albumIndex, 0), index(albumIndex, 0)); } void AllAlbumsModel::setAllArtists(AllArtistsModel *model) diff --git a/src/models/allartistsmodel.cpp b/src/models/allartistsmodel.cpp --- a/src/models/allartistsmodel.cpp +++ b/src/models/allartistsmodel.cpp @@ -26,6 +26,8 @@ #include #include #include +#include +#include class AllArtistsModelPrivate { @@ -39,6 +41,8 @@ AllAlbumsModel *mAllAlbumsModel = nullptr; + QReadWriteLock mDataLock; + }; AllArtistsModel::AllArtistsModel(QObject *parent) : QAbstractItemModel(parent), d(std::make_unique()) @@ -50,6 +54,8 @@ int AllArtistsModel::rowCount(const QModelIndex &parent) const { + QReadLocker locker(&d->mDataLock); + auto artistCount = 0; if (parent.isValid()) { @@ -81,6 +87,8 @@ Qt::ItemFlags AllArtistsModel::flags(const QModelIndex &index) const { + QReadLocker locker(&d->mDataLock); + if (!index.isValid()) { return Qt::NoItemFlags; } @@ -90,6 +98,9 @@ QVariant AllArtistsModel::data(const QModelIndex &index, int role) const { + auto parentIndex = index.parent(); + QReadLocker locker(&d->mDataLock); + auto result = QVariant(); const auto artistsCount = d->mAllArtists.size(); @@ -106,7 +117,7 @@ return result; } - if (index.parent().isValid()) { + if (parentIndex.isValid()) { return result; } @@ -158,6 +169,8 @@ QModelIndex AllArtistsModel::index(int row, int column, const QModelIndex &parent) const { + QReadLocker locker(&d->mDataLock); + auto result = QModelIndex(); if (column != 0) { @@ -175,6 +188,8 @@ QModelIndex AllArtistsModel::parent(const QModelIndex &child) const { + QReadLocker locker(&d->mDataLock); + Q_UNUSED(child) auto result = QModelIndex(); @@ -184,27 +199,42 @@ int AllArtistsModel::columnCount(const QModelIndex &parent) const { + QReadLocker locker(&d->mDataLock); + Q_UNUSED(parent); return 1; } AllAlbumsModel *AllArtistsModel::allAlbums() const { + QReadLocker locker(&d->mDataLock); + return d->mAllAlbumsModel; } void AllArtistsModel::artistAdded(const MusicArtist &newArtist) { + QReadLocker locker(&d->mDataLock); + if (newArtist.isValid()) { beginInsertRows({}, d->mAllArtists.size(), d->mAllArtists.size()); - d->mAllArtists.push_back(newArtist); + + locker.unlock(); + { + QWriteLocker writeLocker(&d->mDataLock); + d->mAllArtists.push_back(newArtist); + } + locker.relock(); + endInsertRows(); } } void AllArtistsModel::artistRemoved(const MusicArtist &removedArtist) { + QReadLocker locker(&d->mDataLock); + auto removedArtistIterator = std::find(d->mAllArtists.begin(), d->mAllArtists.end(), removedArtist); if (removedArtistIterator == d->mAllArtists.end()) { @@ -214,7 +244,14 @@ int artistIndex = removedArtistIterator - d->mAllArtists.begin(); beginRemoveRows({}, artistIndex, artistIndex); - d->mAllArtists.erase(removedArtistIterator); + + locker.unlock(); + { + QWriteLocker writeLocker(&d->mDataLock); + d->mAllArtists.erase(removedArtistIterator); + } + locker.relock(); + endRemoveRows(); } @@ -225,6 +262,8 @@ void AllArtistsModel::setAllAlbums(AllAlbumsModel *model) { + QReadLocker locker(&d->mDataLock); + if (d->mAllAlbumsModel == model) { return; } diff --git a/src/models/alltracksmodel.cpp b/src/models/alltracksmodel.cpp --- a/src/models/alltracksmodel.cpp +++ b/src/models/alltracksmodel.cpp @@ -21,16 +21,25 @@ #include +#include +#include +#include #include class AllTracksModelPrivate { public: + AllTracksModelPrivate() + { + } + QHash mAllTracks; QList mIds; + QReadWriteLock mDataLock; + }; AllTracksModel::AllTracksModel(QObject *parent) : QAbstractItemModel(parent), d(std::make_unique()) @@ -42,6 +51,8 @@ int AllTracksModel::rowCount(const QModelIndex &parent) const { + QReadLocker locker(&d->mDataLock); + auto tracksCount = 0; if (parent.isValid()) { @@ -87,6 +98,8 @@ Qt::ItemFlags AllTracksModel::flags(const QModelIndex &index) const { + QReadLocker locker(&d->mDataLock); + if (!index.isValid()) { return Qt::NoItemFlags; } @@ -96,6 +109,9 @@ QVariant AllTracksModel::data(const QModelIndex &index, int role) const { + auto parentIndex = index.parent(); + QReadLocker locker(&d->mDataLock); + auto result = QVariant(); const auto tracksCount = d->mAllTracks.size(); @@ -112,7 +128,7 @@ return result; } - if (index.parent().isValid()) { + if (parentIndex.isValid()) { return result; } @@ -255,6 +271,8 @@ QModelIndex AllTracksModel::index(int row, int column, const QModelIndex &parent) const { + QReadLocker locker(&d->mDataLock); + auto result = QModelIndex(); if (column != 0) { @@ -276,6 +294,8 @@ QModelIndex AllTracksModel::parent(const QModelIndex &child) const { + QReadLocker locker(&d->mDataLock); + Q_UNUSED(child) auto result = QModelIndex(); @@ -285,13 +305,17 @@ int AllTracksModel::columnCount(const QModelIndex &parent) const { + QReadLocker locker(&d->mDataLock); + Q_UNUSED(parent); return 1; } void AllTracksModel::tracksAdded(const QList &allTracks) { + QReadLocker locker(&d->mDataLock); + auto newAllTracks = d->mAllTracks; auto newTracksIds = QList(); @@ -308,31 +332,48 @@ if (countNewTracks > 0) { beginInsertRows({}, d->mAllTracks.size(), d->mAllTracks.size() + countNewTracks - 1); - d->mAllTracks = newAllTracks; - d->mIds.append(newTracksIds); + locker.unlock(); + { + QWriteLocker writeLocker(&d->mDataLock); + d->mAllTracks = newAllTracks; + d->mIds.append(newTracksIds); + } + locker.relock(); endInsertRows(); } } void AllTracksModel::trackRemoved(qulonglong removedTrackId) { + QReadLocker locker(&d->mDataLock); + auto itTrack = std::find(d->mIds.begin(), d->mIds.end(), removedTrackId); if (itTrack == d->mIds.end()) { return; } auto position = itTrack - d->mIds.begin(); beginRemoveRows({}, position, position); - d->mIds.erase(itTrack); - d->mAllTracks.remove(removedTrackId); + + locker.unlock(); + { + QWriteLocker writeLocker(&d->mDataLock); + d->mIds.erase(itTrack); + d->mAllTracks.remove(removedTrackId); + } + locker.relock(); + endRemoveRows(); } void AllTracksModel::trackModified(const MusicAudioTrack &modifiedTrack) { + QReadLocker locker(&d->mDataLock); + auto trackExists = (d->mAllTracks.contains(modifiedTrack.databaseId())); + if (!trackExists) { return; } @@ -344,7 +385,13 @@ auto position = itTrack - d->mIds.begin(); - d->mAllTracks[modifiedTrack.databaseId()] = modifiedTrack; + locker.unlock(); + { + QWriteLocker writeLocker(&d->mDataLock); + d->mAllTracks[modifiedTrack.databaseId()] = modifiedTrack; + } + locker.relock(); + Q_EMIT dataChanged(index(position, 0), index(position, 0)); } diff --git a/src/models/mediaplaylistproxymodel.h b/src/models/mediaplaylistproxymodel.h new file mode 100644 --- /dev/null +++ b/src/models/mediaplaylistproxymodel.h @@ -0,0 +1,175 @@ +/* + * Copyright 2018 Matthieu Gallien + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public License + * along with this library; see the file COPYING.LIB. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. + */ + +#ifndef MEDIAPLAYLISTPROXYMODEL_H +#define MEDIAPLAYLISTPROXYMODEL_H + +#include "elisautils.h" + +#include "musicalbum.h" +#include "musicaudiotrack.h" +#include "musicartist.h" + +#include +#include +#include +#include + +class MediaPlayList; + +class MediaPlayListProxyModel : public QSortFilterProxyModel +{ + Q_OBJECT + + Q_PROPERTY(QPersistentModelIndex currentTrack + READ currentTrack + NOTIFY currentTrackChanged) + + Q_PROPERTY(bool randomPlay + READ randomPlay + WRITE setRandomPlay + NOTIFY randomPlayChanged) + + Q_PROPERTY(int currentTrackRow + READ currentTrackRow + NOTIFY currentTrackRowChanged) + + Q_PROPERTY(bool repeatPlay + READ repeatPlay + WRITE setRepeatPlay + NOTIFY repeatPlayChanged) + + Q_PROPERTY(QVariantMap persistentState + READ persistentState + WRITE setPersistentState + NOTIFY persistentStateChanged) + +public: + + MediaPlayListProxyModel(QObject *parent = nullptr); + + QPersistentModelIndex currentTrack() const; + + int currentTrackRow() const; + + bool randomPlay() const; + + bool repeatPlay() const; + + void setSourceModel(QAbstractItemModel *sourceModel) override; + + QVariantMap persistentState() const; + +Q_SIGNALS: + + void triggerEnqueueAndPlay(const QStringList &files); + + void triggerEnqueueArtists(const QList &artistName, + ElisaUtils::PlayListEnqueueMode enqueueMode, + ElisaUtils::PlayListEnqueueTriggerPlay triggerPlay); + + void triggerEnqueue(const QList &albums, + ElisaUtils::PlayListEnqueueMode enqueueMode, + ElisaUtils::PlayListEnqueueTriggerPlay triggerPlay); + + void triggerEnqueue(const QList &tracks, + ElisaUtils::PlayListEnqueueMode enqueueMode, + ElisaUtils::PlayListEnqueueTriggerPlay triggerPlay); + + void triggerEnqueue(const QList &artists, + ElisaUtils::PlayListEnqueueMode enqueueMode, + ElisaUtils::PlayListEnqueueTriggerPlay triggerPlay); + + void triggerSkipNextTrack(); + + void triggerSkipPreviousTrack(); + + void triggerSeedRandomGenerator(uint seed); + + void triggerClearPlayList(); + + void playListLoaded(); + + void playListLoadFailed(); + + void playListFinished(); + + void ensurePlay(); + + void currentTrackChanged(); + + void currentTrackRowChanged(); + + void randomPlayChanged(); + + void repeatPlayChanged(); + + void persistentStateChanged(); + +public Q_SLOTS: + + void enqueueAndPlay(const QStringList &files); + + void enqueueArtists(const QList &artistName, + ElisaUtils::PlayListEnqueueMode enqueueMode, + ElisaUtils::PlayListEnqueueTriggerPlay triggerPlay); + + void enqueue(const MusicAlbum &album, + ElisaUtils::PlayListEnqueueMode enqueueMode, + ElisaUtils::PlayListEnqueueTriggerPlay triggerPlay); + + void enqueue(const QList &albums, + ElisaUtils::PlayListEnqueueMode enqueueMode, + ElisaUtils::PlayListEnqueueTriggerPlay triggerPlay); + + void enqueue(const MusicAudioTrack &track, + ElisaUtils::PlayListEnqueueMode enqueueMode, + ElisaUtils::PlayListEnqueueTriggerPlay triggerPlay); + + void enqueue(const QList &tracks, + ElisaUtils::PlayListEnqueueMode enqueueMode, + ElisaUtils::PlayListEnqueueTriggerPlay triggerPlay); + + void enqueue(const MusicArtist &artist, + ElisaUtils::PlayListEnqueueMode enqueueMode, + ElisaUtils::PlayListEnqueueTriggerPlay triggerPlay); + + void skipNextTrack(); + + void skipPreviousTrack(); + + void switchTo(int row); + + void setRandomPlay(bool value); + + void setRepeatPlay(bool value); + + void seedRandomGenerator(uint seed); + + void clearPlayList(); + + void setPersistentState(const QVariantMap &persistentState); + +private: + + MediaPlayList *mPlayList = nullptr; + +}; + +#endif // MEDIAPLAYLISTPROXY_H diff --git a/src/models/mediaplaylistproxymodel.cpp b/src/models/mediaplaylistproxymodel.cpp new file mode 100644 --- /dev/null +++ b/src/models/mediaplaylistproxymodel.cpp @@ -0,0 +1,188 @@ +/* + * Copyright 2018 Matthieu Gallien + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public License + * along with this library; see the file COPYING.LIB. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. + */ + +#include "mediaplaylistproxymodel.h" +#include "mediaplaylist.h" + +#include + +MediaPlayListProxyModel::MediaPlayListProxyModel(QObject *parent) : QSortFilterProxyModel(parent) +{ +} + +QPersistentModelIndex MediaPlayListProxyModel::currentTrack() const +{ + QPersistentModelIndex result; + + if (!mPlayList) { + return result; + } + + result = mapFromSource(mPlayList->currentTrack()); + + return result; +} + +int MediaPlayListProxyModel::currentTrackRow() const +{ + if (!mPlayList) { + return 0; + } + + return mPlayList->currentTrackRow(); +} + +bool MediaPlayListProxyModel::randomPlay() const +{ + if (!mPlayList) { + return {}; + } + + return mPlayList->randomPlay(); +} + +bool MediaPlayListProxyModel::repeatPlay() const +{ + if (!mPlayList) { + return {}; + } + + return mPlayList->repeatPlay(); +} + +void MediaPlayListProxyModel::setSourceModel(QAbstractItemModel *sourceModel) +{ + mPlayList = qobject_cast(sourceModel); + QSortFilterProxyModel::setSourceModel(sourceModel); +} + +QVariantMap MediaPlayListProxyModel::persistentState() const +{ + if (!mPlayList) { + return {}; + } + + return mPlayList->persistentState(); +} + +void MediaPlayListProxyModel::enqueueAndPlay(const QStringList &files) +{ + Q_EMIT triggerEnqueueAndPlay(files); +} + +void MediaPlayListProxyModel::enqueueArtists(const QList &artistName, + ElisaUtils::PlayListEnqueueMode enqueueMode, + ElisaUtils::PlayListEnqueueTriggerPlay triggerPlay) +{ + Q_EMIT triggerEnqueueArtists(artistName, enqueueMode, triggerPlay); +} + +void MediaPlayListProxyModel::enqueue(const MusicAlbum &album, + ElisaUtils::PlayListEnqueueMode enqueueMode, + ElisaUtils::PlayListEnqueueTriggerPlay triggerPlay) +{ + Q_EMIT triggerEnqueue({album}, enqueueMode, triggerPlay); +} + +void MediaPlayListProxyModel::enqueue(const QList &albums, + ElisaUtils::PlayListEnqueueMode enqueueMode, + ElisaUtils::PlayListEnqueueTriggerPlay triggerPlay) +{ + Q_EMIT triggerEnqueue(albums, enqueueMode, triggerPlay); +} + +void MediaPlayListProxyModel::enqueue(const MusicAudioTrack &track, + ElisaUtils::PlayListEnqueueMode enqueueMode, + ElisaUtils::PlayListEnqueueTriggerPlay triggerPlay) +{ + Q_EMIT triggerEnqueue({track}, enqueueMode, triggerPlay); +} + +void MediaPlayListProxyModel::enqueue(const QList &tracks, + ElisaUtils::PlayListEnqueueMode enqueueMode, + ElisaUtils::PlayListEnqueueTriggerPlay triggerPlay) +{ + Q_EMIT triggerEnqueue(tracks, enqueueMode, triggerPlay); +} + +void MediaPlayListProxyModel::enqueue(const MusicArtist &artist, + ElisaUtils::PlayListEnqueueMode enqueueMode, + ElisaUtils::PlayListEnqueueTriggerPlay triggerPlay) +{ + Q_EMIT triggerEnqueue({artist}, enqueueMode, triggerPlay); +} + +void MediaPlayListProxyModel::skipNextTrack() +{ + Q_EMIT triggerSkipNextTrack(); +} + +void MediaPlayListProxyModel::skipPreviousTrack() +{ + Q_EMIT triggerSkipPreviousTrack(); +} + +void MediaPlayListProxyModel::switchTo(int row) +{ + if (!mPlayList) { + return; + } + + mPlayList->switchTo(row); +} + +void MediaPlayListProxyModel::setRandomPlay(bool value) +{ + if (!mPlayList) { + return; + } + + mPlayList->setRandomPlay(value); +} + +void MediaPlayListProxyModel::setRepeatPlay(bool value) +{ + if (!mPlayList) { + return; + } + + mPlayList->setRepeatPlay(value); +} + +void MediaPlayListProxyModel::seedRandomGenerator(uint seed) +{ + Q_EMIT triggerSeedRandomGenerator(seed); +} + +void MediaPlayListProxyModel::clearPlayList() +{ + Q_EMIT triggerClearPlayList(); +} + +void MediaPlayListProxyModel::setPersistentState(const QVariantMap &persistentState) +{ + if (!mPlayList) { + return; + } + + mPlayList->setPersistentState(persistentState); +} + + +#include "moc_mediaplaylistproxymodel.cpp" diff --git a/src/mpris2/mediaplayer2player.h b/src/mpris2/mediaplayer2player.h --- a/src/mpris2/mediaplayer2player.h +++ b/src/mpris2/mediaplayer2player.h @@ -27,7 +27,7 @@ #include #include -class MediaPlayList; +class MediaPlayListProxyModel; class ManageAudioPlayer; class ManageMediaPlayerControl; class ManageHeaderBar; @@ -55,7 +55,7 @@ Q_PROPERTY(int mediaPlayerPresent READ mediaPlayerPresent WRITE setMediaPlayerPresent NOTIFY mediaPlayerPresentChanged) public: - explicit MediaPlayer2Player(MediaPlayList *playListControler, + explicit MediaPlayer2Player(MediaPlayListProxyModel *playListControler, ManageAudioPlayer *manageAudioPlayer, ManageMediaPlayerControl* manageMediaPlayerControl, ManageHeaderBar * manageHeaderBar, @@ -153,7 +153,7 @@ bool m_canGoNext = false; bool m_canGoPrevious = false; qlonglong m_position = 0; - MediaPlayList *m_playListControler = nullptr; + MediaPlayListProxyModel *m_playListControler = nullptr; bool m_playerIsSeekableChanged = false; ManageAudioPlayer* m_manageAudioPlayer = nullptr; ManageMediaPlayerControl* m_manageMediaPlayerControl = nullptr; diff --git a/src/mpris2/mediaplayer2player.cpp b/src/mpris2/mediaplayer2player.cpp --- a/src/mpris2/mediaplayer2player.cpp +++ b/src/mpris2/mediaplayer2player.cpp @@ -22,7 +22,7 @@ #include "mediaplayer2player.h" #include "mpris2.h" -#include "mediaplaylist.h" +#include "models/mediaplaylistproxymodel.h" #include "manageaudioplayer.h" #include "managemediaplayercontrol.h" #include "manageheaderbar.h" @@ -39,7 +39,7 @@ static const double MAX_RATE = 1.0; static const double MIN_RATE = 1.0; -MediaPlayer2Player::MediaPlayer2Player(MediaPlayList *playListControler, ManageAudioPlayer *manageAudioPlayer, +MediaPlayer2Player::MediaPlayer2Player(MediaPlayListProxyModel *playListControler, ManageAudioPlayer *manageAudioPlayer, ManageMediaPlayerControl *manageMediaPlayerControl, ManageHeaderBar *manageHeaderBar, AudioWrapper *audioPlayer, QObject* parent) : QDBusAbstractAdaptor(parent), m_playListControler(playListControler), m_manageAudioPlayer(manageAudioPlayer), m_manageMediaPlayerControl(manageMediaPlayerControl), m_manageHeaderBar(manageHeaderBar), m_audioPlayer(audioPlayer) diff --git a/src/mpris2/mpris2.h b/src/mpris2/mpris2.h --- a/src/mpris2/mpris2.h +++ b/src/mpris2/mpris2.h @@ -29,7 +29,7 @@ class MediaPlayer2Player; class MediaPlayer2; class QAbstractItemModel; -class MediaPlayList; +class MediaPlayListProxyModel; class ManageAudioPlayer; class ManageMediaPlayerControl; class ManageHeaderBar; @@ -49,7 +49,7 @@ WRITE setPlayListModel NOTIFY playListModelChanged) - Q_PROPERTY(MediaPlayList* playListControler + Q_PROPERTY(MediaPlayListProxyModel* playListControler READ playListControler WRITE setPlayListControler NOTIFY playListControlerChanged) @@ -82,7 +82,7 @@ QAbstractItemModel* playListModel() const; - MediaPlayList* playListControler() const; + MediaPlayListProxyModel* playListControler() const; ManageAudioPlayer* audioPlayerManager() const; @@ -98,7 +98,7 @@ void setPlayListModel(QAbstractItemModel* playListModel); - void setPlayListControler(MediaPlayList* playListControler); + void setPlayListControler(MediaPlayListProxyModel* playListControler); void setAudioPlayerManager(ManageAudioPlayer* audioPlayerManager); @@ -133,7 +133,7 @@ MediaPlayer2Player *m_mp2p = nullptr; QString m_playerName; QAbstractItemModel* m_playListModel = nullptr; - MediaPlayList* m_playListControler = nullptr; + MediaPlayListProxyModel* m_playListControler = nullptr; ManageAudioPlayer* m_manageAudioPlayer = nullptr; ManageMediaPlayerControl* m_manageMediaPlayerControl = nullptr; ManageHeaderBar* m_manageHeaderBar = nullptr; diff --git a/src/mpris2/mpris2.cpp b/src/mpris2/mpris2.cpp --- a/src/mpris2/mpris2.cpp +++ b/src/mpris2/mpris2.cpp @@ -81,7 +81,7 @@ return m_playListModel; } -MediaPlayList *Mpris2::playListControler() const +MediaPlayListProxyModel *Mpris2::playListControler() const { return m_playListControler; } @@ -140,7 +140,7 @@ emit playListModelChanged(); } -void Mpris2::setPlayListControler(MediaPlayList *playListControler) +void Mpris2::setPlayListControler(MediaPlayListProxyModel *playListControler) { if (m_playListControler == playListControler) { return; diff --git a/src/musiclistenersmanager.h b/src/musiclistenersmanager.h --- a/src/musiclistenersmanager.h +++ b/src/musiclistenersmanager.h @@ -78,6 +78,10 @@ READ albumModel CONSTANT) + Q_PROPERTY(MediaPlayList* mediaPlayList + READ mediaPlayList + CONSTANT) + Q_PROPERTY(bool indexerBusy READ indexerBusy NOTIFY indexerBusyChanged) @@ -106,6 +110,8 @@ QAbstractItemModel *albumModel() const; + MediaPlayList *mediaPlayList() const; + bool indexerBusy() const; Q_SIGNALS: diff --git a/src/musiclistenersmanager.cpp b/src/musiclistenersmanager.cpp --- a/src/musiclistenersmanager.cpp +++ b/src/musiclistenersmanager.cpp @@ -37,16 +37,11 @@ #include "notificationitem.h" #include "elisaapplication.h" #include "elisa_settings.h" +#include "mediaplaylist.h" #include "models/allalbumsmodel.h" #include "models/allartistsmodel.h" #include "models/alltracksmodel.h" #include "models/albummodel.h" -#include "models/abstractmediaproxymodel.h" -#include "models/allalbumsproxymodel.h" -#include "models/allartistsproxymodel.h" -#include "models/alltracksproxymodel.h" -#include "models/singleartistproxymodel.h" -#include "models/singlealbumproxymodel.h" #include @@ -72,6 +67,8 @@ QThread mListenerThread; + QThread mModelsThread; + #if defined UPNPQT_FOUND && UPNPQT_FOUND UpnpListener mUpnpListener; #endif @@ -104,18 +101,32 @@ AlbumModel mAlbumModel; + MediaPlayList mMediaPlayList; + bool mIndexerBusy = false; }; MusicListenersManager::MusicListenersManager(QObject *parent) : QObject(parent), d(std::make_unique()) { + d->mListenerThread.setObjectName(QStringLiteral("Listener Thread")); d->mListenerThread.start(); + d->mDatabaseThread.setObjectName(QStringLiteral("Database Thread")); d->mDatabaseThread.start(); + d->mModelsThread.setObjectName(QStringLiteral("Models Thread")); + d->mModelsThread.start(); d->mDatabaseInterface.moveToThread(&d->mDatabaseThread); + d->mAllAlbumsModel.moveToThread(&d->mModelsThread); + d->mAllArtistsModel.moveToThread(&d->mModelsThread); + d->mAllTracksModel.moveToThread(&d->mModelsThread); + d->mAlbumModel.moveToThread(&d->mModelsThread); + d->mMediaPlayList.moveToThread(&d->mModelsThread); + + d->mMediaPlayList.setMusicListenersManager(this); + connect(&d->mDatabaseInterface, &DatabaseInterface::requestsInitDone, this, &MusicListenersManager::databaseReady); @@ -228,6 +239,7 @@ connect(helper, &TracksListener::trackHasBeenRemoved, client, &MediaPlayList::trackRemoved); connect(helper, &TracksListener::albumAdded, client, &MediaPlayList::albumAdded); connect(client, &MediaPlayList::newTrackByIdInList, helper, &TracksListener::trackByIdInList); + connect(client, &MediaPlayList::newTracksByNameInList, helper, &TracksListener::tracksByNameInList); connect(client, &MediaPlayList::newTrackByNameInList, helper, &TracksListener::trackByNameInList); connect(client, &MediaPlayList::newTrackByFileNameInList, helper, &TracksListener::trackByFileNameInList); connect(client, &MediaPlayList::newArtistInList, helper, &TracksListener::newArtistInList); @@ -268,6 +280,11 @@ return &d->mAlbumModel; } +MediaPlayList *MusicListenersManager::mediaPlayList() const +{ + return &d->mMediaPlayList; +} + bool MusicListenersManager::indexerBusy() const { return d->mIndexerBusy; @@ -292,6 +309,9 @@ d->mListenerThread.exit(); d->mListenerThread.wait(); + + d->mModelsThread.exit(); + d->mModelsThread.wait(); } void MusicListenersManager::showConfiguration() diff --git a/src/qml/ElisaMainWindow.qml b/src/qml/ElisaMainWindow.qml --- a/src/qml/ElisaMainWindow.qml +++ b/src/qml/ElisaMainWindow.qml @@ -454,12 +454,12 @@ mainTitle: i18nc("Title of the view of all albums", "Albums") onOpen: { - elisa.singleAlbumProxyModel.sourceModel.loadAlbumData(databaseId) localAlbums.stackView.push(albumView, { stackView: localAlbums.stackView, albumName: innerMainTitle, artistName: innerSecondaryTitle, albumArtUrl: innerImage, + albumData: innerAlbumData }) } onGoBack: localAlbums.stackView.pop() @@ -506,7 +506,8 @@ mainTitle: innerMainTitle, secondaryTitle: innerSecondaryTitle, image: innerImage, - stackView: localArtists.stackView + stackView: localArtists.stackView, + albumData: innerAlbumData }) } @@ -868,12 +869,12 @@ isSubPage: true onOpen: { - elisa.singleAlbumProxyModel.sourceModel.loadAlbumData(databaseId) localArtists.stackView.push(albumView, { stackView: localArtists.stackView, albumName: innerMainTitle, artistName: innerSecondaryTitle, albumArtUrl: innerImage, + albumData: innerAlbumData }) } onGoBack: stackView.pop() @@ -910,7 +911,7 @@ localArtists.stackView.pop() } } - allArtistsView.open(name, name, elisaTheme.defaultArtistImage, '') + allArtistsView.open(name, name, elisaTheme.defaultArtistImage, -1, undefined) } onGoBack: stackView.pop() @@ -940,6 +941,6 @@ elisa.mediaPlayList.persistentState = persistentSettings.playListState } - elisa.mediaPlayList.enqueue(elisa.arguments) + elisa.mediaPlayList.enqueueAndPlay(elisa.arguments) } } diff --git a/src/qml/GridBrowserView.qml b/src/qml/GridBrowserView.qml --- a/src/qml/GridBrowserView.qml +++ b/src/qml/GridBrowserView.qml @@ -39,7 +39,7 @@ property bool delegateDisplaySecondaryText: true property alias filterState: navigationBar.state - signal open(var innerMainTitle, var innerSecondaryTitle, var innerImage, var databaseId) + signal open(var innerMainTitle, var innerSecondaryTitle, var innerImage, var databaseId, var innerAlbumData) signal goBack() signal filterViewChanged(string filterState) @@ -129,9 +129,9 @@ containerData: model.containerData delegateDisplaySecondaryText: gridView.delegateDisplaySecondaryText - onEnqueue: elisa.mediaPlayList.enqueue(data) - onReplaceAndPlay: elisa.mediaPlayList.replaceAndPlay(data) - onOpen: gridView.open(model.display, model.secondaryText, model.imageUrl, model.databaseId) + onEnqueue: elisa.mediaPlayList.enqueue(model.containerData, ElisaUtils.AppendPlayList, ElisaUtils.DoNotTriggerPlay) + onReplaceAndPlay: elisa.mediaPlayList.enqueue(model.containerData, ElisaUtils.ReplacePlayList, ElisaUtils.TriggerPlay) + onOpen: gridView.open(model.display, model.secondaryText, model.imageUrl, model.databaseId, model.containerData) onSelected: { forceActiveFocus() contentDirectoryView.currentIndex = model.index diff --git a/src/qml/MediaAlbumView.qml b/src/qml/MediaAlbumView.qml --- a/src/qml/MediaAlbumView.qml +++ b/src/qml/MediaAlbumView.qml @@ -34,17 +34,13 @@ property bool isSingleDiscAlbum property alias filterState: navigationBar.state property var albumId + property var albumData property alias contentModel: contentDirectoryView.model signal showArtist(var name) signal goBack(); signal filterViewChanged(string filterState) - function loadAlbumData(id) - { - contentModel.sourceModel.loadAlbumData(id) - } - SystemPalette { id: myPalette colorGroup: SystemPalette.Active @@ -54,6 +50,13 @@ id: elisaTheme } + Binding { + target: contentModel.sourceModel + property: 'albumData' + value: topListing.albumData + when: contentModel.sourceModel !== undefined + } + ColumnLayout { anchors.fill: parent spacing: 0 @@ -124,9 +127,9 @@ mediaTrack.isSingleDiscAlbum: model.isSingleDiscAlbum - mediaTrack.onEnqueue: elisa.mediaPlayList.enqueue(data) + mediaTrack.onEnqueue: elisa.mediaPlayList.enqueue(model.containerData, ElisaUtils.AppendPlayList, ElisaUtils.DoNotTriggerPlay) - mediaTrack.onReplaceAndPlay: elisa.mediaPlayList.replaceAndPlay(data) + mediaTrack.onReplaceAndPlay: elisa.mediaPlayList.enqueue(model.containerData, ElisaUtils.ReplacePlayList, ElisaUtils.TriggerPlay) mediaTrack.onClicked: contentDirectoryView.currentIndex = index } diff --git a/src/qml/MediaAllTracksView.qml b/src/qml/MediaAllTracksView.qml --- a/src/qml/MediaAllTracksView.qml +++ b/src/qml/MediaAllTracksView.qml @@ -114,9 +114,9 @@ isSingleDiscAlbum: model.isSingleDiscAlbum - onEnqueue: elisa.mediaPlayList.enqueue(data) + onEnqueue: elisa.mediaPlayList.enqueue(model.containerData, ElisaUtils.AppendPlayList, ElisaUtils.DoNotTriggerPlay) - onReplaceAndPlay: elisa.mediaPlayList.replaceAndPlay(data) + onReplaceAndPlay: elisa.mediaPlayList.enqueue(model.containerData, ElisaUtils.ReplacePlayList, ElisaUtils.TriggerPlay) onClicked: contentDirectoryView.currentIndex = index } diff --git a/src/qml/MediaPlayListView.qml b/src/qml/MediaPlayListView.qml --- a/src/qml/MediaPlayListView.qml +++ b/src/qml/MediaPlayListView.qml @@ -28,7 +28,7 @@ FocusScope { property StackView parentStackView - property MediaPlayList playListModel + property var playListModel property alias randomPlayChecked: shuffleOption.checked property alias repeatPlayChecked: repeatOption.checked diff --git a/src/trackslistener.h b/src/trackslistener.h --- a/src/trackslistener.h +++ b/src/trackslistener.h @@ -28,6 +28,7 @@ class TracksListenerPrivate; class DatabaseInterface; +class MediaPlayListEntry; class TracksListener : public QObject { @@ -55,6 +56,8 @@ void trackModified(const MusicAudioTrack &modifiedTrack); + void tracksByNameInList(const QList &tracks); + void trackByNameInList(const QString &title, const QString &artist, const QString &album, int trackNumber, int discNumber); void trackByFileNameInList(const QUrl &fileName); diff --git a/src/trackslistener.cpp b/src/trackslistener.cpp --- a/src/trackslistener.cpp +++ b/src/trackslistener.cpp @@ -21,6 +21,7 @@ #include "databaseinterface.h" #include "elisautils.h" +#include "mediaplaylist.h" #include @@ -117,6 +118,13 @@ } } +void TracksListener::tracksByNameInList(const QList &tracks) +{ + for (const auto &oneTrack : tracks) { + trackByNameInList(oneTrack.mTitle, oneTrack.mArtist, oneTrack.mAlbum, oneTrack.mTrackNumber, oneTrack.mDiscNumber); + } +} + void TracksListener::trackByNameInList(const QString &title, const QString &artist, const QString &album, int trackNumber, int discNumber) { auto newTrackId = d->mDatabase->trackIdFromTitleAlbumTrackDiscNumber(title, artist, album, trackNumber, discNumber);