File indexing completed on 2024-04-28 04:48:55
0001 /* 0002 SPDX-FileCopyrightText: 2016 (c) Matthieu Gallien <matthieu_gallien@yahoo.fr> 0003 SPDX-FileCopyrightText: 2020 (c) Alexander Stippich <a.stippich@gmx.net> 0004 0005 SPDX-License-Identifier: LGPL-3.0-or-later 0006 */ 0007 0008 #include "mediaplaylistproxymodeltest.h" 0009 #include "mediaplaylisttestconfig.h" 0010 0011 #include "datatypes.h" 0012 #include "mediaplaylist.h" 0013 #include "mediaplaylistproxymodel.h" 0014 #include "databaseinterface.h" 0015 #include "trackslistener.h" 0016 0017 #include "elisa_settings.h" 0018 0019 #include "config-upnp-qt.h" 0020 0021 #include <QSignalSpy> 0022 #include <QTest> 0023 #include <QUrl> 0024 #include <QTemporaryFile> 0025 #include <QAbstractItemModelTester> 0026 0027 MediaPlayListProxyModelTest::MediaPlayListProxyModelTest(QObject *parent) : QObject(parent) 0028 { 0029 } 0030 0031 void MediaPlayListProxyModelTest::initTestCase() 0032 { 0033 qRegisterMetaType<QHash<QString,QUrl>>("QHash<QString,QUrl>"); 0034 qRegisterMetaType<QVector<qlonglong>>("QVector<qlonglong>"); 0035 qRegisterMetaType<QHash<qlonglong,int>>("QHash<qlonglong,int>"); 0036 qRegisterMetaType<ElisaUtils::PlayListEntryType>("PlayListEntryType"); 0037 Elisa::ElisaConfiguration::instance(QStringLiteral("testfoo")); 0038 } 0039 0040 void MediaPlayListProxyModelTest::m3uPlaylistParser_SimpleCase() 0041 { 0042 PlaylistParser playlistParser; 0043 QList<QUrl> listOfUrls = playlistParser.fromPlaylist(QUrl(QStringLiteral("file:///home/n/a.m3u")), QStringLiteral("/home/n/Music/1.mp3\n/home/n/Music/2.mp3\n").toUtf8()); 0044 0045 QCOMPARE(listOfUrls.count(), 2); 0046 } 0047 0048 void MediaPlayListProxyModelTest::m3uPlaylistParser_CommentCase() 0049 { 0050 const char * asString = R"--(#EXTM3U 0051 #EXTINF:-1 tvg-id="ArianaAfghanistanInternationalTV.us" status="online",Ariana Afghanistan International TV (720p) [Not 24/7] 0052 http://iptv.arianaafgtv.com/ariana/playlist.m3u8 0053 #EXTINF:-1 tvg-id="ArianaTVNational.af" status="online",Ariana TV National (720p) [Not 24/7] 0054 https://d10rltuy0iweup.cloudfront.net/ATNNAT/myStream/playlist.m3u8 0055 )--"; 0056 PlaylistParser playlistParser; 0057 QList<QUrl> listOfUrls = playlistParser.fromPlaylist(QUrl(QStringLiteral("file:///home/n/a.m3u")), QString::fromUtf8(asString).toUtf8()); 0058 0059 QCOMPARE(listOfUrls.count(), 2); 0060 } 0061 0062 void MediaPlayListProxyModelTest::plsPlaylistParserCase() 0063 { 0064 const char * asString = R"--([playlist] 0065 0066 File1=https://test.test-dom:8068 0067 Length1=-1 0068 0069 File2=example2.mp3 0070 Title2=Relative path 0071 Length2=120 0072 0073 File3=/home/n/Music/1.mp3 0074 Title3=Absolute path 0075 0076 NumberOfEntries=3 0077 Version=2 0078 )--"; 0079 PlaylistParser playlistParser; 0080 QList<QUrl> listOfUrls = playlistParser.fromPlaylist(QUrl(QStringLiteral("file:///home/n/a.pls")), QString::fromUtf8(asString).toUtf8()); 0081 0082 QCOMPARE(listOfUrls.count(), 3); 0083 } 0084 0085 void MediaPlayListProxyModelTest::m3uPlaylistParser_ToPlaylist() 0086 { 0087 PlaylistParser playlistParser; 0088 QList<QString> listOfUrls {QStringLiteral("/home/n/Music/1.mp3"), QStringLiteral("/home/n/Music/2.mp3")}; 0089 QString fileContent = playlistParser.toPlaylist(QUrl(QStringLiteral("file:///home/n/a.m3u")), listOfUrls); 0090 0091 QCOMPARE(fileContent.count(QLatin1Char('\n')), 2); 0092 } 0093 0094 void MediaPlayListProxyModelTest::plsPlaylistParser_ToPlaylist() 0095 { 0096 PlaylistParser playlistParser; 0097 QList<QString> listOfUrls {QStringLiteral("/home/n/Music/1.mp3"), QStringLiteral("/home/n/Music/2.mp3")}; 0098 QString fileContent = playlistParser.toPlaylist(QUrl(QStringLiteral("file:///home/n/a.pls")), listOfUrls); 0099 0100 QCOMPARE(fileContent.count(QStringLiteral("\nFile")), 2); 0101 } 0102 0103 void MediaPlayListProxyModelTest::simpleInitialCase() 0104 { 0105 MediaPlayList myPlayList; 0106 QAbstractItemModelTester testModel(&myPlayList); 0107 MediaPlayListProxyModel myPlayListProxyModel; 0108 myPlayListProxyModel.setPlayListModel(&myPlayList); 0109 QAbstractItemModelTester testProxyModel(&myPlayListProxyModel); 0110 DatabaseInterface myDatabaseContent; 0111 TracksListener myListener(&myDatabaseContent); 0112 0113 QSignalSpy rowsAboutToBeMovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsAboutToBeMoved); 0114 QSignalSpy rowsAboutToBeRemovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsAboutToBeRemoved); 0115 QSignalSpy rowsAboutToBeInsertedSpy(&myPlayListProxyModel, &MediaPlayList::rowsAboutToBeInserted); 0116 QSignalSpy rowsMovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsMoved); 0117 QSignalSpy rowsRemovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsRemoved); 0118 QSignalSpy rowsInsertedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsInserted); 0119 QSignalSpy persistentStateChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::persistentStateChanged); 0120 QSignalSpy dataChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::dataChanged); 0121 QSignalSpy newTrackByNameInListSpy(&myPlayList, &MediaPlayList::newTrackByNameInList); 0122 QSignalSpy newEntryInListSpy(&myPlayList, &MediaPlayList::newEntryInList); 0123 QSignalSpy newUrlInListSpy(&myPlayList, &MediaPlayList::newUrlInList); 0124 0125 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); 0126 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 0127 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 0); 0128 QCOMPARE(rowsRemovedSpy.count(), 0); 0129 QCOMPARE(rowsMovedSpy.count(), 0); 0130 QCOMPARE(rowsInsertedSpy.count(), 0); 0131 QCOMPARE(persistentStateChangedSpy.count(), 0); 0132 QCOMPARE(dataChangedSpy.count(), 0); 0133 QCOMPARE(newTrackByNameInListSpy.count(), 0); 0134 QCOMPARE(newEntryInListSpy.count(), 0); 0135 0136 myDatabaseContent.init(QStringLiteral("testDbDirectContent")); 0137 0138 connect(&myListener, &TracksListener::trackHasChanged, 0139 &myPlayList, &MediaPlayList::trackChanged, 0140 Qt::QueuedConnection); 0141 connect(&myListener, &TracksListener::tracksListAdded, 0142 &myPlayList, &MediaPlayList::tracksListAdded, 0143 Qt::QueuedConnection); 0144 connect(&myPlayList, &MediaPlayList::newEntryInList, 0145 &myListener, &TracksListener::newEntryInList, 0146 Qt::QueuedConnection); 0147 connect(&myPlayList, &MediaPlayList::newUrlInList, 0148 &myListener, &TracksListener::newUrlInList, 0149 Qt::QueuedConnection); 0150 connect(&myPlayList, &MediaPlayList::newTrackByNameInList, 0151 &myListener, &TracksListener::trackByNameInList, 0152 Qt::QueuedConnection); 0153 connect(&myDatabaseContent, &DatabaseInterface::tracksAdded, 0154 &myListener, &TracksListener::tracksAdded); 0155 0156 myDatabaseContent.insertTracksList(mNewTracks, mNewCovers); 0157 0158 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); 0159 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 0160 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 0); 0161 QCOMPARE(rowsRemovedSpy.count(), 0); 0162 QCOMPARE(rowsMovedSpy.count(), 0); 0163 QCOMPARE(rowsInsertedSpy.count(), 0); 0164 QCOMPARE(persistentStateChangedSpy.count(), 0); 0165 QCOMPARE(dataChangedSpy.count(), 0); 0166 QCOMPARE(newTrackByNameInListSpy.count(), 0); 0167 QCOMPARE(newEntryInListSpy.count(), 0); 0168 0169 auto newTrackID = myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track6"), QStringLiteral("artist1 and artist2"), QStringLiteral("album2"), 6, 1); 0170 auto newTrackData = myDatabaseContent.trackDataFromDatabaseId(newTrackID); 0171 myPlayListProxyModel.enqueue({{{{DataTypes::DatabaseIdRole, newTrackID}, {DataTypes::ElementTypeRole, ElisaUtils::Track}}, {}, {}}}, {}, {}); 0172 0173 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); 0174 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 0175 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 1); 0176 QCOMPARE(rowsRemovedSpy.count(), 0); 0177 QCOMPARE(rowsMovedSpy.count(), 0); 0178 QCOMPARE(rowsInsertedSpy.count(), 1); 0179 QCOMPARE(persistentStateChangedSpy.count(), 1); 0180 QCOMPARE(dataChangedSpy.count(), 0); 0181 QCOMPARE(newTrackByNameInListSpy.count(), 0); 0182 QCOMPARE(newEntryInListSpy.count(), 1); 0183 0184 QCOMPARE(dataChangedSpy.wait(), true); 0185 0186 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); 0187 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 0188 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 1); 0189 QCOMPARE(rowsRemovedSpy.count(), 0); 0190 QCOMPARE(rowsMovedSpy.count(), 0); 0191 QCOMPARE(rowsInsertedSpy.count(), 1); 0192 QCOMPARE(persistentStateChangedSpy.count(), 1); 0193 QCOMPARE(dataChangedSpy.count(), 1); 0194 QCOMPARE(newTrackByNameInListSpy.count(), 0); 0195 QCOMPARE(newEntryInListSpy.count(), 1); 0196 } 0197 0198 void MediaPlayListProxyModelTest::enqueueAlbumCase() 0199 { 0200 MediaPlayList myPlayList; 0201 QAbstractItemModelTester testModel(&myPlayList); 0202 MediaPlayListProxyModel myPlayListProxyModel; 0203 myPlayListProxyModel.setPlayListModel(&myPlayList); 0204 QAbstractItemModelTester testProxyModel(&myPlayListProxyModel); 0205 DatabaseInterface myDatabaseContent; 0206 TracksListener myListener(&myDatabaseContent); 0207 0208 QSignalSpy rowsAboutToBeMovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsAboutToBeMoved); 0209 QSignalSpy rowsAboutToBeRemovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsAboutToBeRemoved); 0210 QSignalSpy rowsAboutToBeInsertedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsAboutToBeInserted); 0211 QSignalSpy rowsMovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsMoved); 0212 QSignalSpy rowsRemovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsRemoved); 0213 QSignalSpy rowsInsertedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsInserted); 0214 QSignalSpy persistentStateChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::persistentStateChanged); 0215 QSignalSpy dataChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::dataChanged); 0216 QSignalSpy newTrackByNameInListSpy(&myPlayList, &MediaPlayList::newTrackByNameInList); 0217 QSignalSpy newEntryInListSpy(&myPlayList, &MediaPlayList::newEntryInList); 0218 QSignalSpy newUrlInListSpy(&myPlayList, &MediaPlayList::newUrlInList); 0219 0220 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); 0221 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 0222 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 0); 0223 QCOMPARE(rowsRemovedSpy.count(), 0); 0224 QCOMPARE(rowsMovedSpy.count(), 0); 0225 QCOMPARE(rowsInsertedSpy.count(), 0); 0226 QCOMPARE(dataChangedSpy.count(), 0); 0227 QCOMPARE(newTrackByNameInListSpy.count(), 0); 0228 QCOMPARE(newEntryInListSpy.count(), 0); 0229 0230 myDatabaseContent.init(QStringLiteral("testDbDirectContent")); 0231 0232 connect(&myListener, &TracksListener::trackHasChanged, 0233 &myPlayList, &MediaPlayList::trackChanged, 0234 Qt::QueuedConnection); 0235 connect(&myListener, &TracksListener::tracksListAdded, 0236 &myPlayList, &MediaPlayList::tracksListAdded, 0237 Qt::QueuedConnection); 0238 connect(&myPlayList, &MediaPlayList::newTrackByNameInList, 0239 &myListener, &TracksListener::trackByNameInList, 0240 Qt::QueuedConnection); 0241 connect(&myPlayList, &MediaPlayList::newEntryInList, 0242 &myListener, &TracksListener::newEntryInList, 0243 Qt::QueuedConnection); 0244 connect(&myPlayList, &MediaPlayList::newUrlInList, 0245 &myListener, &TracksListener::newUrlInList, 0246 Qt::QueuedConnection); 0247 connect(&myDatabaseContent, &DatabaseInterface::tracksAdded, 0248 &myListener, &TracksListener::tracksAdded); 0249 0250 myDatabaseContent.insertTracksList(mNewTracks, mNewCovers); 0251 0252 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); 0253 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 0254 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 0); 0255 QCOMPARE(rowsRemovedSpy.count(), 0); 0256 QCOMPARE(rowsMovedSpy.count(), 0); 0257 QCOMPARE(rowsInsertedSpy.count(), 0); 0258 QCOMPARE(dataChangedSpy.count(), 0); 0259 QCOMPARE(newTrackByNameInListSpy.count(), 0); 0260 QCOMPARE(newEntryInListSpy.count(), 0); 0261 0262 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Album}, {DataTypes::DatabaseIdRole, myDatabaseContent.albumIdFromTitleAndArtist(QStringLiteral("album2"), QStringLiteral("artist1"), QStringLiteral("/"))}}, 0263 QStringLiteral("album2"), {}}}, {}, {}); 0264 0265 QVERIFY(rowsAboutToBeInsertedSpy.wait()); 0266 0267 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 1); 0268 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 0269 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 2); 0270 QCOMPARE(rowsRemovedSpy.count(), 1); 0271 QCOMPARE(rowsMovedSpy.count(), 0); 0272 QCOMPARE(rowsInsertedSpy.count(), 2); 0273 QCOMPARE(persistentStateChangedSpy.count(), 3); 0274 QCOMPARE(dataChangedSpy.count(), 0); 0275 QCOMPARE(newTrackByNameInListSpy.count(), 0); 0276 QCOMPARE(newEntryInListSpy.count(), 1); 0277 0278 QCOMPARE(myPlayListProxyModel.rowCount(), 6); 0279 0280 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::TitleRole).toString(), QStringLiteral("track1")); 0281 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::AlbumRole).toString(), QStringLiteral("album2")); 0282 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ArtistRole).toString(), QStringLiteral("artist1")); 0283 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::TrackNumberRole).toInt(), 1); 0284 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::DiscNumberRole).toInt(), 1); 0285 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::DurationRole).toTime().msecsSinceStartOfDay(), 5); 0286 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::AlbumIdRole).toULongLong(), 2); 0287 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::TitleRole).toString(), QStringLiteral("track2")); 0288 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::AlbumRole).toString(), QStringLiteral("album2")); 0289 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::ArtistRole).toString(), QStringLiteral("artist1")); 0290 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::TrackNumberRole).toInt(), 2); 0291 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::DiscNumberRole).toInt(), 1); 0292 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::DurationRole).toTime().msecsSinceStartOfDay(), 6); 0293 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::AlbumIdRole).toULongLong(), 2); 0294 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::TitleRole).toString(), QStringLiteral("track3")); 0295 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::AlbumRole).toString(), QStringLiteral("album2")); 0296 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::ArtistRole).toString(), QStringLiteral("artist1")); 0297 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::TrackNumberRole).toInt(), 3); 0298 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::DiscNumberRole).toInt(), 1); 0299 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::DurationRole).toTime().msecsSinceStartOfDay(), 7); 0300 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::AlbumIdRole).toULongLong(), 2); 0301 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(3, 0), MediaPlayList::TitleRole).toString(), QStringLiteral("track4")); 0302 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(3, 0), MediaPlayList::AlbumRole).toString(), QStringLiteral("album2")); 0303 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(3, 0), MediaPlayList::ArtistRole).toString(), QStringLiteral("artist1")); 0304 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(3, 0), MediaPlayList::TrackNumberRole).toInt(), 4); 0305 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(3, 0), MediaPlayList::DiscNumberRole).toInt(), 1); 0306 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(3, 0), MediaPlayList::DurationRole).toTime().msecsSinceStartOfDay(), 8); 0307 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(3, 0), MediaPlayList::AlbumIdRole).toULongLong(), 2); 0308 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(4, 0), MediaPlayList::TitleRole).toString(), QStringLiteral("track5")); 0309 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(4, 0), MediaPlayList::AlbumRole).toString(), QStringLiteral("album2")); 0310 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(4, 0), MediaPlayList::ArtistRole).toString(), QStringLiteral("artist1")); 0311 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(4, 0), MediaPlayList::TrackNumberRole).toInt(), 5); 0312 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(4, 0), MediaPlayList::DiscNumberRole).toInt(), 1); 0313 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(4, 0), MediaPlayList::DurationRole).toTime().msecsSinceStartOfDay(), 9); 0314 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(4, 0), MediaPlayList::AlbumIdRole).toULongLong(), 2); 0315 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(5, 0), MediaPlayList::TitleRole).toString(), QStringLiteral("track6")); 0316 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(5, 0), MediaPlayList::AlbumRole).toString(), QStringLiteral("album2")); 0317 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(5, 0), MediaPlayList::ArtistRole).toString(), QStringLiteral("artist1 and artist2")); 0318 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(5, 0), MediaPlayList::TrackNumberRole).toInt(), 6); 0319 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(5, 0), MediaPlayList::DiscNumberRole).toInt(), 1); 0320 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(5, 0), MediaPlayList::DurationRole).toTime().msecsSinceStartOfDay(), 10); 0321 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(5, 0), MediaPlayList::AlbumIdRole).toULongLong(), 2); 0322 } 0323 0324 void MediaPlayListProxyModelTest::enqueueArtistCase() 0325 { 0326 MediaPlayList myPlayList; 0327 QAbstractItemModelTester testModel(&myPlayList); 0328 MediaPlayListProxyModel myPlayListProxyModel; 0329 myPlayListProxyModel.setPlayListModel(&myPlayList); 0330 QAbstractItemModelTester testProxyModel(&myPlayListProxyModel); 0331 DatabaseInterface myDatabaseContent; 0332 TracksListener myListener(&myDatabaseContent); 0333 0334 QSignalSpy rowsAboutToBeMovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsAboutToBeMoved); 0335 QSignalSpy rowsAboutToBeRemovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsAboutToBeRemoved); 0336 QSignalSpy rowsAboutToBeInsertedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsAboutToBeInserted); 0337 QSignalSpy rowsMovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsMoved); 0338 QSignalSpy rowsRemovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsRemoved); 0339 QSignalSpy rowsInsertedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsInserted); 0340 QSignalSpy persistentStateChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::persistentStateChanged); 0341 QSignalSpy dataChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::dataChanged); 0342 QSignalSpy newTrackByNameInListSpy(&myPlayList, &MediaPlayList::newTrackByNameInList); 0343 QSignalSpy newEntryInListSpy(&myPlayList, &MediaPlayList::newEntryInList); 0344 QSignalSpy newUrlInListSpy(&myPlayList, &MediaPlayList::newUrlInList); 0345 0346 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); 0347 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 0348 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 0); 0349 QCOMPARE(rowsRemovedSpy.count(), 0); 0350 QCOMPARE(rowsMovedSpy.count(), 0); 0351 QCOMPARE(rowsInsertedSpy.count(), 0); 0352 QCOMPARE(persistentStateChangedSpy.count(), 0); 0353 QCOMPARE(dataChangedSpy.count(), 0); 0354 QCOMPARE(newTrackByNameInListSpy.count(), 0); 0355 QCOMPARE(newEntryInListSpy.count(), 0); 0356 0357 myDatabaseContent.init(QStringLiteral("testDbDirectContent")); 0358 0359 connect(&myListener, &TracksListener::trackHasChanged, 0360 &myPlayList, &MediaPlayList::trackChanged, 0361 Qt::QueuedConnection); 0362 connect(&myListener, &TracksListener::tracksListAdded, 0363 &myPlayList, &MediaPlayList::tracksListAdded, 0364 Qt::QueuedConnection); 0365 connect(&myPlayList, &MediaPlayList::newTrackByNameInList, 0366 &myListener, &TracksListener::trackByNameInList, 0367 Qt::QueuedConnection); 0368 connect(&myPlayList, &MediaPlayList::newEntryInList, 0369 &myListener, &TracksListener::newEntryInList, 0370 Qt::QueuedConnection); 0371 connect(&myPlayList, &MediaPlayList::newUrlInList, 0372 &myListener, &TracksListener::newUrlInList, 0373 Qt::QueuedConnection); 0374 connect(&myDatabaseContent, &DatabaseInterface::tracksAdded, 0375 &myListener, &TracksListener::tracksAdded); 0376 0377 myDatabaseContent.insertTracksList(mNewTracks, mNewCovers); 0378 0379 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); 0380 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 0381 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 0); 0382 QCOMPARE(rowsRemovedSpy.count(), 0); 0383 QCOMPARE(rowsMovedSpy.count(), 0); 0384 QCOMPARE(rowsInsertedSpy.count(), 0); 0385 QCOMPARE(persistentStateChangedSpy.count(), 0); 0386 QCOMPARE(dataChangedSpy.count(), 0); 0387 QCOMPARE(newTrackByNameInListSpy.count(), 0); 0388 QCOMPARE(newEntryInListSpy.count(), 0); 0389 0390 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Artist}}, QStringLiteral("artist1"), {}}}, {}, {}); 0391 0392 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); 0393 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 0394 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 1); 0395 QCOMPARE(rowsRemovedSpy.count(), 0); 0396 QCOMPARE(rowsMovedSpy.count(), 0); 0397 QCOMPARE(rowsInsertedSpy.count(), 1); 0398 QCOMPARE(persistentStateChangedSpy.count(), 1); 0399 QCOMPARE(dataChangedSpy.count(), 0); 0400 QCOMPARE(newTrackByNameInListSpy.count(), 0); 0401 QCOMPARE(newEntryInListSpy.count(), 1); 0402 0403 QCOMPARE(myPlayListProxyModel.rowCount(), 1); 0404 0405 QCOMPARE(rowsAboutToBeInsertedSpy.wait(), true); 0406 0407 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 1); 0408 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 0409 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 2); 0410 QCOMPARE(rowsRemovedSpy.count(), 1); 0411 QCOMPARE(rowsMovedSpy.count(), 0); 0412 QCOMPARE(rowsInsertedSpy.count(), 2); 0413 QCOMPARE(persistentStateChangedSpy.count(), 3); 0414 QCOMPARE(dataChangedSpy.count(), 0); 0415 QCOMPARE(newTrackByNameInListSpy.count(), 0); 0416 QCOMPARE(newEntryInListSpy.count(), 1); 0417 0418 QCOMPARE(myPlayListProxyModel.rowCount(), 6); 0419 0420 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::TitleRole).toString(), QStringLiteral("track1")); 0421 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::AlbumRole).toString(), QStringLiteral("album1")); 0422 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ArtistRole).toString(), QStringLiteral("artist1")); 0423 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::TrackNumberRole).toInt(), 1); 0424 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::DiscNumberRole).toInt(), 1); 0425 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::DurationRole).toTime().msecsSinceStartOfDay(), 1); 0426 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::AlbumIdRole).toULongLong(), 1); 0427 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::TitleRole).toString(), QStringLiteral("track1")); 0428 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::AlbumRole).toString(), QStringLiteral("album2")); 0429 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::ArtistRole).toString(), QStringLiteral("artist1")); 0430 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::TrackNumberRole).toInt(), 1); 0431 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::DiscNumberRole).toInt(), 1); 0432 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::DurationRole).toTime().msecsSinceStartOfDay(), 5); 0433 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::AlbumIdRole).toULongLong(), 2); 0434 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::TitleRole).toString(), QStringLiteral("track2")); 0435 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::AlbumRole).toString(), QStringLiteral("album2")); 0436 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::ArtistRole).toString(), QStringLiteral("artist1")); 0437 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::TrackNumberRole).toInt(), 2); 0438 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::DiscNumberRole).toInt(), 1); 0439 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::DurationRole).toTime().msecsSinceStartOfDay(), 6); 0440 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::AlbumIdRole).toULongLong(), 2); 0441 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(3, 0), MediaPlayList::TitleRole).toString(), QStringLiteral("track3")); 0442 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(3, 0), MediaPlayList::AlbumRole).toString(), QStringLiteral("album2")); 0443 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(3, 0), MediaPlayList::ArtistRole).toString(), QStringLiteral("artist1")); 0444 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(3, 0), MediaPlayList::TrackNumberRole).toInt(), 3); 0445 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(3, 0), MediaPlayList::DiscNumberRole).toInt(), 1); 0446 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(3, 0), MediaPlayList::DurationRole).toTime().msecsSinceStartOfDay(), 7); 0447 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(3, 0), MediaPlayList::AlbumIdRole).toULongLong(), 2); 0448 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(4, 0), MediaPlayList::TitleRole).toString(), QStringLiteral("track4")); 0449 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(4, 0), MediaPlayList::AlbumRole).toString(), QStringLiteral("album2")); 0450 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(4, 0), MediaPlayList::ArtistRole).toString(), QStringLiteral("artist1")); 0451 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(4, 0), MediaPlayList::TrackNumberRole).toInt(), 4); 0452 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(4, 0), MediaPlayList::DiscNumberRole).toInt(), 1); 0453 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(4, 0), MediaPlayList::DurationRole).toTime().msecsSinceStartOfDay(), 8); 0454 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(4, 0), MediaPlayList::AlbumIdRole).toULongLong(), 2); 0455 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(5, 0), MediaPlayList::TitleRole).toString(), QStringLiteral("track5")); 0456 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(5, 0), MediaPlayList::AlbumRole).toString(), QStringLiteral("album2")); 0457 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(5, 0), MediaPlayList::ArtistRole).toString(), QStringLiteral("artist1")); 0458 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(5, 0), MediaPlayList::TrackNumberRole).toInt(), 5); 0459 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(5, 0), MediaPlayList::DiscNumberRole).toInt(), 1); 0460 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(5, 0), MediaPlayList::DurationRole).toTime().msecsSinceStartOfDay(), 9); 0461 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(5, 0), MediaPlayList::AlbumIdRole).toULongLong(), 2); 0462 } 0463 0464 void MediaPlayListProxyModelTest::enqueueMultipleAlbumsCase() 0465 { 0466 MediaPlayList myPlayList; 0467 QAbstractItemModelTester testModel(&myPlayList); 0468 MediaPlayListProxyModel myPlayListProxyModel; 0469 myPlayListProxyModel.setPlayListModel(&myPlayList); 0470 QAbstractItemModelTester testProxyModel(&myPlayListProxyModel); 0471 DatabaseInterface myDatabaseContent; 0472 TracksListener myListener(&myDatabaseContent); 0473 0474 QSignalSpy rowsAboutToBeMovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsAboutToBeMoved); 0475 QSignalSpy rowsAboutToBeRemovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsAboutToBeRemoved); 0476 QSignalSpy rowsAboutToBeInsertedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsAboutToBeInserted); 0477 QSignalSpy rowsMovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsMoved); 0478 QSignalSpy rowsRemovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsRemoved); 0479 QSignalSpy rowsInsertedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsInserted); 0480 QSignalSpy persistentStateChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::persistentStateChanged); 0481 QSignalSpy dataChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::dataChanged); 0482 QSignalSpy newTrackByNameInListSpy(&myPlayList, &MediaPlayList::newTrackByNameInList); 0483 QSignalSpy newEntryInListSpy(&myPlayList, &MediaPlayList::newEntryInList); 0484 QSignalSpy newUrlInListSpy(&myPlayList, &MediaPlayList::newUrlInList); 0485 0486 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); 0487 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 0488 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 0); 0489 QCOMPARE(rowsRemovedSpy.count(), 0); 0490 QCOMPARE(rowsMovedSpy.count(), 0); 0491 QCOMPARE(rowsInsertedSpy.count(), 0); 0492 QCOMPARE(dataChangedSpy.count(), 0); 0493 QCOMPARE(newTrackByNameInListSpy.count(), 0); 0494 QCOMPARE(newEntryInListSpy.count(), 0); 0495 0496 myDatabaseContent.init(QStringLiteral("testDbDirectContent")); 0497 0498 connect(&myListener, &TracksListener::trackHasChanged, 0499 &myPlayList, &MediaPlayList::trackChanged, 0500 Qt::QueuedConnection); 0501 connect(&myListener, &TracksListener::tracksListAdded, 0502 &myPlayList, &MediaPlayList::tracksListAdded, 0503 Qt::QueuedConnection); 0504 connect(&myPlayList, &MediaPlayList::newTrackByNameInList, 0505 &myListener, &TracksListener::trackByNameInList, 0506 Qt::QueuedConnection); 0507 connect(&myPlayList, &MediaPlayList::newEntryInList, 0508 &myListener, &TracksListener::newEntryInList, 0509 Qt::QueuedConnection); 0510 connect(&myPlayList, &MediaPlayList::newUrlInList, 0511 &myListener, &TracksListener::newUrlInList, 0512 Qt::QueuedConnection); 0513 connect(&myDatabaseContent, &DatabaseInterface::tracksAdded, 0514 &myListener, &TracksListener::tracksAdded); 0515 0516 myDatabaseContent.insertTracksList(mNewTracks, mNewCovers); 0517 0518 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); 0519 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 0520 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 0); 0521 QCOMPARE(rowsRemovedSpy.count(), 0); 0522 QCOMPARE(rowsMovedSpy.count(), 0); 0523 QCOMPARE(rowsInsertedSpy.count(), 0); 0524 QCOMPARE(dataChangedSpy.count(), 0); 0525 QCOMPARE(newTrackByNameInListSpy.count(), 0); 0526 QCOMPARE(newEntryInListSpy.count(), 0); 0527 0528 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Album}, 0529 {DataTypes::DatabaseIdRole, myDatabaseContent.albumIdFromTitleAndArtist(QStringLiteral("album2"), QStringLiteral("artist1"), QStringLiteral("/"))}}, 0530 QStringLiteral("album2"), {}}, 0531 {{{DataTypes::ElementTypeRole, ElisaUtils::Album}, 0532 {DataTypes::DatabaseIdRole, myDatabaseContent.albumIdFromTitleAndArtist(QStringLiteral("album3"), QStringLiteral("artist2"), QStringLiteral("/"))}}, 0533 QStringLiteral("album3"), {}}}, {}, {}); 0534 0535 QVERIFY(rowsAboutToBeInsertedSpy.wait()); 0536 0537 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 2); 0538 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 0539 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 3); 0540 QCOMPARE(rowsRemovedSpy.count(), 2); 0541 QCOMPARE(rowsMovedSpy.count(), 0); 0542 QCOMPARE(rowsInsertedSpy.count(), 3); 0543 QCOMPARE(persistentStateChangedSpy.count(), 5); 0544 QCOMPARE(dataChangedSpy.count(), 0); 0545 QCOMPARE(newTrackByNameInListSpy.count(), 0); 0546 QCOMPARE(newEntryInListSpy.count(), 2); 0547 0548 QCOMPARE(myPlayListProxyModel.rowCount(), 9); 0549 0550 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::TitleRole).toString(), QStringLiteral("track1")); 0551 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::AlbumRole).toString(), QStringLiteral("album2")); 0552 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ArtistRole).toString(), QStringLiteral("artist1")); 0553 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::TrackNumberRole).toInt(), 1); 0554 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::DiscNumberRole).toInt(), 1); 0555 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::DurationRole).toTime().msecsSinceStartOfDay(), 5); 0556 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::AlbumIdRole).toULongLong(), 2); 0557 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::TitleRole).toString(), QStringLiteral("track2")); 0558 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::AlbumRole).toString(), QStringLiteral("album2")); 0559 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::ArtistRole).toString(), QStringLiteral("artist1")); 0560 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::TrackNumberRole).toInt(), 2); 0561 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::DiscNumberRole).toInt(), 1); 0562 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::DurationRole).toTime().msecsSinceStartOfDay(), 6); 0563 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::AlbumIdRole).toULongLong(), 2); 0564 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::TitleRole).toString(), QStringLiteral("track3")); 0565 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::AlbumRole).toString(), QStringLiteral("album2")); 0566 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::ArtistRole).toString(), QStringLiteral("artist1")); 0567 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::TrackNumberRole).toInt(), 3); 0568 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::DiscNumberRole).toInt(), 1); 0569 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::DurationRole).toTime().msecsSinceStartOfDay(), 7); 0570 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::AlbumIdRole).toULongLong(), 2); 0571 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(3, 0), MediaPlayList::TitleRole).toString(), QStringLiteral("track4")); 0572 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(3, 0), MediaPlayList::AlbumRole).toString(), QStringLiteral("album2")); 0573 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(3, 0), MediaPlayList::ArtistRole).toString(), QStringLiteral("artist1")); 0574 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(3, 0), MediaPlayList::TrackNumberRole).toInt(), 4); 0575 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(3, 0), MediaPlayList::DiscNumberRole).toInt(), 1); 0576 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(3, 0), MediaPlayList::DurationRole).toTime().msecsSinceStartOfDay(), 8); 0577 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(3, 0), MediaPlayList::AlbumIdRole).toULongLong(), 2); 0578 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(4, 0), MediaPlayList::TitleRole).toString(), QStringLiteral("track5")); 0579 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(4, 0), MediaPlayList::AlbumRole).toString(), QStringLiteral("album2")); 0580 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(4, 0), MediaPlayList::ArtistRole).toString(), QStringLiteral("artist1")); 0581 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(4, 0), MediaPlayList::TrackNumberRole).toInt(), 5); 0582 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(4, 0), MediaPlayList::DiscNumberRole).toInt(), 1); 0583 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(4, 0), MediaPlayList::DurationRole).toTime().msecsSinceStartOfDay(), 9); 0584 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(4, 0), MediaPlayList::AlbumIdRole).toULongLong(), 2); 0585 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(5, 0), MediaPlayList::TitleRole).toString(), QStringLiteral("track6")); 0586 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(5, 0), MediaPlayList::AlbumRole).toString(), QStringLiteral("album2")); 0587 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(5, 0), MediaPlayList::ArtistRole).toString(), QStringLiteral("artist1 and artist2")); 0588 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(5, 0), MediaPlayList::TrackNumberRole).toInt(), 6); 0589 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(5, 0), MediaPlayList::DiscNumberRole).toInt(), 1); 0590 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(5, 0), MediaPlayList::DurationRole).toTime().msecsSinceStartOfDay(), 10); 0591 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(5, 0), MediaPlayList::AlbumIdRole).toULongLong(), 2); 0592 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(6, 0), MediaPlayList::TitleRole).toString(), QStringLiteral("track1")); 0593 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(6, 0), MediaPlayList::AlbumRole).toString(), QStringLiteral("album3")); 0594 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(6, 0), MediaPlayList::ArtistRole).toString(), QStringLiteral("artist2")); 0595 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(6, 0), MediaPlayList::TrackNumberRole).toInt(), 1); 0596 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(6, 0), MediaPlayList::DiscNumberRole).toInt(), 1); 0597 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(6, 0), MediaPlayList::DurationRole).toTime().msecsSinceStartOfDay(), 11); 0598 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(6, 0), MediaPlayList::AlbumIdRole).toULongLong(), 3); 0599 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(7, 0), MediaPlayList::TitleRole).toString(), QStringLiteral("track2")); 0600 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(7, 0), MediaPlayList::AlbumRole).toString(), QStringLiteral("album3")); 0601 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(7, 0), MediaPlayList::ArtistRole).toString(), QStringLiteral("artist2")); 0602 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(7, 0), MediaPlayList::TrackNumberRole).toInt(), 2); 0603 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(7, 0), MediaPlayList::DiscNumberRole).toInt(), 1); 0604 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(7, 0), MediaPlayList::DurationRole).toTime().msecsSinceStartOfDay(), 12); 0605 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(7, 0), MediaPlayList::AlbumIdRole).toULongLong(), 3); 0606 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(8, 0), MediaPlayList::TitleRole).toString(), QStringLiteral("track3")); 0607 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(8, 0), MediaPlayList::AlbumRole).toString(), QStringLiteral("album3")); 0608 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(8, 0), MediaPlayList::ArtistRole).toString(), QStringLiteral("artist2")); 0609 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(8, 0), MediaPlayList::TrackNumberRole).toInt(), 3); 0610 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(8, 0), MediaPlayList::DiscNumberRole).toInt(), 1); 0611 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(8, 0), MediaPlayList::DurationRole).toTime().msecsSinceStartOfDay(), 13); 0612 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(8, 0), MediaPlayList::AlbumIdRole).toULongLong(), 3); 0613 } 0614 0615 void MediaPlayListProxyModelTest::enqueueTrackByUrl() 0616 { 0617 MediaPlayList myPlayList; 0618 QAbstractItemModelTester testModel(&myPlayList); 0619 MediaPlayListProxyModel myPlayListProxyModel; 0620 myPlayListProxyModel.setPlayListModel(&myPlayList); 0621 QAbstractItemModelTester testProxyModel(&myPlayListProxyModel); 0622 DatabaseInterface myDatabaseContent; 0623 TracksListener myListener(&myDatabaseContent); 0624 0625 QSignalSpy rowsAboutToBeMovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsAboutToBeMoved); 0626 QSignalSpy rowsAboutToBeRemovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsAboutToBeRemoved); 0627 QSignalSpy rowsAboutToBeInsertedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsAboutToBeInserted); 0628 QSignalSpy rowsMovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsMoved); 0629 QSignalSpy rowsRemovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsRemoved); 0630 QSignalSpy rowsInsertedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsInserted); 0631 QSignalSpy persistentStateChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::persistentStateChanged); 0632 QSignalSpy dataChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::dataChanged); 0633 QSignalSpy newTrackByNameInListSpy(&myPlayList, &MediaPlayList::newTrackByNameInList); 0634 QSignalSpy newEntryInListSpy(&myPlayList, &MediaPlayList::newEntryInList); 0635 QSignalSpy newUrlInListSpy(&myPlayList, &MediaPlayList::newUrlInList); 0636 0637 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); 0638 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 0639 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 0); 0640 QCOMPARE(rowsRemovedSpy.count(), 0); 0641 QCOMPARE(rowsMovedSpy.count(), 0); 0642 QCOMPARE(rowsInsertedSpy.count(), 0); 0643 QCOMPARE(persistentStateChangedSpy.count(), 0); 0644 QCOMPARE(dataChangedSpy.count(), 0); 0645 QCOMPARE(newTrackByNameInListSpy.count(), 0); 0646 QCOMPARE(newEntryInListSpy.count(), 0); 0647 QCOMPARE(newUrlInListSpy.count(), 0); 0648 0649 myDatabaseContent.init(QStringLiteral("testDbDirectContent")); 0650 0651 connect(&myListener, &TracksListener::trackHasChanged, 0652 &myPlayList, &MediaPlayList::trackChanged, 0653 Qt::QueuedConnection); 0654 connect(&myListener, &TracksListener::tracksListAdded, 0655 &myPlayList, &MediaPlayList::tracksListAdded, 0656 Qt::QueuedConnection); 0657 connect(&myPlayList, &MediaPlayList::newEntryInList, 0658 &myListener, &TracksListener::newEntryInList, 0659 Qt::QueuedConnection); 0660 connect(&myPlayList, &MediaPlayList::newUrlInList, 0661 &myListener, &TracksListener::newUrlInList, 0662 Qt::QueuedConnection); 0663 connect(&myPlayList, &MediaPlayList::newTrackByNameInList, 0664 &myListener, &TracksListener::trackByNameInList, 0665 Qt::QueuedConnection); 0666 connect(&myDatabaseContent, &DatabaseInterface::tracksAdded, 0667 &myListener, &TracksListener::tracksAdded); 0668 0669 myDatabaseContent.insertTracksList(mNewTracks, mNewCovers); 0670 0671 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); 0672 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 0673 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 0); 0674 QCOMPARE(rowsRemovedSpy.count(), 0); 0675 QCOMPARE(rowsMovedSpy.count(), 0); 0676 QCOMPARE(rowsInsertedSpy.count(), 0); 0677 QCOMPARE(persistentStateChangedSpy.count(), 0); 0678 QCOMPARE(dataChangedSpy.count(), 0); 0679 QCOMPARE(newTrackByNameInListSpy.count(), 0); 0680 QCOMPARE(newEntryInListSpy.count(), 0); 0681 QCOMPARE(newUrlInListSpy.count(), 0); 0682 0683 auto newTrackID = myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track6"), QStringLiteral("artist1 and artist2"), QStringLiteral("album2"), 6, 1); 0684 auto trackData = myDatabaseContent.trackDataFromDatabaseId(newTrackID); 0685 myPlayListProxyModel.enqueue({{DataTypes::ElementTypeRole, ElisaUtils::Track}, 0686 {DataTypes::ResourceRole, trackData.resourceURI()}}, {}, {}, {}); 0687 0688 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); 0689 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 0690 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 1); 0691 QCOMPARE(rowsRemovedSpy.count(), 0); 0692 QCOMPARE(rowsMovedSpy.count(), 0); 0693 QCOMPARE(rowsInsertedSpy.count(), 1); 0694 QCOMPARE(persistentStateChangedSpy.count(), 1); 0695 QCOMPARE(dataChangedSpy.count(), 0); 0696 QCOMPARE(newTrackByNameInListSpy.count(), 0); 0697 QCOMPARE(newEntryInListSpy.count(), 0); 0698 QCOMPARE(newUrlInListSpy.count(), 1); 0699 0700 QCOMPARE(dataChangedSpy.wait(), true); 0701 0702 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); 0703 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 0704 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 1); 0705 QCOMPARE(rowsRemovedSpy.count(), 0); 0706 QCOMPARE(rowsMovedSpy.count(), 0); 0707 QCOMPARE(rowsInsertedSpy.count(), 1); 0708 QCOMPARE(persistentStateChangedSpy.count(), 1); 0709 QCOMPARE(dataChangedSpy.count(), 1); 0710 QCOMPARE(newTrackByNameInListSpy.count(), 0); 0711 QCOMPARE(newEntryInListSpy.count(), 0); 0712 QCOMPARE(newUrlInListSpy.count(), 1); 0713 } 0714 0715 void MediaPlayListProxyModelTest::enqueueTracksByUrl() 0716 { 0717 MediaPlayList myPlayList; 0718 QAbstractItemModelTester testModel(&myPlayList); 0719 MediaPlayListProxyModel myPlayListProxyModel; 0720 myPlayListProxyModel.setPlayListModel(&myPlayList); 0721 QAbstractItemModelTester testProxyModel(&myPlayListProxyModel); 0722 DatabaseInterface myDatabaseContent; 0723 TracksListener myListener(&myDatabaseContent); 0724 0725 QSignalSpy rowsAboutToBeMovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsAboutToBeMoved); 0726 QSignalSpy rowsAboutToBeRemovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsAboutToBeRemoved); 0727 QSignalSpy rowsAboutToBeInsertedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsAboutToBeInserted); 0728 QSignalSpy rowsMovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsMoved); 0729 QSignalSpy rowsRemovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsRemoved); 0730 QSignalSpy rowsInsertedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsInserted); 0731 QSignalSpy persistentStateChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::persistentStateChanged); 0732 QSignalSpy dataChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::dataChanged); 0733 QSignalSpy newTrackByNameInListSpy(&myPlayList, &MediaPlayList::newTrackByNameInList); 0734 QSignalSpy newEntryInListSpy(&myPlayList, &MediaPlayList::newEntryInList); 0735 QSignalSpy newUrlInListSpy(&myPlayList, &MediaPlayList::newUrlInList); 0736 0737 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); 0738 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 0739 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 0); 0740 QCOMPARE(rowsRemovedSpy.count(), 0); 0741 QCOMPARE(rowsMovedSpy.count(), 0); 0742 QCOMPARE(rowsInsertedSpy.count(), 0); 0743 QCOMPARE(persistentStateChangedSpy.count(), 0); 0744 QCOMPARE(dataChangedSpy.count(), 0); 0745 QCOMPARE(newTrackByNameInListSpy.count(), 0); 0746 QCOMPARE(newEntryInListSpy.count(), 0); 0747 QCOMPARE(newUrlInListSpy.count(), 0); 0748 0749 myDatabaseContent.init(QStringLiteral("testDbDirectContent")); 0750 0751 connect(&myListener, &TracksListener::trackHasChanged, 0752 &myPlayList, &MediaPlayList::trackChanged, 0753 Qt::QueuedConnection); 0754 connect(&myListener, &TracksListener::tracksListAdded, 0755 &myPlayList, &MediaPlayList::tracksListAdded, 0756 Qt::QueuedConnection); 0757 connect(&myPlayList, &MediaPlayList::newEntryInList, 0758 &myListener, &TracksListener::newEntryInList, 0759 Qt::QueuedConnection); 0760 connect(&myPlayList, &MediaPlayList::newUrlInList, 0761 &myListener, &TracksListener::newUrlInList, 0762 Qt::QueuedConnection); 0763 connect(&myPlayList, &MediaPlayList::newTrackByNameInList, 0764 &myListener, &TracksListener::trackByNameInList, 0765 Qt::QueuedConnection); 0766 connect(&myDatabaseContent, &DatabaseInterface::tracksAdded, 0767 &myListener, &TracksListener::tracksAdded); 0768 0769 myDatabaseContent.insertTracksList(mNewTracks, mNewCovers); 0770 0771 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); 0772 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 0773 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 0); 0774 QCOMPARE(rowsRemovedSpy.count(), 0); 0775 QCOMPARE(rowsMovedSpy.count(), 0); 0776 QCOMPARE(rowsInsertedSpy.count(), 0); 0777 QCOMPARE(persistentStateChangedSpy.count(), 0); 0778 QCOMPARE(dataChangedSpy.count(), 0); 0779 QCOMPARE(newTrackByNameInListSpy.count(), 0); 0780 QCOMPARE(newEntryInListSpy.count(), 0); 0781 QCOMPARE(newUrlInListSpy.count(), 0); 0782 0783 auto firstNewTrackID = myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track6"), QStringLiteral("artist1 and artist2"), QStringLiteral("album2"), 6, 1); 0784 auto firstTrackData = myDatabaseContent.trackDataFromDatabaseId(firstNewTrackID); 0785 auto secondNewTrackID = myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track1"), QStringLiteral("artist1"), QStringLiteral("album1"), 1, 1); 0786 auto secondTrackData = myDatabaseContent.trackDataFromDatabaseId(secondNewTrackID); 0787 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track}, 0788 {DataTypes::ResourceRole, firstTrackData.resourceURI()}}, {}, {}}, 0789 {{{DataTypes::ElementTypeRole, ElisaUtils::Track}, 0790 {DataTypes::ResourceRole, secondTrackData.resourceURI()}}, {}, {}}}, {}, {}); 0791 0792 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); 0793 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 0794 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 1); 0795 QCOMPARE(rowsRemovedSpy.count(), 0); 0796 QCOMPARE(rowsMovedSpy.count(), 0); 0797 QCOMPARE(rowsInsertedSpy.count(), 1); 0798 QCOMPARE(persistentStateChangedSpy.count(), 1); 0799 QCOMPARE(dataChangedSpy.count(), 0); 0800 QCOMPARE(newTrackByNameInListSpy.count(), 0); 0801 QCOMPARE(newEntryInListSpy.count(), 0); 0802 QCOMPARE(newUrlInListSpy.count(), 2); 0803 0804 QCOMPARE(dataChangedSpy.wait(), true); 0805 0806 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); 0807 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 0808 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 1); 0809 QCOMPARE(rowsRemovedSpy.count(), 0); 0810 QCOMPARE(rowsMovedSpy.count(), 0); 0811 QCOMPARE(rowsInsertedSpy.count(), 1); 0812 QCOMPARE(persistentStateChangedSpy.count(), 1); 0813 QCOMPARE(dataChangedSpy.count(), 2); 0814 QCOMPARE(newTrackByNameInListSpy.count(), 0); 0815 QCOMPARE(newEntryInListSpy.count(), 0); 0816 QCOMPARE(newUrlInListSpy.count(), 2); 0817 } 0818 0819 void MediaPlayListProxyModelTest::enqueueReplaceAndPlay() 0820 { 0821 MediaPlayList myPlayList; 0822 QAbstractItemModelTester testModel(&myPlayList); 0823 MediaPlayListProxyModel myPlayListProxyModel; 0824 myPlayListProxyModel.setPlayListModel(&myPlayList); 0825 QAbstractItemModelTester testProxyModel(&myPlayListProxyModel); 0826 DatabaseInterface myDatabaseContent; 0827 TracksListener myListener(&myDatabaseContent); 0828 0829 QSignalSpy rowsAboutToBeMovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsAboutToBeMoved); 0830 QSignalSpy rowsAboutToBeRemovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsAboutToBeRemoved); 0831 QSignalSpy rowsAboutToBeInsertedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsAboutToBeInserted); 0832 QSignalSpy rowsMovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsMoved); 0833 QSignalSpy rowsRemovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsRemoved); 0834 QSignalSpy rowsInsertedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsInserted); 0835 QSignalSpy persistentStateChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::persistentStateChanged); 0836 QSignalSpy dataChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::dataChanged); 0837 QSignalSpy newTrackByNameInListSpy(&myPlayList, &MediaPlayList::newTrackByNameInList); 0838 QSignalSpy newEntryInListSpy(&myPlayList, &MediaPlayList::newEntryInList); 0839 QSignalSpy newUrlInListSpy(&myPlayList, &MediaPlayList::newUrlInList); 0840 0841 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); 0842 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 0843 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 0); 0844 QCOMPARE(rowsRemovedSpy.count(), 0); 0845 QCOMPARE(rowsMovedSpy.count(), 0); 0846 QCOMPARE(rowsInsertedSpy.count(), 0); 0847 QCOMPARE(persistentStateChangedSpy.count(), 0); 0848 QCOMPARE(dataChangedSpy.count(), 0); 0849 QCOMPARE(newTrackByNameInListSpy.count(), 0); 0850 QCOMPARE(newEntryInListSpy.count(), 0); 0851 0852 myDatabaseContent.init(QStringLiteral("testDbDirectContent")); 0853 0854 connect(&myListener, &TracksListener::trackHasChanged, 0855 &myPlayList, &MediaPlayList::trackChanged, 0856 Qt::QueuedConnection); 0857 connect(&myListener, &TracksListener::tracksListAdded, 0858 &myPlayList, &MediaPlayList::tracksListAdded, 0859 Qt::QueuedConnection); 0860 connect(&myPlayList, &MediaPlayList::newTrackByNameInList, 0861 &myListener, &TracksListener::trackByNameInList, 0862 Qt::QueuedConnection); 0863 connect(&myPlayList, &MediaPlayList::newEntryInList, 0864 &myListener, &TracksListener::newEntryInList, 0865 Qt::QueuedConnection); 0866 connect(&myPlayList, &MediaPlayList::newUrlInList, 0867 &myListener, &TracksListener::newUrlInList, 0868 Qt::QueuedConnection); 0869 connect(&myDatabaseContent, &DatabaseInterface::tracksAdded, 0870 &myListener, &TracksListener::tracksAdded); 0871 0872 myDatabaseContent.insertTracksList(mNewTracks, mNewCovers); 0873 0874 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); 0875 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 0876 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 0); 0877 QCOMPARE(rowsRemovedSpy.count(), 0); 0878 QCOMPARE(rowsMovedSpy.count(), 0); 0879 QCOMPARE(rowsInsertedSpy.count(), 0); 0880 QCOMPARE(persistentStateChangedSpy.count(), 0); 0881 QCOMPARE(dataChangedSpy.count(), 0); 0882 QCOMPARE(newTrackByNameInListSpy.count(), 0); 0883 QCOMPARE(newEntryInListSpy.count(), 0); 0884 0885 auto firstTrackID = myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track6"), QStringLiteral("artist1 and artist2"), 0886 QStringLiteral("album2"), 6, 1); 0887 myPlayListProxyModel.enqueue({{{{DataTypes::DatabaseIdRole, firstTrackID},{DataTypes::ElementTypeRole, ElisaUtils::Track}}, {}, {}}}, {}, {}); 0888 0889 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); 0890 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 0891 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 1); 0892 QCOMPARE(rowsRemovedSpy.count(), 0); 0893 QCOMPARE(rowsMovedSpy.count(), 0); 0894 QCOMPARE(rowsInsertedSpy.count(), 1); 0895 QCOMPARE(persistentStateChangedSpy.count(), 1); 0896 QCOMPARE(dataChangedSpy.count(), 0); 0897 QCOMPARE(newTrackByNameInListSpy.count(), 0); 0898 QCOMPARE(newEntryInListSpy.count(), 1); 0899 0900 QCOMPARE(dataChangedSpy.wait(), true); 0901 0902 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); 0903 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 0904 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 1); 0905 QCOMPARE(rowsRemovedSpy.count(), 0); 0906 QCOMPARE(rowsMovedSpy.count(), 0); 0907 QCOMPARE(rowsInsertedSpy.count(), 1); 0908 QCOMPARE(persistentStateChangedSpy.count(), 1); 0909 QCOMPARE(dataChangedSpy.count(), 1); 0910 QCOMPARE(newTrackByNameInListSpy.count(), 0); 0911 QCOMPARE(newEntryInListSpy.count(), 1); 0912 0913 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::TitleRole).toString(), QStringLiteral("track6")); 0914 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::AlbumRole).toString(), QStringLiteral("album2")); 0915 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ArtistRole).toString(), QStringLiteral("artist1 and artist2")); 0916 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::TrackNumberRole).toInt(), 6); 0917 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::DiscNumberRole).toInt(), 1); 0918 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::DurationRole).toTime().msecsSinceStartOfDay(), 10); 0919 0920 auto secondTrackId = myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track1"), QStringLiteral("artist1"), QStringLiteral("album1"), 1, 1); 0921 myPlayListProxyModel.enqueue({{{{DataTypes::DatabaseIdRole, secondTrackId}, {DataTypes::ElementTypeRole, ElisaUtils::Track}}, {}, {}}}, {}, {}); 0922 0923 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); 0924 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 0925 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 2); 0926 QCOMPARE(rowsRemovedSpy.count(), 0); 0927 QCOMPARE(rowsMovedSpy.count(), 0); 0928 QCOMPARE(rowsInsertedSpy.count(), 2); 0929 QCOMPARE(persistentStateChangedSpy.count(), 2); 0930 QCOMPARE(dataChangedSpy.count(), 1); 0931 QCOMPARE(newTrackByNameInListSpy.count(), 0); 0932 QCOMPARE(newEntryInListSpy.count(), 2); 0933 0934 QCOMPARE(dataChangedSpy.wait(), true); 0935 0936 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); 0937 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 0938 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 2); 0939 QCOMPARE(rowsRemovedSpy.count(), 0); 0940 QCOMPARE(rowsMovedSpy.count(), 0); 0941 QCOMPARE(rowsInsertedSpy.count(), 2); 0942 QCOMPARE(persistentStateChangedSpy.count(), 2); 0943 QCOMPARE(dataChangedSpy.count(), 2); 0944 QCOMPARE(newTrackByNameInListSpy.count(), 0); 0945 QCOMPARE(newEntryInListSpy.count(), 2); 0946 0947 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::TitleRole).toString(), QStringLiteral("track1")); 0948 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::AlbumRole).toString(), QStringLiteral("album1")); 0949 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::ArtistRole).toString(), QStringLiteral("artist1")); 0950 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::TrackNumberRole).toInt(), 1); 0951 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::DiscNumberRole).toInt(), 1); 0952 0953 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Album}, 0954 {DataTypes::DatabaseIdRole, myDatabaseContent.albumIdFromTitleAndArtist(QStringLiteral("album1"), QStringLiteral("Various Artists"), QStringLiteral("/"))}}, 0955 QStringLiteral("album1"), {}}}, 0956 ElisaUtils::ReplacePlayList, 0957 ElisaUtils::TriggerPlay); 0958 0959 QVERIFY(rowsAboutToBeInsertedSpy.wait()); 0960 0961 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 2); 0962 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 0963 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 4); 0964 QCOMPARE(rowsRemovedSpy.count(), 2); 0965 QCOMPARE(rowsMovedSpy.count(), 0); 0966 QCOMPARE(rowsInsertedSpy.count(), 4); 0967 QCOMPARE(persistentStateChangedSpy.count(), 6); 0968 QCOMPARE(dataChangedSpy.count(), 2); 0969 QCOMPARE(newTrackByNameInListSpy.count(), 0); 0970 QCOMPARE(newEntryInListSpy.count(), 3); 0971 0972 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::TitleRole).toString(), QStringLiteral("track1")); 0973 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::AlbumRole).toString(), QStringLiteral("album1")); 0974 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ArtistRole).toString(), QStringLiteral("artist1")); 0975 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::TrackNumberRole).toInt(), 1); 0976 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::DiscNumberRole).toInt(), 1); 0977 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::DurationRole).toTime().msecsSinceStartOfDay(), 1); 0978 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::TitleRole).toString(), QStringLiteral("track2")); 0979 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::AlbumRole).toString(), QStringLiteral("album1")); 0980 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::ArtistRole).toString(), QStringLiteral("artist2")); 0981 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::TrackNumberRole).toInt(), 2); 0982 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::DiscNumberRole).toInt(), 2); 0983 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::DurationRole).toTime().msecsSinceStartOfDay(), 2); 0984 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::TitleRole).toString(), QStringLiteral("track3")); 0985 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::AlbumRole).toString(), QStringLiteral("album1")); 0986 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::ArtistRole).toString(), QStringLiteral("artist3")); 0987 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::TrackNumberRole).toInt(), 3); 0988 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::DiscNumberRole).toInt(), 3); 0989 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::DurationRole).toTime().msecsSinceStartOfDay(), 3); 0990 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(3, 0), MediaPlayList::TitleRole).toString(), QStringLiteral("track4")); 0991 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(3, 0), MediaPlayList::AlbumRole).toString(), QStringLiteral("album1")); 0992 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(3, 0), MediaPlayList::ArtistRole).toString(), QStringLiteral("artist4")); 0993 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(3, 0), MediaPlayList::TrackNumberRole).toInt(), 4); 0994 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(3, 0), MediaPlayList::DiscNumberRole).toInt(), 4); 0995 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(3, 0), MediaPlayList::DurationRole).toTime().msecsSinceStartOfDay(), 4); 0996 } 0997 0998 void MediaPlayListProxyModelTest::removeFirstTrackOfAlbum() 0999 { 1000 MediaPlayList myPlayList; 1001 QAbstractItemModelTester testModel(&myPlayList); 1002 MediaPlayListProxyModel myPlayListProxyModel; 1003 myPlayListProxyModel.setPlayListModel(&myPlayList); 1004 QAbstractItemModelTester testProxyModel(&myPlayListProxyModel); 1005 DatabaseInterface myDatabaseContent; 1006 TracksListener myListener(&myDatabaseContent); 1007 1008 QSignalSpy rowsAboutToBeMovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsAboutToBeMoved); 1009 QSignalSpy rowsAboutToBeRemovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsAboutToBeRemoved); 1010 QSignalSpy rowsAboutToBeInsertedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsAboutToBeInserted); 1011 QSignalSpy rowsMovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsMoved); 1012 QSignalSpy rowsRemovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsRemoved); 1013 QSignalSpy rowsInsertedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsInserted); 1014 QSignalSpy persistentStateChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::persistentStateChanged); 1015 QSignalSpy dataChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::dataChanged); 1016 QSignalSpy newTrackByNameInListSpy(&myPlayList, &MediaPlayList::newTrackByNameInList); 1017 QSignalSpy newEntryInListSpy(&myPlayList, &MediaPlayList::newEntryInList); 1018 QSignalSpy newUrlInListSpy(&myPlayList, &MediaPlayList::newUrlInList); 1019 1020 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); 1021 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 1022 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 0); 1023 QCOMPARE(rowsRemovedSpy.count(), 0); 1024 QCOMPARE(rowsMovedSpy.count(), 0); 1025 QCOMPARE(rowsInsertedSpy.count(), 0); 1026 QCOMPARE(persistentStateChangedSpy.count(), 0); 1027 QCOMPARE(dataChangedSpy.count(), 0); 1028 QCOMPARE(newTrackByNameInListSpy.count(), 0); 1029 QCOMPARE(newEntryInListSpy.count(), 0); 1030 1031 myDatabaseContent.init(QStringLiteral("testDbDirectContent")); 1032 1033 connect(&myListener, &TracksListener::trackHasChanged, 1034 &myPlayList, &MediaPlayList::trackChanged, 1035 Qt::QueuedConnection); 1036 connect(&myListener, &TracksListener::tracksListAdded, 1037 &myPlayList, &MediaPlayList::tracksListAdded, 1038 Qt::QueuedConnection); 1039 connect(&myPlayList, &MediaPlayList::newTrackByNameInList, 1040 &myListener, &TracksListener::trackByNameInList, 1041 Qt::QueuedConnection); 1042 connect(&myPlayList, &MediaPlayList::newEntryInList, 1043 &myListener, &TracksListener::newEntryInList, 1044 Qt::QueuedConnection); 1045 connect(&myPlayList, &MediaPlayList::newUrlInList, 1046 &myListener, &TracksListener::newUrlInList, 1047 Qt::QueuedConnection); 1048 connect(&myDatabaseContent, &DatabaseInterface::tracksAdded, 1049 &myListener, &TracksListener::tracksAdded); 1050 1051 myDatabaseContent.insertTracksList(mNewTracks, mNewCovers); 1052 1053 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); 1054 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 1055 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 0); 1056 QCOMPARE(rowsRemovedSpy.count(), 0); 1057 QCOMPARE(rowsMovedSpy.count(), 0); 1058 QCOMPARE(rowsInsertedSpy.count(), 0); 1059 QCOMPARE(persistentStateChangedSpy.count(), 0); 1060 QCOMPARE(dataChangedSpy.count(), 0); 1061 QCOMPARE(newTrackByNameInListSpy.count(), 0); 1062 QCOMPARE(newEntryInListSpy.count(), 0); 1063 1064 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Album}, 1065 {DataTypes::DatabaseIdRole, myDatabaseContent.albumIdFromTitleAndArtist(QStringLiteral("album2"), QStringLiteral("artist1"), QStringLiteral("/"))}}, 1066 QStringLiteral("album2"), {}}}, {}, {}); 1067 1068 QVERIFY(rowsAboutToBeInsertedSpy.wait()); 1069 1070 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 1); 1071 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 1072 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 2); 1073 QCOMPARE(rowsRemovedSpy.count(), 1); 1074 QCOMPARE(rowsMovedSpy.count(), 0); 1075 QCOMPARE(rowsInsertedSpy.count(), 2); 1076 QCOMPARE(persistentStateChangedSpy.count(), 3); 1077 QCOMPARE(dataChangedSpy.count(), 0); 1078 QCOMPARE(newTrackByNameInListSpy.count(), 0); 1079 QCOMPARE(newEntryInListSpy.count(), 1); 1080 1081 myPlayListProxyModel.removeRow(0); 1082 1083 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 2); 1084 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 1085 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 2); 1086 QCOMPARE(rowsRemovedSpy.count(), 2); 1087 QCOMPARE(rowsMovedSpy.count(), 0); 1088 QCOMPARE(rowsInsertedSpy.count(), 2); 1089 QCOMPARE(persistentStateChangedSpy.count(), 4); 1090 QCOMPARE(dataChangedSpy.count(), 0); 1091 QCOMPARE(newTrackByNameInListSpy.count(), 0); 1092 QCOMPARE(newEntryInListSpy.count(), 1); 1093 } 1094 1095 void MediaPlayListProxyModelTest::testSaveLoadPlayList() 1096 { 1097 MediaPlayList myPlayListSave; 1098 MediaPlayListProxyModel myPlayListProxyModelSave; 1099 myPlayListProxyModelSave.setPlayListModel(&myPlayListSave); 1100 QAbstractItemModelTester testModelSave(&myPlayListProxyModelSave); 1101 DatabaseInterface myDatabaseContent; 1102 TracksListener myListenerSave(&myDatabaseContent); 1103 MediaPlayList myPlayListRestore; 1104 MediaPlayListProxyModel myPlayListProxyModelRestore; 1105 myPlayListProxyModelRestore.setPlayListModel(&myPlayListRestore); 1106 QAbstractItemModelTester testModelRestore(&myPlayListProxyModelRestore); 1107 TracksListener myListenerRestore(&myDatabaseContent); 1108 1109 QSignalSpy currentTrackChangedSaveSpy(&myPlayListProxyModelSave, &MediaPlayListProxyModel::currentTrackChanged); 1110 QSignalSpy shufflePlayListChangedSaveSpy(&myPlayListProxyModelSave, &MediaPlayListProxyModel::shufflePlayListChanged); 1111 QSignalSpy repeatModeChangedSaveSpy(&myPlayListProxyModelSave, &MediaPlayListProxyModel::repeatModeChanged); 1112 QSignalSpy playListFinishedSaveSpy(&myPlayListProxyModelSave, &MediaPlayListProxyModel::playListFinished); 1113 QSignalSpy playListLoadedSaveSpy(&myPlayListProxyModelSave, &MediaPlayListProxyModel::playListLoaded); 1114 QSignalSpy playListLoadFailedSaveSpy(&myPlayListProxyModelSave, &MediaPlayListProxyModel::playListLoadFailed); 1115 QSignalSpy dataChangedSaveSpy(&myPlayListProxyModelSave, &MediaPlayListProxyModel::dataChanged); 1116 QSignalSpy currentTrackChangedRestoreSpy(&myPlayListProxyModelRestore, &MediaPlayListProxyModel::currentTrackChanged); 1117 QSignalSpy shufflePlayListChangedRestoreSpy(&myPlayListProxyModelRestore, &MediaPlayListProxyModel::shufflePlayListChanged); 1118 QSignalSpy repeatModeChangedRestoreSpy(&myPlayListProxyModelRestore, &MediaPlayListProxyModel::repeatModeChanged); 1119 QSignalSpy playListFinishedRestoreSpy(&myPlayListProxyModelRestore, &MediaPlayListProxyModel::playListFinished); 1120 QSignalSpy playListLoadedRestoreSpy(&myPlayListProxyModelRestore, &MediaPlayListProxyModel::playListLoaded); 1121 QSignalSpy playListLoadFailedRestoreSpy(&myPlayListProxyModelRestore, &MediaPlayListProxyModel::playListLoadFailed); 1122 1123 myDatabaseContent.init(QStringLiteral("testDbDirectContent")); 1124 1125 connect(&myListenerSave, &TracksListener::trackHasChanged, 1126 &myPlayListSave, &MediaPlayList::trackChanged, 1127 Qt::QueuedConnection); 1128 connect(&myListenerSave, &TracksListener::tracksListAdded, 1129 &myPlayListSave, &MediaPlayList::tracksListAdded, 1130 Qt::QueuedConnection); 1131 connect(&myPlayListSave, &MediaPlayList::newTrackByNameInList, 1132 &myListenerSave, &TracksListener::trackByNameInList, 1133 Qt::QueuedConnection); 1134 connect(&myPlayListSave, &MediaPlayList::newEntryInList, 1135 &myListenerSave, &TracksListener::newEntryInList, 1136 Qt::QueuedConnection); 1137 connect(&myPlayListSave, &MediaPlayList::newUrlInList, 1138 &myListenerSave, &TracksListener::newUrlInList, 1139 Qt::QueuedConnection); 1140 connect(&myDatabaseContent, &DatabaseInterface::tracksAdded, 1141 &myListenerSave, &TracksListener::tracksAdded); 1142 connect(&myListenerRestore, &TracksListener::trackHasChanged, 1143 &myPlayListRestore, &MediaPlayList::trackChanged, 1144 Qt::QueuedConnection); 1145 connect(&myListenerRestore, &TracksListener::tracksListAdded, 1146 &myPlayListRestore, &MediaPlayList::tracksListAdded, 1147 Qt::QueuedConnection); 1148 connect(&myPlayListRestore, &MediaPlayList::newTrackByNameInList, 1149 &myListenerRestore, &TracksListener::trackByNameInList, 1150 Qt::QueuedConnection); 1151 connect(&myPlayListRestore, &MediaPlayList::newEntryInList, 1152 &myListenerRestore, &TracksListener::newEntryInList, 1153 Qt::QueuedConnection); 1154 connect(&myPlayListRestore, &MediaPlayList::newUrlInList, 1155 &myListenerRestore, &TracksListener::newUrlInList, 1156 Qt::QueuedConnection); 1157 connect(&myDatabaseContent, &DatabaseInterface::tracksAdded, 1158 &myListenerRestore, &TracksListener::tracksAdded); 1159 1160 QCOMPARE(currentTrackChangedSaveSpy.count(), 0); 1161 QCOMPARE(shufflePlayListChangedSaveSpy.count(), 0); 1162 QCOMPARE(repeatModeChangedSaveSpy.count(), 0); 1163 QCOMPARE(playListFinishedSaveSpy.count(), 0); 1164 QCOMPARE(playListLoadedSaveSpy.count(), 0); 1165 QCOMPARE(playListLoadFailedSaveSpy.count(), 0); 1166 QCOMPARE(currentTrackChangedRestoreSpy.count(), 0); 1167 QCOMPARE(shufflePlayListChangedRestoreSpy.count(), 0); 1168 QCOMPARE(repeatModeChangedRestoreSpy.count(), 0); 1169 QCOMPARE(playListFinishedRestoreSpy.count(), 0); 1170 QCOMPARE(playListLoadedRestoreSpy.count(), 0); 1171 QCOMPARE(playListLoadFailedRestoreSpy.count(), 0); 1172 1173 myDatabaseContent.insertTracksList(mNewTracks, mNewCovers); 1174 1175 QCOMPARE(currentTrackChangedSaveSpy.count(), 0); 1176 QCOMPARE(shufflePlayListChangedSaveSpy.count(), 0); 1177 QCOMPARE(repeatModeChangedSaveSpy.count(), 0); 1178 QCOMPARE(playListFinishedSaveSpy.count(), 0); 1179 QCOMPARE(playListLoadedSaveSpy.count(), 0); 1180 QCOMPARE(playListLoadFailedSaveSpy.count(), 0); 1181 QCOMPARE(currentTrackChangedRestoreSpy.count(), 0); 1182 QCOMPARE(shufflePlayListChangedRestoreSpy.count(), 0); 1183 QCOMPARE(repeatModeChangedRestoreSpy.count(), 0); 1184 QCOMPARE(playListFinishedRestoreSpy.count(), 0); 1185 QCOMPARE(playListLoadedRestoreSpy.count(), 0); 1186 QCOMPARE(playListLoadFailedRestoreSpy.count(), 0); 1187 1188 myPlayListProxyModelSave.enqueue( 1189 {{{{DataTypes::ElementTypeRole, ElisaUtils::Track}, 1190 {DataTypes::ResourceRole, QUrl::fromLocalFile(QStringLiteral(MEDIAPLAYLIST_TESTS_SAMPLE_FILES_PATH) + QStringLiteral("/test.ogg"))}}, 1191 {}, 1192 {}}, 1193 {{{DataTypes::ElementTypeRole, ElisaUtils::Track}, 1194 {DataTypes::ResourceRole, QUrl::fromLocalFile(QStringLiteral(MEDIAPLAYLIST_TESTS_SAMPLE_FILES_PATH) + QStringLiteral("/test2.ogg"))}}, 1195 {}, 1196 {}}}, 1197 {}, 1198 {}); 1199 1200 QVERIFY(dataChangedSaveSpy.wait()); 1201 1202 QCOMPARE(currentTrackChangedSaveSpy.count(), 1); 1203 QCOMPARE(shufflePlayListChangedSaveSpy.count(), 0); 1204 QCOMPARE(repeatModeChangedSaveSpy.count(), 0); 1205 QCOMPARE(playListFinishedSaveSpy.count(), 0); 1206 QCOMPARE(playListLoadedSaveSpy.count(), 0); 1207 QCOMPARE(playListLoadFailedSaveSpy.count(), 0); 1208 QCOMPARE(currentTrackChangedRestoreSpy.count(), 0); 1209 QCOMPARE(shufflePlayListChangedRestoreSpy.count(), 0); 1210 QCOMPARE(repeatModeChangedRestoreSpy.count(), 0); 1211 QCOMPARE(playListFinishedRestoreSpy.count(), 0); 1212 QCOMPARE(playListLoadedRestoreSpy.count(), 0); 1213 QCOMPARE(playListLoadFailedRestoreSpy.count(), 0); 1214 1215 QCOMPARE(myPlayListProxyModelSave.currentTrack(), QPersistentModelIndex(myPlayListProxyModelSave.index(0, 0))); 1216 1217 QTemporaryFile playlistFile(QStringLiteral("./myPlaylistXXXXXX.m3u8")); 1218 playlistFile.open(); 1219 1220 QCOMPARE(myPlayListProxyModelSave.savePlayList(QUrl::fromLocalFile(playlistFile.fileName())), true); 1221 1222 QCOMPARE(currentTrackChangedSaveSpy.count(), 1); 1223 QCOMPARE(shufflePlayListChangedSaveSpy.count(), 0); 1224 QCOMPARE(repeatModeChangedSaveSpy.count(), 0); 1225 QCOMPARE(playListFinishedSaveSpy.count(), 0); 1226 QCOMPARE(playListLoadedSaveSpy.count(), 0); 1227 QCOMPARE(playListLoadFailedSaveSpy.count(), 0); 1228 QCOMPARE(currentTrackChangedRestoreSpy.count(), 0); 1229 QCOMPARE(shufflePlayListChangedRestoreSpy.count(), 0); 1230 QCOMPARE(repeatModeChangedRestoreSpy.count(), 0); 1231 QCOMPARE(playListFinishedRestoreSpy.count(), 0); 1232 QCOMPARE(playListLoadedRestoreSpy.count(), 0); 1233 QCOMPARE(playListLoadFailedRestoreSpy.count(), 0); 1234 1235 myPlayListProxyModelRestore.loadPlayList(QUrl::fromLocalFile(playlistFile.fileName())); 1236 1237 QCOMPARE(currentTrackChangedSaveSpy.count(), 1); 1238 QCOMPARE(shufflePlayListChangedSaveSpy.count(), 0); 1239 QCOMPARE(repeatModeChangedSaveSpy.count(), 0); 1240 QCOMPARE(playListFinishedSaveSpy.count(), 0); 1241 QCOMPARE(playListLoadedSaveSpy.count(), 0); 1242 QCOMPARE(playListLoadFailedSaveSpy.count(), 0); 1243 QCOMPARE(currentTrackChangedRestoreSpy.count(), 0); 1244 QCOMPARE(shufflePlayListChangedRestoreSpy.count(), 0); 1245 QCOMPARE(repeatModeChangedRestoreSpy.count(), 0); 1246 QCOMPARE(playListFinishedRestoreSpy.count(), 0); 1247 QCOMPARE(playListLoadedRestoreSpy.count(), 1); 1248 QCOMPARE(playListLoadFailedRestoreSpy.count(), 0); 1249 1250 QCOMPARE(currentTrackChangedRestoreSpy.wait(), true); 1251 1252 QCOMPARE(currentTrackChangedSaveSpy.count(), 1); 1253 QCOMPARE(shufflePlayListChangedSaveSpy.count(), 0); 1254 QCOMPARE(repeatModeChangedSaveSpy.count(), 0); 1255 QCOMPARE(playListFinishedSaveSpy.count(), 0); 1256 QCOMPARE(playListLoadedSaveSpy.count(), 0); 1257 QCOMPARE(playListLoadFailedSaveSpy.count(), 0); 1258 QCOMPARE(currentTrackChangedRestoreSpy.count(), 1); 1259 QCOMPARE(shufflePlayListChangedRestoreSpy.count(), 0); 1260 QCOMPARE(repeatModeChangedRestoreSpy.count(), 0); 1261 QCOMPARE(playListFinishedRestoreSpy.count(), 0); 1262 QCOMPARE(playListLoadedRestoreSpy.count(), 1); 1263 QCOMPARE(playListLoadFailedRestoreSpy.count(), 0); 1264 1265 QCOMPARE(myPlayListProxyModelRestore.currentTrack(), QPersistentModelIndex(myPlayListProxyModelRestore.index(0, 0))); 1266 } 1267 1268 void MediaPlayListProxyModelTest::testSavePersistentState() 1269 { 1270 MediaPlayList myPlayListSave; 1271 QAbstractItemModelTester testModelSave(&myPlayListSave); 1272 MediaPlayListProxyModel myPlayListSaveProxyModel; 1273 myPlayListSaveProxyModel.setPlayListModel(&myPlayListSave); 1274 QAbstractItemModelTester testProxyModelSave(&myPlayListSaveProxyModel); 1275 DatabaseInterface myDatabaseContent; 1276 TracksListener myListenerSave(&myDatabaseContent); 1277 MediaPlayList myPlayListRead; 1278 QAbstractItemModelTester testModelRead(&myPlayListRead); 1279 MediaPlayListProxyModel myPlayListReadProxyModel; 1280 myPlayListReadProxyModel.setPlayListModel(&myPlayListRead); 1281 QAbstractItemModelTester testProxyModelRead(&myPlayListReadProxyModel); 1282 TracksListener myListenerRead(&myDatabaseContent); 1283 1284 QSignalSpy rowsAboutToBeMovedSpySave(&myPlayListSaveProxyModel, &MediaPlayListProxyModel::rowsAboutToBeMoved); 1285 QSignalSpy rowsAboutToBeRemovedSpySave(&myPlayListSaveProxyModel, &MediaPlayListProxyModel::rowsAboutToBeRemoved); 1286 QSignalSpy rowsAboutToBeInsertedSpySave(&myPlayListSaveProxyModel, &MediaPlayListProxyModel::rowsAboutToBeInserted); 1287 QSignalSpy rowsMovedSpySave(&myPlayListSaveProxyModel, &MediaPlayListProxyModel::rowsMoved); 1288 QSignalSpy rowsRemovedSpySave(&myPlayListSaveProxyModel, &MediaPlayListProxyModel::rowsRemoved); 1289 QSignalSpy rowsInsertedSpySave(&myPlayListSaveProxyModel, &MediaPlayListProxyModel::rowsInserted); 1290 QSignalSpy persistentStateChangedSpySave(&myPlayListSaveProxyModel, &MediaPlayListProxyModel::persistentStateChanged); 1291 QSignalSpy dataChangedSpySave(&myPlayListSaveProxyModel, &MediaPlayListProxyModel::dataChanged); 1292 QSignalSpy rowsAboutToBeMovedSpyRead(&myPlayListReadProxyModel, &MediaPlayListProxyModel::rowsAboutToBeMoved); 1293 QSignalSpy rowsAboutToBeRemovedSpyRead(&myPlayListReadProxyModel, &MediaPlayListProxyModel::rowsAboutToBeRemoved); 1294 QSignalSpy rowsAboutToBeInsertedSpyRead(&myPlayListReadProxyModel, &MediaPlayListProxyModel::rowsAboutToBeInserted); 1295 QSignalSpy rowsMovedSpyRead(&myPlayListReadProxyModel, &MediaPlayListProxyModel::rowsMoved); 1296 QSignalSpy rowsRemovedSpyRead(&myPlayListReadProxyModel, &MediaPlayListProxyModel::rowsRemoved); 1297 QSignalSpy rowsInsertedSpyRead(&myPlayListReadProxyModel, &MediaPlayListProxyModel::rowsInserted); 1298 QSignalSpy persistentStateChangedSpyRead(&myPlayListReadProxyModel, &MediaPlayListProxyModel::persistentStateChanged); 1299 QSignalSpy dataChangedSpyRead(&myPlayListReadProxyModel, &MediaPlayListProxyModel::dataChanged); 1300 1301 QCOMPARE(rowsAboutToBeRemovedSpySave.count(), 0); 1302 QCOMPARE(rowsAboutToBeMovedSpySave.count(), 0); 1303 QCOMPARE(rowsAboutToBeInsertedSpySave.count(), 0); 1304 QCOMPARE(rowsRemovedSpySave.count(), 0); 1305 QCOMPARE(rowsMovedSpySave.count(), 0); 1306 QCOMPARE(rowsInsertedSpySave.count(), 0); 1307 QCOMPARE(persistentStateChangedSpySave.count(), 0); 1308 QCOMPARE(dataChangedSpySave.count(), 0); 1309 QCOMPARE(rowsAboutToBeRemovedSpyRead.count(), 0); 1310 QCOMPARE(rowsAboutToBeMovedSpyRead.count(), 0); 1311 QCOMPARE(rowsAboutToBeInsertedSpyRead.count(), 0); 1312 QCOMPARE(rowsRemovedSpyRead.count(), 0); 1313 QCOMPARE(rowsMovedSpyRead.count(), 0); 1314 QCOMPARE(rowsInsertedSpyRead.count(), 0); 1315 QCOMPARE(persistentStateChangedSpyRead.count(), 0); 1316 QCOMPARE(dataChangedSpyRead.count(), 0); 1317 1318 myDatabaseContent.init(QStringLiteral("testDbDirectContent")); 1319 1320 connect(&myListenerSave, &TracksListener::trackHasChanged, 1321 &myPlayListSave, &MediaPlayList::trackChanged, 1322 Qt::QueuedConnection); 1323 connect(&myListenerSave, &TracksListener::tracksListAdded, 1324 &myPlayListSave, &MediaPlayList::tracksListAdded, 1325 Qt::QueuedConnection); 1326 connect(&myPlayListSave, &MediaPlayList::newTrackByNameInList, 1327 &myListenerSave, &TracksListener::trackByNameInList, 1328 Qt::QueuedConnection); 1329 connect(&myPlayListSave, &MediaPlayList::newEntryInList, 1330 &myListenerSave, &TracksListener::newEntryInList, 1331 Qt::QueuedConnection); 1332 connect(&myDatabaseContent, &DatabaseInterface::tracksAdded, 1333 &myListenerSave, &TracksListener::tracksAdded); 1334 connect(&myListenerRead, &TracksListener::trackHasChanged, 1335 &myPlayListRead, &MediaPlayList::trackChanged, 1336 Qt::QueuedConnection); 1337 connect(&myListenerRead, &TracksListener::tracksListAdded, 1338 &myPlayListRead, &MediaPlayList::tracksListAdded, 1339 Qt::QueuedConnection); 1340 connect(&myPlayListRead, &MediaPlayList::newTrackByNameInList, 1341 &myListenerRead, &TracksListener::trackByNameInList, 1342 Qt::QueuedConnection); 1343 connect(&myPlayListRead, &MediaPlayList::newEntryInList, 1344 &myListenerRead, &TracksListener::newEntryInList, 1345 Qt::QueuedConnection); 1346 connect(&myDatabaseContent, &DatabaseInterface::tracksAdded, 1347 &myListenerRead, &TracksListener::tracksAdded); 1348 1349 myDatabaseContent.insertTracksList(mNewTracks, mNewCovers); 1350 1351 QCOMPARE(rowsAboutToBeRemovedSpySave.count(), 0); 1352 QCOMPARE(rowsAboutToBeMovedSpySave.count(), 0); 1353 QCOMPARE(rowsAboutToBeInsertedSpySave.count(), 0); 1354 QCOMPARE(rowsRemovedSpySave.count(), 0); 1355 QCOMPARE(rowsMovedSpySave.count(), 0); 1356 QCOMPARE(rowsInsertedSpySave.count(), 0); 1357 QCOMPARE(persistentStateChangedSpySave.count(), 0); 1358 QCOMPARE(dataChangedSpySave.count(), 0); 1359 QCOMPARE(rowsAboutToBeRemovedSpyRead.count(), 0); 1360 QCOMPARE(rowsAboutToBeMovedSpyRead.count(), 0); 1361 QCOMPARE(rowsAboutToBeInsertedSpyRead.count(), 0); 1362 QCOMPARE(rowsRemovedSpyRead.count(), 0); 1363 QCOMPARE(rowsMovedSpyRead.count(), 0); 1364 QCOMPARE(rowsInsertedSpyRead.count(), 0); 1365 QCOMPARE(persistentStateChangedSpyRead.count(), 0); 1366 QCOMPARE(dataChangedSpyRead.count(), 0); 1367 1368 auto firstTrackId = myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track1"), QStringLiteral("artist2"), 1369 QStringLiteral("album3"), 1, 1); 1370 myPlayListSaveProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track}, 1371 {DataTypes::DatabaseIdRole, firstTrackId}}, {}, {}}}, {}, {}); 1372 1373 QCOMPARE(rowsAboutToBeRemovedSpySave.count(), 0); 1374 QCOMPARE(rowsAboutToBeMovedSpySave.count(), 0); 1375 QCOMPARE(rowsAboutToBeInsertedSpySave.count(), 1); 1376 QCOMPARE(rowsRemovedSpySave.count(), 0); 1377 QCOMPARE(rowsMovedSpySave.count(), 0); 1378 QCOMPARE(rowsInsertedSpySave.count(), 1); 1379 QCOMPARE(persistentStateChangedSpySave.count(), 1); 1380 QCOMPARE(dataChangedSpySave.count(), 0); 1381 QCOMPARE(rowsAboutToBeRemovedSpyRead.count(), 0); 1382 QCOMPARE(rowsAboutToBeMovedSpyRead.count(), 0); 1383 QCOMPARE(rowsAboutToBeInsertedSpyRead.count(), 0); 1384 QCOMPARE(rowsRemovedSpyRead.count(), 0); 1385 QCOMPARE(rowsMovedSpyRead.count(), 0); 1386 QCOMPARE(rowsInsertedSpyRead.count(), 0); 1387 QCOMPARE(persistentStateChangedSpyRead.count(), 0); 1388 QCOMPARE(dataChangedSpyRead.count(), 0); 1389 1390 QCOMPARE(dataChangedSpySave.wait(), true); 1391 1392 QCOMPARE(rowsAboutToBeRemovedSpySave.count(), 0); 1393 QCOMPARE(rowsAboutToBeMovedSpySave.count(), 0); 1394 QCOMPARE(rowsAboutToBeInsertedSpySave.count(), 1); 1395 QCOMPARE(rowsRemovedSpySave.count(), 0); 1396 QCOMPARE(rowsMovedSpySave.count(), 0); 1397 QCOMPARE(rowsInsertedSpySave.count(), 1); 1398 QCOMPARE(persistentStateChangedSpySave.count(), 1); 1399 QCOMPARE(dataChangedSpySave.count(), 1); 1400 QCOMPARE(rowsAboutToBeRemovedSpyRead.count(), 0); 1401 QCOMPARE(rowsAboutToBeMovedSpyRead.count(), 0); 1402 QCOMPARE(rowsAboutToBeInsertedSpyRead.count(), 0); 1403 QCOMPARE(rowsRemovedSpyRead.count(), 0); 1404 QCOMPARE(rowsMovedSpyRead.count(), 0); 1405 QCOMPARE(rowsInsertedSpyRead.count(), 0); 1406 QCOMPARE(persistentStateChangedSpyRead.count(), 0); 1407 QCOMPARE(dataChangedSpyRead.count(), 0); 1408 1409 auto secondTrackId = myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track1"), QStringLiteral("artist1"), 1410 QStringLiteral("album1"), 1, 1); 1411 myPlayListSaveProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track}, 1412 {DataTypes::DatabaseIdRole, secondTrackId}}, {}, {}}}, {}, {}); 1413 1414 QCOMPARE(rowsAboutToBeRemovedSpySave.count(), 0); 1415 QCOMPARE(rowsAboutToBeMovedSpySave.count(), 0); 1416 QCOMPARE(rowsAboutToBeInsertedSpySave.count(), 2); 1417 QCOMPARE(rowsRemovedSpySave.count(), 0); 1418 QCOMPARE(rowsMovedSpySave.count(), 0); 1419 QCOMPARE(rowsInsertedSpySave.count(), 2); 1420 QCOMPARE(persistentStateChangedSpySave.count(), 2); 1421 QCOMPARE(dataChangedSpySave.count(), 1); 1422 QCOMPARE(rowsAboutToBeRemovedSpyRead.count(), 0); 1423 QCOMPARE(rowsAboutToBeMovedSpyRead.count(), 0); 1424 QCOMPARE(rowsAboutToBeInsertedSpyRead.count(), 0); 1425 QCOMPARE(rowsRemovedSpyRead.count(), 0); 1426 QCOMPARE(rowsMovedSpyRead.count(), 0); 1427 QCOMPARE(rowsInsertedSpyRead.count(), 0); 1428 QCOMPARE(persistentStateChangedSpyRead.count(), 0); 1429 QCOMPARE(dataChangedSpyRead.count(), 0); 1430 1431 QCOMPARE(dataChangedSpySave.wait(), true); 1432 1433 QCOMPARE(rowsAboutToBeRemovedSpySave.count(), 0); 1434 QCOMPARE(rowsAboutToBeMovedSpySave.count(), 0); 1435 QCOMPARE(rowsAboutToBeInsertedSpySave.count(), 2); 1436 QCOMPARE(rowsRemovedSpySave.count(), 0); 1437 QCOMPARE(rowsMovedSpySave.count(), 0); 1438 QCOMPARE(rowsInsertedSpySave.count(), 2); 1439 QCOMPARE(persistentStateChangedSpySave.count(), 2); 1440 QCOMPARE(dataChangedSpySave.count(), 2); 1441 QCOMPARE(rowsAboutToBeRemovedSpyRead.count(), 0); 1442 QCOMPARE(rowsAboutToBeMovedSpyRead.count(), 0); 1443 QCOMPARE(rowsAboutToBeInsertedSpyRead.count(), 0); 1444 QCOMPARE(rowsRemovedSpyRead.count(), 0); 1445 QCOMPARE(rowsMovedSpyRead.count(), 0); 1446 QCOMPARE(rowsInsertedSpyRead.count(), 0); 1447 QCOMPARE(persistentStateChangedSpyRead.count(), 0); 1448 QCOMPARE(dataChangedSpyRead.count(), 0); 1449 1450 auto thirdTrackId = myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track2"), QStringLiteral("artist2"), 1451 QStringLiteral("album3"), 2, 1); 1452 myPlayListSaveProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track}, 1453 {DataTypes::DatabaseIdRole, thirdTrackId}}, {}, {}}}, {}, {}); 1454 1455 QCOMPARE(rowsAboutToBeRemovedSpySave.count(), 0); 1456 QCOMPARE(rowsAboutToBeMovedSpySave.count(), 0); 1457 QCOMPARE(rowsAboutToBeInsertedSpySave.count(), 3); 1458 QCOMPARE(rowsRemovedSpySave.count(), 0); 1459 QCOMPARE(rowsMovedSpySave.count(), 0); 1460 QCOMPARE(rowsInsertedSpySave.count(), 3); 1461 QCOMPARE(persistentStateChangedSpySave.count(), 3); 1462 QCOMPARE(dataChangedSpySave.count(), 2); 1463 QCOMPARE(rowsAboutToBeRemovedSpyRead.count(), 0); 1464 QCOMPARE(rowsAboutToBeMovedSpyRead.count(), 0); 1465 QCOMPARE(rowsAboutToBeInsertedSpyRead.count(), 0); 1466 QCOMPARE(rowsRemovedSpyRead.count(), 0); 1467 QCOMPARE(rowsMovedSpyRead.count(), 0); 1468 QCOMPARE(rowsInsertedSpyRead.count(), 0); 1469 QCOMPARE(persistentStateChangedSpyRead.count(), 0); 1470 QCOMPARE(dataChangedSpyRead.count(), 0); 1471 1472 QCOMPARE(dataChangedSpySave.wait(), true); 1473 1474 QCOMPARE(rowsAboutToBeRemovedSpySave.count(), 0); 1475 QCOMPARE(rowsAboutToBeMovedSpySave.count(), 0); 1476 QCOMPARE(rowsAboutToBeInsertedSpySave.count(), 3); 1477 QCOMPARE(rowsRemovedSpySave.count(), 0); 1478 QCOMPARE(rowsMovedSpySave.count(), 0); 1479 QCOMPARE(rowsInsertedSpySave.count(), 3); 1480 QCOMPARE(persistentStateChangedSpySave.count(), 3); 1481 QCOMPARE(dataChangedSpySave.count(), 3); 1482 QCOMPARE(rowsAboutToBeRemovedSpyRead.count(), 0); 1483 QCOMPARE(rowsAboutToBeMovedSpyRead.count(), 0); 1484 QCOMPARE(rowsAboutToBeInsertedSpyRead.count(), 0); 1485 QCOMPARE(rowsRemovedSpyRead.count(), 0); 1486 QCOMPARE(rowsMovedSpyRead.count(), 0); 1487 QCOMPARE(rowsInsertedSpyRead.count(), 0); 1488 QCOMPARE(persistentStateChangedSpyRead.count(), 0); 1489 QCOMPARE(dataChangedSpyRead.count(), 0); 1490 1491 QCOMPARE(myPlayListSaveProxyModel.data(myPlayListSaveProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::IsValidRole).toBool(), true); 1492 QCOMPARE(myPlayListSaveProxyModel.data(myPlayListSaveProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::TitleRole).toString(), QStringLiteral("track1")); 1493 QCOMPARE(myPlayListSaveProxyModel.data(myPlayListSaveProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::DurationRole).toTime().msecsSinceStartOfDay(), 11); 1494 QCOMPARE(myPlayListSaveProxyModel.data(myPlayListSaveProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::ArtistRole).toString(), QStringLiteral("artist2")); 1495 QCOMPARE(myPlayListSaveProxyModel.data(myPlayListSaveProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::AlbumArtistRole).toString(), QStringLiteral("artist2")); 1496 QCOMPARE(myPlayListSaveProxyModel.data(myPlayListSaveProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::AlbumRole).toString(), QStringLiteral("album3")); 1497 QCOMPARE(myPlayListSaveProxyModel.data(myPlayListSaveProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::TrackNumberRole).toInt(), 1); 1498 QCOMPARE(myPlayListSaveProxyModel.data(myPlayListSaveProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::DiscNumberRole).toInt(), 1); 1499 QCOMPARE(myPlayListSaveProxyModel.data(myPlayListSaveProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::ImageUrlRole).toUrl(), QUrl::fromLocalFile(QStringLiteral("album3"))); 1500 QCOMPARE(myPlayListSaveProxyModel.data(myPlayListSaveProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::ResourceRole).toUrl(), QUrl::fromUserInput(QStringLiteral("/$11"))); 1501 QCOMPARE(myPlayListSaveProxyModel.data(myPlayListSaveProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::IsPlayingRole).toBool(), false); 1502 QCOMPARE(myPlayListSaveProxyModel.data(myPlayListSaveProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::IsSingleDiscAlbumRole).toBool(), true); 1503 QCOMPARE(myPlayListSaveProxyModel.data(myPlayListSaveProxyModel.index(1, 0), MediaPlayList::ColumnsRoles::IsValidRole).toBool(), true); 1504 QCOMPARE(myPlayListSaveProxyModel.data(myPlayListSaveProxyModel.index(1, 0), MediaPlayList::ColumnsRoles::TitleRole).toString(), QStringLiteral("track1")); 1505 QCOMPARE(myPlayListSaveProxyModel.data(myPlayListSaveProxyModel.index(1, 0), MediaPlayList::ColumnsRoles::DurationRole).toTime().msecsSinceStartOfDay(), 1); 1506 QCOMPARE(myPlayListSaveProxyModel.data(myPlayListSaveProxyModel.index(1, 0), MediaPlayList::ColumnsRoles::ArtistRole).toString(), QStringLiteral("artist1")); 1507 QCOMPARE(myPlayListSaveProxyModel.data(myPlayListSaveProxyModel.index(1, 0), MediaPlayList::ColumnsRoles::AlbumArtistRole).toString(), QStringLiteral("Various Artists")); 1508 QCOMPARE(myPlayListSaveProxyModel.data(myPlayListSaveProxyModel.index(1, 0), MediaPlayList::ColumnsRoles::AlbumRole).toString(), QStringLiteral("album1")); 1509 QCOMPARE(myPlayListSaveProxyModel.data(myPlayListSaveProxyModel.index(1, 0), MediaPlayList::ColumnsRoles::TrackNumberRole).toInt(), 1); 1510 QCOMPARE(myPlayListSaveProxyModel.data(myPlayListSaveProxyModel.index(1, 0), MediaPlayList::ColumnsRoles::DiscNumberRole).toInt(), 1); 1511 QCOMPARE(myPlayListSaveProxyModel.data(myPlayListSaveProxyModel.index(1, 0), MediaPlayList::ColumnsRoles::ImageUrlRole).toUrl(), QUrl::fromLocalFile(QStringLiteral("album1"))); 1512 QCOMPARE(myPlayListSaveProxyModel.data(myPlayListSaveProxyModel.index(1, 0), MediaPlayList::ColumnsRoles::ResourceRole).toUrl(), QUrl::fromUserInput(QStringLiteral("/$1"))); 1513 QCOMPARE(myPlayListSaveProxyModel.data(myPlayListSaveProxyModel.index(1, 0), MediaPlayList::ColumnsRoles::IsPlayingRole).toBool(), false); 1514 QCOMPARE(myPlayListSaveProxyModel.data(myPlayListSaveProxyModel.index(1, 0), MediaPlayList::ColumnsRoles::IsSingleDiscAlbumRole).toBool(), false); 1515 QCOMPARE(myPlayListSaveProxyModel.data(myPlayListSaveProxyModel.index(2, 0), MediaPlayList::ColumnsRoles::IsValidRole).toBool(), true); 1516 QCOMPARE(myPlayListSaveProxyModel.data(myPlayListSaveProxyModel.index(2, 0), MediaPlayList::ColumnsRoles::TitleRole).toString(), QStringLiteral("track2")); 1517 QCOMPARE(myPlayListSaveProxyModel.data(myPlayListSaveProxyModel.index(2, 0), MediaPlayList::ColumnsRoles::DurationRole).toTime().msecsSinceStartOfDay(), 12); 1518 QCOMPARE(myPlayListSaveProxyModel.data(myPlayListSaveProxyModel.index(2, 0), MediaPlayList::ColumnsRoles::ArtistRole).toString(), QStringLiteral("artist2")); 1519 QCOMPARE(myPlayListSaveProxyModel.data(myPlayListSaveProxyModel.index(2, 0), MediaPlayList::ColumnsRoles::AlbumArtistRole).toString(), QStringLiteral("artist2")); 1520 QCOMPARE(myPlayListSaveProxyModel.data(myPlayListSaveProxyModel.index(2, 0), MediaPlayList::ColumnsRoles::AlbumRole).toString(), QStringLiteral("album3")); 1521 QCOMPARE(myPlayListSaveProxyModel.data(myPlayListSaveProxyModel.index(2, 0), MediaPlayList::ColumnsRoles::TrackNumberRole).toInt(), 2); 1522 QCOMPARE(myPlayListSaveProxyModel.data(myPlayListSaveProxyModel.index(2, 0), MediaPlayList::ColumnsRoles::DiscNumberRole).toInt(), 1); 1523 QCOMPARE(myPlayListSaveProxyModel.data(myPlayListSaveProxyModel.index(2, 0), MediaPlayList::ColumnsRoles::ImageUrlRole).toUrl(), QUrl::fromLocalFile(QStringLiteral("album3"))); 1524 QCOMPARE(myPlayListSaveProxyModel.data(myPlayListSaveProxyModel.index(2, 0), MediaPlayList::ColumnsRoles::ResourceRole).toUrl(), QUrl::fromUserInput(QStringLiteral("/$12"))); 1525 QCOMPARE(myPlayListSaveProxyModel.data(myPlayListSaveProxyModel.index(2, 0), MediaPlayList::ColumnsRoles::IsPlayingRole).toBool(), false); 1526 QCOMPARE(myPlayListSaveProxyModel.data(myPlayListSaveProxyModel.index(2, 0), MediaPlayList::ColumnsRoles::IsSingleDiscAlbumRole).toBool(), true); 1527 1528 myPlayListReadProxyModel.setPersistentState(myPlayListSaveProxyModel.persistentState()); 1529 1530 QCOMPARE(dataChangedSpyRead.wait(), true); 1531 1532 QCOMPARE(rowsAboutToBeRemovedSpySave.count(), 0); 1533 QCOMPARE(rowsAboutToBeMovedSpySave.count(), 0); 1534 QCOMPARE(rowsAboutToBeInsertedSpySave.count(), 3); 1535 QCOMPARE(rowsRemovedSpySave.count(), 0); 1536 QCOMPARE(rowsMovedSpySave.count(), 0); 1537 QCOMPARE(rowsInsertedSpySave.count(), 3); 1538 QCOMPARE(persistentStateChangedSpySave.count(), 3); 1539 QCOMPARE(dataChangedSpySave.count(), 3); 1540 QCOMPARE(rowsAboutToBeRemovedSpyRead.count(), 0); 1541 QCOMPARE(rowsAboutToBeMovedSpyRead.count(), 0); 1542 QCOMPARE(rowsAboutToBeInsertedSpyRead.count(), 1); 1543 QCOMPARE(rowsRemovedSpyRead.count(), 0); 1544 QCOMPARE(rowsMovedSpyRead.count(), 0); 1545 QCOMPARE(rowsInsertedSpyRead.count(), 1); 1546 QCOMPARE(persistentStateChangedSpyRead.count(), 2); 1547 QCOMPARE(dataChangedSpyRead.count(), 3); 1548 1549 QCOMPARE(myPlayListReadProxyModel.tracksCount(), 3); 1550 1551 QCOMPARE(myPlayListReadProxyModel.data(myPlayListReadProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::IsValidRole).toBool(), true); 1552 QCOMPARE(myPlayListReadProxyModel.data(myPlayListReadProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::TitleRole).toString(), QStringLiteral("track1")); 1553 QCOMPARE(myPlayListReadProxyModel.data(myPlayListReadProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::DurationRole).toTime().msecsSinceStartOfDay(), 11); 1554 QCOMPARE(myPlayListReadProxyModel.data(myPlayListReadProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::ArtistRole).toString(), QStringLiteral("artist2")); 1555 QCOMPARE(myPlayListReadProxyModel.data(myPlayListReadProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::AlbumArtistRole).toString(), QStringLiteral("artist2")); 1556 QCOMPARE(myPlayListReadProxyModel.data(myPlayListReadProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::AlbumRole).toString(), QStringLiteral("album3")); 1557 QCOMPARE(myPlayListReadProxyModel.data(myPlayListReadProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::TrackNumberRole).toInt(), 1); 1558 QCOMPARE(myPlayListReadProxyModel.data(myPlayListReadProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::DiscNumberRole).toInt(), 1); 1559 QCOMPARE(myPlayListReadProxyModel.data(myPlayListReadProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::ImageUrlRole).toUrl(), QUrl::fromLocalFile(QStringLiteral("album3"))); 1560 QCOMPARE(myPlayListReadProxyModel.data(myPlayListReadProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::ResourceRole).toUrl(), QUrl::fromUserInput(QStringLiteral("/$11"))); 1561 QCOMPARE(myPlayListReadProxyModel.data(myPlayListReadProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::IsPlayingRole).toBool(), false); 1562 QCOMPARE(myPlayListReadProxyModel.data(myPlayListReadProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::IsSingleDiscAlbumRole).toBool(), true); 1563 QCOMPARE(myPlayListReadProxyModel.data(myPlayListReadProxyModel.index(1, 0), MediaPlayList::ColumnsRoles::IsValidRole).toBool(), true); 1564 QCOMPARE(myPlayListReadProxyModel.data(myPlayListReadProxyModel.index(1, 0), MediaPlayList::ColumnsRoles::TitleRole).toString(), QStringLiteral("track1")); 1565 QCOMPARE(myPlayListReadProxyModel.data(myPlayListReadProxyModel.index(1, 0), MediaPlayList::ColumnsRoles::DurationRole).toTime().msecsSinceStartOfDay(), 1); 1566 QCOMPARE(myPlayListReadProxyModel.data(myPlayListReadProxyModel.index(1, 0), MediaPlayList::ColumnsRoles::ArtistRole).toString(), QStringLiteral("artist1")); 1567 QCOMPARE(myPlayListReadProxyModel.data(myPlayListReadProxyModel.index(1, 0), MediaPlayList::ColumnsRoles::AlbumArtistRole).toString(), QStringLiteral("Various Artists")); 1568 QCOMPARE(myPlayListReadProxyModel.data(myPlayListReadProxyModel.index(1, 0), MediaPlayList::ColumnsRoles::AlbumRole).toString(), QStringLiteral("album1")); 1569 QCOMPARE(myPlayListReadProxyModel.data(myPlayListReadProxyModel.index(1, 0), MediaPlayList::ColumnsRoles::TrackNumberRole).toInt(), 1); 1570 QCOMPARE(myPlayListReadProxyModel.data(myPlayListReadProxyModel.index(1, 0), MediaPlayList::ColumnsRoles::DiscNumberRole).toInt(), 1); 1571 QCOMPARE(myPlayListReadProxyModel.data(myPlayListReadProxyModel.index(1, 0), MediaPlayList::ColumnsRoles::ImageUrlRole).toUrl(), QUrl::fromLocalFile(QStringLiteral("album1"))); 1572 QCOMPARE(myPlayListReadProxyModel.data(myPlayListReadProxyModel.index(1, 0), MediaPlayList::ColumnsRoles::ResourceRole).toUrl(), QUrl::fromUserInput(QStringLiteral("/$1"))); 1573 QCOMPARE(myPlayListReadProxyModel.data(myPlayListReadProxyModel.index(1, 0), MediaPlayList::ColumnsRoles::IsPlayingRole).toBool(), false); 1574 QCOMPARE(myPlayListReadProxyModel.data(myPlayListReadProxyModel.index(1, 0), MediaPlayList::ColumnsRoles::IsSingleDiscAlbumRole).toBool(), false); 1575 QCOMPARE(myPlayListReadProxyModel.data(myPlayListReadProxyModel.index(2, 0), MediaPlayList::ColumnsRoles::IsValidRole).toBool(), true); 1576 QCOMPARE(myPlayListReadProxyModel.data(myPlayListReadProxyModel.index(2, 0), MediaPlayList::ColumnsRoles::TitleRole).toString(), QStringLiteral("track2")); 1577 QCOMPARE(myPlayListReadProxyModel.data(myPlayListReadProxyModel.index(2, 0), MediaPlayList::ColumnsRoles::DurationRole).toTime().msecsSinceStartOfDay(), 12); 1578 QCOMPARE(myPlayListReadProxyModel.data(myPlayListReadProxyModel.index(2, 0), MediaPlayList::ColumnsRoles::ArtistRole).toString(), QStringLiteral("artist2")); 1579 QCOMPARE(myPlayListReadProxyModel.data(myPlayListReadProxyModel.index(2, 0), MediaPlayList::ColumnsRoles::AlbumArtistRole).toString(), QStringLiteral("artist2")); 1580 QCOMPARE(myPlayListReadProxyModel.data(myPlayListReadProxyModel.index(2, 0), MediaPlayList::ColumnsRoles::AlbumRole).toString(), QStringLiteral("album3")); 1581 QCOMPARE(myPlayListReadProxyModel.data(myPlayListReadProxyModel.index(2, 0), MediaPlayList::ColumnsRoles::TrackNumberRole).toInt(), 2); 1582 QCOMPARE(myPlayListReadProxyModel.data(myPlayListReadProxyModel.index(2, 0), MediaPlayList::ColumnsRoles::DiscNumberRole).toInt(), 1); 1583 QCOMPARE(myPlayListReadProxyModel.data(myPlayListReadProxyModel.index(2, 0), MediaPlayList::ColumnsRoles::ImageUrlRole).toUrl(), QUrl::fromLocalFile(QStringLiteral("album3"))); 1584 QCOMPARE(myPlayListReadProxyModel.data(myPlayListReadProxyModel.index(2, 0), MediaPlayList::ColumnsRoles::ResourceRole).toUrl(), QUrl::fromUserInput(QStringLiteral("/$12"))); 1585 QCOMPARE(myPlayListReadProxyModel.data(myPlayListReadProxyModel.index(2, 0), MediaPlayList::ColumnsRoles::IsPlayingRole).toBool(), false); 1586 QCOMPARE(myPlayListReadProxyModel.data(myPlayListReadProxyModel.index(2, 0), MediaPlayList::ColumnsRoles::IsSingleDiscAlbumRole).toBool(), true); 1587 } 1588 1589 void MediaPlayListProxyModelTest::testRestoreSettings() 1590 { 1591 MediaPlayList myPlayListModel; 1592 MediaPlayListProxyModel myPlayList; 1593 myPlayList.setPlayListModel(&myPlayListModel); 1594 QAbstractItemModelTester testModel(&myPlayList); 1595 DatabaseInterface myDatabaseContent; 1596 TracksListener myListener(&myDatabaseContent); 1597 1598 QSignalSpy currentTrackChangedSpy(&myPlayList, &MediaPlayListProxyModel::currentTrackChanged); 1599 QSignalSpy shufflePlayListChangedSpy(&myPlayList, &MediaPlayListProxyModel::shufflePlayListChanged); 1600 QSignalSpy repeatModeChangedSpy(&myPlayList, &MediaPlayListProxyModel::repeatModeChanged); 1601 QSignalSpy playListFinishedSpy(&myPlayList, &MediaPlayListProxyModel::playListFinished); 1602 QSignalSpy dataChangedSpy(&myPlayList, &MediaPlayListProxyModel::dataChanged); 1603 1604 myDatabaseContent.init(QStringLiteral("testDbDirectContent")); 1605 1606 connect(&myListener, &TracksListener::trackHasChanged, 1607 &myPlayListModel, &MediaPlayList::trackChanged, 1608 Qt::QueuedConnection); 1609 connect(&myListener, &TracksListener::tracksListAdded, 1610 &myPlayListModel, &MediaPlayList::tracksListAdded, 1611 Qt::QueuedConnection); 1612 connect(&myPlayListModel, &MediaPlayList::newTrackByNameInList, 1613 &myListener, &TracksListener::trackByNameInList, 1614 Qt::QueuedConnection); 1615 connect(&myPlayListModel, &MediaPlayList::newEntryInList, 1616 &myListener, &TracksListener::newEntryInList, 1617 Qt::QueuedConnection); 1618 connect(&myPlayListModel, &MediaPlayList::newUrlInList, 1619 &myListener, &TracksListener::newUrlInList, 1620 Qt::QueuedConnection); 1621 connect(&myDatabaseContent, &DatabaseInterface::tracksAdded, 1622 &myListener, &TracksListener::tracksAdded); 1623 1624 myDatabaseContent.insertTracksList(mNewTracks, mNewCovers); 1625 1626 myPlayList.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track}, 1627 {DataTypes::DatabaseIdRole, myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track1"), QStringLiteral("artist1"), QStringLiteral("album2"), 1, 1)}}, 1628 QStringLiteral("track1"), {}}}, {}, {}); 1629 myPlayList.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track}, 1630 {DataTypes::DatabaseIdRole, myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track3"), QStringLiteral("artist3"), QStringLiteral("album1"), 3, 3)}}, 1631 QStringLiteral("track3"), {}}}, {}, {}); 1632 myPlayList.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track}, 1633 {DataTypes::DatabaseIdRole, myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track5"), QStringLiteral("artist1"), QStringLiteral("album2"), 5, 1)}}, 1634 QStringLiteral("track5"), {}}}, {}, {}); 1635 myPlayList.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track}, 1636 {DataTypes::DatabaseIdRole, myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track1"), QStringLiteral("artist1"), QStringLiteral("album2"), 1, 1)}}, 1637 QStringLiteral("track1"), {}}}, {}, {}); 1638 1639 QVERIFY(dataChangedSpy.wait()); 1640 1641 QCOMPARE(currentTrackChangedSpy.count(), 1); 1642 QCOMPARE(shufflePlayListChangedSpy.count(), 0); 1643 QCOMPARE(repeatModeChangedSpy.count(), 0); 1644 QCOMPARE(playListFinishedSpy.count(), 0); 1645 1646 QVariantMap settings; 1647 settings[QStringLiteral("currentTrack")] = 2; 1648 settings[QStringLiteral("shufflePlayList")] = true; 1649 settings[QStringLiteral("repeatMode")] = true; 1650 1651 myPlayList.setPersistentState(settings); 1652 1653 QCOMPARE(currentTrackChangedSpy.count(), 2); 1654 QCOMPARE(shufflePlayListChangedSpy.count(), 1); 1655 QCOMPARE(repeatModeChangedSpy.count(), 1); 1656 QCOMPARE(playListFinishedSpy.count(), 0); 1657 } 1658 1659 void MediaPlayListProxyModelTest::testSaveAndRestoreSettings() 1660 { 1661 MediaPlayList myPlayListSave; 1662 QAbstractItemModelTester testModelSave(&myPlayListSave); 1663 MediaPlayListProxyModel myPlayListSaveProxyModel; 1664 myPlayListSaveProxyModel.setPlayListModel(&myPlayListSave); 1665 QAbstractItemModelTester testProxyModelSave(&myPlayListSaveProxyModel); 1666 DatabaseInterface myDatabaseContent; 1667 TracksListener myListenerSave(&myDatabaseContent); 1668 MediaPlayList myPlayListRestore; 1669 QAbstractItemModelTester testModelRestore(&myPlayListRestore); 1670 MediaPlayListProxyModel myPlayListRestoreProxyModel; 1671 myPlayListRestoreProxyModel.setPlayListModel(&myPlayListRestore); 1672 QAbstractItemModelTester testProxyModelRestore(&myPlayListRestoreProxyModel); 1673 TracksListener myListenerRestore(&myDatabaseContent); 1674 1675 QSignalSpy currentTrackChangedSaveSpy(&myPlayListSaveProxyModel, &MediaPlayListProxyModel::currentTrackChanged); 1676 QSignalSpy shufflePlayListChangedSaveSpy(&myPlayListSaveProxyModel, &MediaPlayListProxyModel::shufflePlayListChanged); 1677 QSignalSpy repeatModeChangedSaveSpy(&myPlayListSaveProxyModel, &MediaPlayListProxyModel::repeatModeChanged); 1678 QSignalSpy playListFinishedSaveSpy(&myPlayListSaveProxyModel, &MediaPlayListProxyModel::playListFinished); 1679 QSignalSpy dataChangedSaveSpy(&myPlayListSaveProxyModel, &MediaPlayListProxyModel::dataChanged); 1680 QSignalSpy currentTrackChangedRestoreSpy(&myPlayListRestoreProxyModel, &MediaPlayListProxyModel::currentTrackChanged); 1681 QSignalSpy shufflePlayListChangedRestoreSpy(&myPlayListRestoreProxyModel, &MediaPlayListProxyModel::shufflePlayListChanged); 1682 QSignalSpy repeatModeChangedRestoreSpy(&myPlayListRestoreProxyModel, &MediaPlayListProxyModel::repeatModeChanged); 1683 QSignalSpy playListFinishedRestoreSpy(&myPlayListRestoreProxyModel, &MediaPlayListProxyModel::playListFinished); 1684 1685 myDatabaseContent.init(QStringLiteral("testDbDirectContent")); 1686 1687 connect(&myListenerSave, &TracksListener::trackHasChanged, 1688 &myPlayListSave, &MediaPlayList::trackChanged, 1689 Qt::QueuedConnection); 1690 connect(&myListenerSave, &TracksListener::tracksListAdded, 1691 &myPlayListSave, &MediaPlayList::tracksListAdded, 1692 Qt::QueuedConnection); 1693 connect(&myPlayListSave, &MediaPlayList::newTrackByNameInList, 1694 &myListenerSave, &TracksListener::trackByNameInList, 1695 Qt::QueuedConnection); 1696 connect(&myPlayListSave, &MediaPlayList::newEntryInList, 1697 &myListenerSave, &TracksListener::newEntryInList, 1698 Qt::QueuedConnection); 1699 connect(&myDatabaseContent, &DatabaseInterface::tracksAdded, 1700 &myListenerSave, &TracksListener::tracksAdded); 1701 1702 connect(&myListenerRestore, &TracksListener::trackHasChanged, 1703 &myPlayListRestore, &MediaPlayList::trackChanged, 1704 Qt::QueuedConnection); 1705 connect(&myListenerRestore, &TracksListener::tracksListAdded, 1706 &myPlayListRestore, &MediaPlayList::tracksListAdded, 1707 Qt::QueuedConnection); 1708 connect(&myPlayListRestore, &MediaPlayList::newTrackByNameInList, 1709 &myListenerRestore, &TracksListener::trackByNameInList, 1710 Qt::QueuedConnection); 1711 connect(&myPlayListRestore, &MediaPlayList::newEntryInList, 1712 &myListenerRestore, &TracksListener::newEntryInList, 1713 Qt::QueuedConnection); 1714 connect(&myDatabaseContent, &DatabaseInterface::tracksAdded, 1715 &myListenerRestore, &TracksListener::tracksAdded); 1716 1717 QCOMPARE(currentTrackChangedSaveSpy.count(), 0); 1718 QCOMPARE(shufflePlayListChangedSaveSpy.count(), 0); 1719 QCOMPARE(repeatModeChangedSaveSpy.count(), 0); 1720 QCOMPARE(playListFinishedSaveSpy.count(), 0); 1721 QCOMPARE(currentTrackChangedRestoreSpy.count(), 0); 1722 QCOMPARE(shufflePlayListChangedRestoreSpy.count(), 0); 1723 QCOMPARE(repeatModeChangedRestoreSpy.count(), 0); 1724 QCOMPARE(playListFinishedRestoreSpy.count(), 0); 1725 1726 QCOMPARE(currentTrackChangedSaveSpy.count(), 0); 1727 QCOMPARE(shufflePlayListChangedSaveSpy.count(), 0); 1728 QCOMPARE(repeatModeChangedSaveSpy.count(), 0); 1729 QCOMPARE(playListFinishedSaveSpy.count(), 0); 1730 QCOMPARE(currentTrackChangedRestoreSpy.count(), 0); 1731 QCOMPARE(shufflePlayListChangedRestoreSpy.count(), 0); 1732 QCOMPARE(repeatModeChangedRestoreSpy.count(), 0); 1733 QCOMPARE(playListFinishedRestoreSpy.count(), 0); 1734 1735 myDatabaseContent.insertTracksList(mNewTracks, mNewCovers); 1736 1737 QCOMPARE(currentTrackChangedSaveSpy.count(), 0); 1738 QCOMPARE(shufflePlayListChangedSaveSpy.count(), 0); 1739 QCOMPARE(repeatModeChangedSaveSpy.count(), 0); 1740 QCOMPARE(playListFinishedSaveSpy.count(), 0); 1741 QCOMPARE(currentTrackChangedRestoreSpy.count(), 0); 1742 QCOMPARE(shufflePlayListChangedRestoreSpy.count(), 0); 1743 QCOMPARE(repeatModeChangedRestoreSpy.count(), 0); 1744 QCOMPARE(playListFinishedRestoreSpy.count(), 0); 1745 1746 myPlayListSaveProxyModel.setRepeatMode(MediaPlayListProxyModel::Repeat::Playlist); 1747 1748 QCOMPARE(currentTrackChangedSaveSpy.count(), 0); 1749 QCOMPARE(shufflePlayListChangedSaveSpy.count(), 0); 1750 QCOMPARE(repeatModeChangedSaveSpy.count(), 1); 1751 QCOMPARE(playListFinishedSaveSpy.count(), 0); 1752 QCOMPARE(currentTrackChangedRestoreSpy.count(), 0); 1753 QCOMPARE(shufflePlayListChangedRestoreSpy.count(), 0); 1754 QCOMPARE(repeatModeChangedRestoreSpy.count(), 0); 1755 QCOMPARE(playListFinishedRestoreSpy.count(), 0); 1756 1757 myPlayListSaveProxyModel.setShufflePlayList(true); 1758 1759 QCOMPARE(currentTrackChangedSaveSpy.count(), 0); 1760 QCOMPARE(shufflePlayListChangedSaveSpy.count(), 1); 1761 QCOMPARE(repeatModeChangedSaveSpy.count(), 1); 1762 QCOMPARE(playListFinishedSaveSpy.count(), 0); 1763 QCOMPARE(currentTrackChangedRestoreSpy.count(), 0); 1764 QCOMPARE(shufflePlayListChangedRestoreSpy.count(), 0); 1765 QCOMPARE(repeatModeChangedRestoreSpy.count(), 0); 1766 QCOMPARE(playListFinishedRestoreSpy.count(), 0); 1767 1768 myPlayListSaveProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track}, 1769 {DataTypes::DatabaseIdRole, myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track1"), QStringLiteral("artist1"), QStringLiteral("album2"), 1, 1)}}, 1770 QStringLiteral("track1"), {}}}, {}, {}); 1771 myPlayListSaveProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track}, 1772 {DataTypes::DatabaseIdRole, myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track3"), QStringLiteral("artist3"), QStringLiteral("album1"), 3, 3)}}, 1773 QStringLiteral("track3"), {}}}, {}, {}); 1774 myPlayListSaveProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track}, 1775 {DataTypes::DatabaseIdRole, myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track5"), QStringLiteral("artist1"), QStringLiteral("album2"), 5, 1)}}, 1776 QStringLiteral("track5"), {}}}, {}, {}); 1777 myPlayListSaveProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track}, 1778 {DataTypes::DatabaseIdRole, myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track1"), QStringLiteral("artist1"), QStringLiteral("album1"), 1, 1)}}, 1779 QStringLiteral("track1"), {}}}, {}, {}); 1780 1781 QVERIFY(dataChangedSaveSpy.wait()); 1782 1783 QVERIFY(currentTrackChangedSaveSpy.count() >= 1); 1784 QCOMPARE(shufflePlayListChangedSaveSpy.count(), 1); 1785 QCOMPARE(repeatModeChangedSaveSpy.count(), 1); 1786 QCOMPARE(playListFinishedSaveSpy.count(), 0); 1787 QCOMPARE(currentTrackChangedRestoreSpy.count(), 0); 1788 QCOMPARE(shufflePlayListChangedRestoreSpy.count(), 0); 1789 QCOMPARE(repeatModeChangedRestoreSpy.count(), 0); 1790 QCOMPARE(playListFinishedRestoreSpy.count(), 0); 1791 1792 QCOMPARE(myPlayListSaveProxyModel.currentTrack(), QPersistentModelIndex(myPlayListSaveProxyModel.index(0, 0))); 1793 1794 const auto oldCurrentTrackChangedCount = currentTrackChangedSaveSpy.count(); 1795 1796 myPlayListSaveProxyModel.skipNextTrack(); 1797 1798 QCOMPARE(currentTrackChangedSaveSpy.count(), oldCurrentTrackChangedCount + 1); 1799 QCOMPARE(shufflePlayListChangedSaveSpy.count(), 1); 1800 QCOMPARE(repeatModeChangedSaveSpy.count(), 1); 1801 QCOMPARE(playListFinishedSaveSpy.count(), 0); 1802 QCOMPARE(currentTrackChangedRestoreSpy.count(), 0); 1803 QCOMPARE(shufflePlayListChangedRestoreSpy.count(), 0); 1804 QCOMPARE(repeatModeChangedRestoreSpy.count(), 0); 1805 QCOMPARE(playListFinishedRestoreSpy.count(), 0); 1806 1807 myPlayListSaveProxyModel.skipNextTrack(); 1808 1809 QCOMPARE(currentTrackChangedSaveSpy.count(), oldCurrentTrackChangedCount + 2); 1810 QCOMPARE(shufflePlayListChangedSaveSpy.count(), 1); 1811 QCOMPARE(repeatModeChangedSaveSpy.count(), 1); 1812 QCOMPARE(playListFinishedSaveSpy.count(), 0); 1813 QCOMPARE(currentTrackChangedRestoreSpy.count(), 0); 1814 QCOMPARE(shufflePlayListChangedRestoreSpy.count(), 0); 1815 QCOMPARE(repeatModeChangedRestoreSpy.count(), 0); 1816 QCOMPARE(playListFinishedRestoreSpy.count(), 0); 1817 1818 myPlayListRestoreProxyModel.setPersistentState(myPlayListSaveProxyModel.persistentState()); 1819 1820 QCOMPARE(currentTrackChangedSaveSpy.count(), oldCurrentTrackChangedCount + 2); 1821 QCOMPARE(shufflePlayListChangedSaveSpy.count(), 1); 1822 QCOMPARE(repeatModeChangedSaveSpy.count(), 1); 1823 QCOMPARE(playListFinishedSaveSpy.count(), 0); 1824 QCOMPARE(currentTrackChangedRestoreSpy.count(), 1); 1825 QCOMPARE(shufflePlayListChangedRestoreSpy.count(), 1); 1826 QCOMPARE(repeatModeChangedRestoreSpy.count(), 1); 1827 QCOMPARE(playListFinishedRestoreSpy.count(), 0); 1828 1829 QCOMPARE(myPlayListRestoreProxyModel.repeatMode(), MediaPlayListProxyModel::Repeat::Playlist); 1830 QCOMPARE(myPlayListRestoreProxyModel.shufflePlayList(), true); 1831 } 1832 1833 void MediaPlayListProxyModelTest::shufflePlayList() 1834 { 1835 MediaPlayList myPlayList; 1836 QAbstractItemModelTester testModel(&myPlayList); 1837 MediaPlayListProxyModel myPlayListProxyModel; 1838 myPlayListProxyModel.setPlayListModel(&myPlayList); 1839 QAbstractItemModelTester testProxyModel(&myPlayListProxyModel); 1840 DatabaseInterface myDatabaseContent; 1841 TracksListener myListener(&myDatabaseContent); 1842 1843 QSignalSpy currentTrackChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::currentTrackChanged); 1844 QSignalSpy shufflePlayListChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::shufflePlayListChanged); 1845 QSignalSpy repeatModeChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::repeatModeChanged); 1846 QSignalSpy playListFinishedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::playListFinished); 1847 1848 myDatabaseContent.init(QStringLiteral("testDbDirectContent")); 1849 1850 connect(&myListener, &TracksListener::trackHasChanged, 1851 &myPlayList, &MediaPlayList::trackChanged, 1852 Qt::QueuedConnection); 1853 connect(&myListener, &TracksListener::tracksListAdded, 1854 &myPlayList, &MediaPlayList::tracksListAdded, 1855 Qt::QueuedConnection); 1856 connect(&myPlayList, &MediaPlayList::newTrackByNameInList, 1857 &myListener, &TracksListener::trackByNameInList, 1858 Qt::QueuedConnection); 1859 connect(&myPlayList, &MediaPlayList::newEntryInList, 1860 &myListener, &TracksListener::newEntryInList, 1861 Qt::QueuedConnection); 1862 connect(&myPlayList, &MediaPlayList::newUrlInList, 1863 &myListener, &TracksListener::newUrlInList, 1864 Qt::QueuedConnection); 1865 connect(&myDatabaseContent, &DatabaseInterface::tracksAdded, 1866 &myListener, &TracksListener::tracksAdded); 1867 1868 myDatabaseContent.insertTracksList(mNewTracks, mNewCovers); 1869 1870 QCOMPARE(currentTrackChangedSpy.count(), 0); 1871 QCOMPARE(shufflePlayListChangedSpy.count(), 0); 1872 QCOMPARE(repeatModeChangedSpy.count(), 0); 1873 QCOMPARE(playListFinishedSpy.count(), 0); 1874 1875 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track}, 1876 {DataTypes::DatabaseIdRole, myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track1"), QStringLiteral("artist1"), QStringLiteral("album2"), 1, 1)}}, 1877 QStringLiteral("track1"), {}}}, {}, {}); 1878 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track}, 1879 {DataTypes::DatabaseIdRole, myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track3"), QStringLiteral("artist3"), QStringLiteral("album1"), 3, 3)}}, 1880 QStringLiteral("track3"), {}}}, {}, {}); 1881 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track}, 1882 {DataTypes::DatabaseIdRole, myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track5"), QStringLiteral("artist1"), QStringLiteral("album2"), 5, 1)}}, 1883 QStringLiteral("track5"), {}}}, {}, {}); 1884 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track}, 1885 {DataTypes::DatabaseIdRole, myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track1"), QStringLiteral("artist1"), QStringLiteral("album2"), 1, 1)}}, 1886 QStringLiteral("track1"), {}}}, {}, {}); 1887 1888 QCOMPARE(currentTrackChangedSpy.count(), 1); 1889 QCOMPARE(shufflePlayListChangedSpy.count(), 0); 1890 QCOMPARE(repeatModeChangedSpy.count(), 0); 1891 QCOMPARE(playListFinishedSpy.count(), 0); 1892 1893 QCOMPARE(myPlayListProxyModel.currentTrack(), QPersistentModelIndex(myPlayListProxyModel.index(0, 0))); 1894 1895 myPlayListProxyModel.setRepeatMode(MediaPlayListProxyModel::Repeat::Playlist); 1896 myPlayListProxyModel.setShufflePlayList(true); 1897 1898 QCOMPARE(currentTrackChangedSpy.count(), 1); 1899 QCOMPARE(shufflePlayListChangedSpy.count(), 1); 1900 QCOMPARE(repeatModeChangedSpy.count(), 1); 1901 QCOMPARE(playListFinishedSpy.count(), 0); 1902 1903 QCOMPARE(myPlayListProxyModel.shufflePlayList(), true); 1904 1905 myPlayListProxyModel.skipNextTrack(); 1906 1907 QCOMPARE(currentTrackChangedSpy.count(), 2); 1908 QCOMPARE(shufflePlayListChangedSpy.count(), 1); 1909 QCOMPARE(repeatModeChangedSpy.count(), 1); 1910 QCOMPARE(playListFinishedSpy.count(), 0); 1911 1912 myPlayListProxyModel.skipNextTrack(); 1913 1914 QCOMPARE(currentTrackChangedSpy.count(), 3); 1915 QCOMPARE(shufflePlayListChangedSpy.count(), 1); 1916 QCOMPARE(repeatModeChangedSpy.count(), 1); 1917 QCOMPARE(playListFinishedSpy.count(), 0); 1918 1919 myPlayListProxyModel.skipNextTrack(); 1920 1921 QCOMPARE(currentTrackChangedSpy.count(), 4); 1922 QCOMPARE(shufflePlayListChangedSpy.count(), 1); 1923 QCOMPARE(repeatModeChangedSpy.count(), 1); 1924 QCOMPARE(playListFinishedSpy.count(), 0); 1925 1926 myPlayListProxyModel.skipNextTrack(); 1927 1928 QCOMPARE(currentTrackChangedSpy.count(), 5); 1929 QCOMPARE(shufflePlayListChangedSpy.count(), 1); 1930 QCOMPARE(repeatModeChangedSpy.count(), 1); 1931 QCOMPARE(playListFinishedSpy.count(), 0); 1932 } 1933 1934 void MediaPlayListProxyModelTest::testShuffleMode() 1935 { 1936 MediaPlayList myPlayList; 1937 QAbstractItemModelTester testModel(&myPlayList); 1938 MediaPlayListProxyModel myPlayListProxyModel; 1939 myPlayListProxyModel.setPlayListModel(&myPlayList); 1940 QAbstractItemModelTester testProxyModel(&myPlayListProxyModel); 1941 DatabaseInterface myDatabaseContent; 1942 TracksListener myListener(&myDatabaseContent); 1943 1944 QSignalSpy currentTrackChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::currentTrackChanged); 1945 QSignalSpy shufflePlayListChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::shufflePlayListChanged); 1946 QSignalSpy repeatModeChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::repeatModeChanged); 1947 QSignalSpy playListFinishedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::playListFinished); 1948 1949 myDatabaseContent.init(QStringLiteral("testDbDirectContent")); 1950 1951 connect(&myListener, &TracksListener::trackHasChanged, 1952 &myPlayList, &MediaPlayList::trackChanged, 1953 Qt::QueuedConnection); 1954 connect(&myListener, &TracksListener::tracksListAdded, 1955 &myPlayList, &MediaPlayList::tracksListAdded, 1956 Qt::QueuedConnection); 1957 connect(&myPlayList, &MediaPlayList::newTrackByNameInList, 1958 &myListener, &TracksListener::trackByNameInList, 1959 Qt::QueuedConnection); 1960 connect(&myPlayList, &MediaPlayList::newEntryInList, 1961 &myListener, &TracksListener::newEntryInList, 1962 Qt::QueuedConnection); 1963 connect(&myPlayList, &MediaPlayList::newUrlInList, 1964 &myListener, &TracksListener::newUrlInList, 1965 Qt::QueuedConnection); 1966 connect(&myDatabaseContent, &DatabaseInterface::tracksAdded, 1967 &myListener, &TracksListener::tracksAdded); 1968 1969 myDatabaseContent.insertTracksList(mNewTracks, mNewCovers); 1970 1971 QCOMPARE(currentTrackChangedSpy.count(), 0); 1972 QCOMPARE(shufflePlayListChangedSpy.count(), 0); 1973 QCOMPARE(repeatModeChangedSpy.count(), 0); 1974 QCOMPARE(playListFinishedSpy.count(), 0); 1975 1976 myPlayListProxyModel.setRepeatMode(MediaPlayListProxyModel::Repeat::Playlist); 1977 myPlayListProxyModel.setShufflePlayList(true); 1978 1979 QCOMPARE(currentTrackChangedSpy.count(), 0); 1980 QCOMPARE(shufflePlayListChangedSpy.count(), 1); 1981 QCOMPARE(repeatModeChangedSpy.count(), 1); 1982 QCOMPARE(playListFinishedSpy.count(), 0); 1983 1984 QCOMPARE(myPlayListProxyModel.shufflePlayList(), true); 1985 QCOMPARE(myPlayListProxyModel.repeatMode(), MediaPlayListProxyModel::Repeat::Playlist); 1986 1987 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track}, 1988 {DataTypes::DatabaseIdRole, myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track1"), QStringLiteral("artist1"), QStringLiteral("album2"), 1, 1)}}, 1989 QStringLiteral("track1"), {}}}, {}, {}); 1990 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track}, 1991 {DataTypes::DatabaseIdRole, myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track3"), QStringLiteral("artist3"), QStringLiteral("album1"), 3, 3)}}, 1992 QStringLiteral("track3"), {}}}, {}, {}); 1993 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track}, 1994 {DataTypes::DatabaseIdRole, myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track5"), QStringLiteral("artist1"), QStringLiteral("album2"), 5, 1)}}, 1995 QStringLiteral("track5"), {}}}, {}, {}); 1996 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track}, 1997 {DataTypes::DatabaseIdRole, myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track1"), QStringLiteral("artist1"), QStringLiteral("album2"), 1, 1)}}, 1998 QStringLiteral("track1"), {}}}, {}, {}); 1999 2000 QVERIFY(currentTrackChangedSpy.count() >= 1); 2001 QCOMPARE(shufflePlayListChangedSpy.count(), 1); 2002 QCOMPARE(repeatModeChangedSpy.count(), 1); 2003 QCOMPARE(playListFinishedSpy.count(), 0); 2004 2005 QCOMPARE(myPlayListProxyModel.currentTrack(), QPersistentModelIndex(myPlayListProxyModel.index(0, 0))); 2006 2007 const auto oldCurrentTrackChangedCount = currentTrackChangedSpy.count(); 2008 2009 myPlayListProxyModel.skipNextTrack(); 2010 2011 QCOMPARE(currentTrackChangedSpy.count(), oldCurrentTrackChangedCount + 1); 2012 QCOMPARE(shufflePlayListChangedSpy.count(), 1); 2013 QCOMPARE(repeatModeChangedSpy.count(), 1); 2014 QCOMPARE(playListFinishedSpy.count(), 0); 2015 2016 myPlayListProxyModel.skipNextTrack(); 2017 2018 QCOMPARE(currentTrackChangedSpy.count(), oldCurrentTrackChangedCount + 2); 2019 QCOMPARE(shufflePlayListChangedSpy.count(), 1); 2020 QCOMPARE(repeatModeChangedSpy.count(), 1); 2021 QCOMPARE(playListFinishedSpy.count(), 0); 2022 2023 myPlayListProxyModel.skipNextTrack(); 2024 2025 QCOMPARE(currentTrackChangedSpy.count(), oldCurrentTrackChangedCount + 3); 2026 QCOMPARE(shufflePlayListChangedSpy.count(), 1); 2027 QCOMPARE(repeatModeChangedSpy.count(), 1); 2028 QCOMPARE(playListFinishedSpy.count(), 0); 2029 2030 myPlayListProxyModel.skipPreviousTrack(0); 2031 2032 QCOMPARE(currentTrackChangedSpy.count(), oldCurrentTrackChangedCount + 4); 2033 QCOMPARE(shufflePlayListChangedSpy.count(), 1); 2034 QCOMPARE(repeatModeChangedSpy.count(), 1); 2035 QCOMPARE(playListFinishedSpy.count(), 0); 2036 2037 myPlayListProxyModel.removeRow(1); 2038 } 2039 2040 void MediaPlayListProxyModelTest::randomAndContinuePlayList() 2041 { 2042 MediaPlayList myPlayList; 2043 QAbstractItemModelTester testModel(&myPlayList); 2044 MediaPlayListProxyModel myPlayListProxyModel; 2045 myPlayListProxyModel.setPlayListModel(&myPlayList); 2046 QAbstractItemModelTester testProxyModel(&myPlayListProxyModel); 2047 DatabaseInterface myDatabaseContent; 2048 TracksListener myListener(&myDatabaseContent); 2049 2050 QSignalSpy currentTrackChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::currentTrackChanged); 2051 QSignalSpy shufflePlayListChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::shufflePlayListChanged); 2052 QSignalSpy repeatModeChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::repeatModeChanged); 2053 QSignalSpy playListFinishedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::playListFinished); 2054 2055 myDatabaseContent.init(QStringLiteral("testDbDirectContent")); 2056 2057 connect(&myListener, &TracksListener::trackHasChanged, 2058 &myPlayList, &MediaPlayList::trackChanged, 2059 Qt::QueuedConnection); 2060 connect(&myListener, &TracksListener::tracksListAdded, 2061 &myPlayList, &MediaPlayList::tracksListAdded, 2062 Qt::QueuedConnection); 2063 connect(&myPlayList, &MediaPlayList::newTrackByNameInList, 2064 &myListener, &TracksListener::trackByNameInList, 2065 Qt::QueuedConnection); 2066 connect(&myPlayList, &MediaPlayList::newEntryInList, 2067 &myListener, &TracksListener::newEntryInList, 2068 Qt::QueuedConnection); 2069 connect(&myPlayList, &MediaPlayList::newUrlInList, 2070 &myListener, &TracksListener::newUrlInList, 2071 Qt::QueuedConnection); 2072 connect(&myDatabaseContent, &DatabaseInterface::tracksAdded, 2073 &myListener, &TracksListener::tracksAdded); 2074 2075 myDatabaseContent.insertTracksList(mNewTracks, mNewCovers); 2076 2077 QCOMPARE(currentTrackChangedSpy.count(), 0); 2078 QCOMPARE(shufflePlayListChangedSpy.count(), 0); 2079 QCOMPARE(repeatModeChangedSpy.count(), 0); 2080 QCOMPARE(playListFinishedSpy.count(), 0); 2081 2082 QCOMPARE(currentTrackChangedSpy.count(), 0); 2083 QCOMPARE(shufflePlayListChangedSpy.count(), 0); 2084 QCOMPARE(repeatModeChangedSpy.count(), 0); 2085 QCOMPARE(playListFinishedSpy.count(), 0); 2086 2087 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track}, 2088 {DataTypes::DatabaseIdRole, myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track1"), QStringLiteral("artist1"), QStringLiteral("album2"), 1, 1)}}, 2089 QStringLiteral("track1"), {}}}, {}, {}); 2090 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track}, 2091 {DataTypes::DatabaseIdRole, myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track3"), QStringLiteral("artist3"), QStringLiteral("album1"), 3, 3)}}, 2092 QStringLiteral("track3"), {}}}, {}, {}); 2093 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track}, 2094 {DataTypes::DatabaseIdRole, myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track5"), QStringLiteral("artist1"), QStringLiteral("album2"), 5, 1)}}, 2095 QStringLiteral("track5"), {}}}, {}, {}); 2096 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track}, 2097 {DataTypes::DatabaseIdRole, myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track1"), QStringLiteral("artist1"), QStringLiteral("album2"), 1, 1)}}, 2098 QStringLiteral("track1"), {}}}, {}, {}); 2099 2100 QCOMPARE(currentTrackChangedSpy.count(), 1); 2101 QCOMPARE(shufflePlayListChangedSpy.count(), 0); 2102 QCOMPARE(repeatModeChangedSpy.count(), 0); 2103 QCOMPARE(playListFinishedSpy.count(), 0); 2104 2105 QCOMPARE(myPlayListProxyModel.currentTrack(), QPersistentModelIndex(myPlayListProxyModel.index(0, 0))); 2106 2107 myPlayListProxyModel.setShufflePlayList(true); 2108 2109 QCOMPARE(currentTrackChangedSpy.count(), 1); 2110 QCOMPARE(shufflePlayListChangedSpy.count(), 1); 2111 QCOMPARE(repeatModeChangedSpy.count(), 0); 2112 QCOMPARE(playListFinishedSpy.count(), 0); 2113 2114 QCOMPARE(myPlayListProxyModel.shufflePlayList(), true); 2115 2116 myPlayListProxyModel.setRepeatMode(MediaPlayListProxyModel::Repeat::Playlist); 2117 2118 QCOMPARE(currentTrackChangedSpy.count(), 1); 2119 QCOMPARE(shufflePlayListChangedSpy.count(), 1); 2120 QCOMPARE(repeatModeChangedSpy.count(), 1); 2121 QCOMPARE(playListFinishedSpy.count(), 0); 2122 2123 QCOMPARE(myPlayListProxyModel.repeatMode(), MediaPlayListProxyModel::Repeat::Playlist); 2124 2125 myPlayListProxyModel.switchTo(3); 2126 2127 QCOMPARE(currentTrackChangedSpy.count(), 2); 2128 QCOMPARE(shufflePlayListChangedSpy.count(), 1); 2129 QCOMPARE(repeatModeChangedSpy.count(), 1); 2130 QCOMPARE(playListFinishedSpy.count(), 0); 2131 2132 QCOMPARE(myPlayListProxyModel.currentTrack(), QPersistentModelIndex(myPlayListProxyModel.index(3, 0))); 2133 2134 myPlayListProxyModel.skipNextTrack(); 2135 2136 QCOMPARE(currentTrackChangedSpy.count(), 3); 2137 QCOMPARE(shufflePlayListChangedSpy.count(), 1); 2138 QCOMPARE(repeatModeChangedSpy.count(), 1); 2139 QCOMPARE(playListFinishedSpy.count(), 0); 2140 2141 myPlayListProxyModel.skipNextTrack(); 2142 2143 QCOMPARE(currentTrackChangedSpy.count(), 4); 2144 QCOMPARE(shufflePlayListChangedSpy.count(), 1); 2145 QCOMPARE(repeatModeChangedSpy.count(), 1); 2146 QCOMPARE(playListFinishedSpy.count(), 0); 2147 2148 myPlayListProxyModel.skipNextTrack(); 2149 2150 QCOMPARE(currentTrackChangedSpy.count(), 5); 2151 QCOMPARE(shufflePlayListChangedSpy.count(), 1); 2152 QCOMPARE(repeatModeChangedSpy.count(), 1); 2153 QCOMPARE(playListFinishedSpy.count(), 0); 2154 } 2155 2156 void MediaPlayListProxyModelTest::continuePlayList() 2157 { 2158 MediaPlayList myPlayList; 2159 QAbstractItemModelTester testModel(&myPlayList); 2160 MediaPlayListProxyModel myPlayListProxyModel; 2161 myPlayListProxyModel.setPlayListModel(&myPlayList); 2162 QAbstractItemModelTester testProxyModel(&myPlayListProxyModel); 2163 DatabaseInterface myDatabaseContent; 2164 TracksListener myListener(&myDatabaseContent); 2165 2166 QSignalSpy currentTrackChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::currentTrackChanged); 2167 QSignalSpy shufflePlayListChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::shufflePlayListChanged); 2168 QSignalSpy repeatModeChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::repeatModeChanged); 2169 QSignalSpy playListFinishedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::playListFinished); 2170 2171 myDatabaseContent.init(QStringLiteral("testDbDirectContent")); 2172 2173 connect(&myListener, &TracksListener::trackHasChanged, 2174 &myPlayList, &MediaPlayList::trackChanged, 2175 Qt::QueuedConnection); 2176 connect(&myListener, &TracksListener::tracksListAdded, 2177 &myPlayList, &MediaPlayList::tracksListAdded, 2178 Qt::QueuedConnection); 2179 connect(&myPlayList, &MediaPlayList::newTrackByNameInList, 2180 &myListener, &TracksListener::trackByNameInList, 2181 Qt::QueuedConnection); 2182 connect(&myPlayList, &MediaPlayList::newEntryInList, 2183 &myListener, &TracksListener::newEntryInList, 2184 Qt::QueuedConnection); 2185 connect(&myPlayList, &MediaPlayList::newUrlInList, 2186 &myListener, &TracksListener::newUrlInList, 2187 Qt::QueuedConnection); 2188 connect(&myDatabaseContent, &DatabaseInterface::tracksAdded, 2189 &myListener, &TracksListener::tracksAdded); 2190 2191 myDatabaseContent.insertTracksList(mNewTracks, mNewCovers); 2192 2193 QCOMPARE(currentTrackChangedSpy.count(), 0); 2194 QCOMPARE(shufflePlayListChangedSpy.count(), 0); 2195 QCOMPARE(repeatModeChangedSpy.count(), 0); 2196 QCOMPARE(playListFinishedSpy.count(), 0); 2197 2198 QCOMPARE(currentTrackChangedSpy.count(), 0); 2199 QCOMPARE(shufflePlayListChangedSpy.count(), 0); 2200 QCOMPARE(repeatModeChangedSpy.count(), 0); 2201 QCOMPARE(playListFinishedSpy.count(), 0); 2202 2203 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track}, 2204 {DataTypes::DatabaseIdRole, myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track1"), QStringLiteral("artist1"), QStringLiteral("album2"), 1, 1)}}, 2205 QStringLiteral("track1"), {}}}, {}, {}); 2206 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track}, 2207 {DataTypes::DatabaseIdRole, myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track3"), QStringLiteral("artist3"), QStringLiteral("album1"), 3, 3)}}, 2208 QStringLiteral("track3"), {}}}, {}, {}); 2209 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track}, 2210 {DataTypes::DatabaseIdRole, myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track5"), QStringLiteral("artist1"), QStringLiteral("album2"), 5, 1)}}, 2211 QStringLiteral("track5"), {}}}, {}, {}); 2212 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track}, 2213 {DataTypes::DatabaseIdRole, myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track1"), QStringLiteral("artist1"), QStringLiteral("album2"), 1, 1)}}, 2214 QStringLiteral("track1"), {}}}, {}, {}); 2215 2216 QCOMPARE(currentTrackChangedSpy.count(), 1); 2217 QCOMPARE(shufflePlayListChangedSpy.count(), 0); 2218 QCOMPARE(repeatModeChangedSpy.count(), 0); 2219 QCOMPARE(playListFinishedSpy.count(), 0); 2220 2221 QCOMPARE(myPlayListProxyModel.currentTrack(), QPersistentModelIndex(myPlayListProxyModel.index(0, 0))); 2222 2223 myPlayListProxyModel.setRepeatMode(MediaPlayListProxyModel::Repeat::Playlist); 2224 2225 QCOMPARE(currentTrackChangedSpy.count(), 1); 2226 QCOMPARE(shufflePlayListChangedSpy.count(), 0); 2227 QCOMPARE(repeatModeChangedSpy.count(), 1); 2228 QCOMPARE(playListFinishedSpy.count(), 0); 2229 2230 QCOMPARE(myPlayListProxyModel.repeatMode(), MediaPlayListProxyModel::Repeat::Playlist); 2231 2232 myPlayListProxyModel.skipNextTrack(); 2233 2234 QCOMPARE(currentTrackChangedSpy.count(), 2); 2235 QCOMPARE(shufflePlayListChangedSpy.count(), 0); 2236 QCOMPARE(repeatModeChangedSpy.count(), 1); 2237 QCOMPARE(playListFinishedSpy.count(), 0); 2238 2239 QCOMPARE(myPlayListProxyModel.currentTrack(), QPersistentModelIndex(myPlayListProxyModel.index(1, 0))); 2240 2241 myPlayListProxyModel.skipNextTrack(); 2242 2243 QCOMPARE(currentTrackChangedSpy.count(), 3); 2244 QCOMPARE(shufflePlayListChangedSpy.count(), 0); 2245 QCOMPARE(repeatModeChangedSpy.count(), 1); 2246 QCOMPARE(playListFinishedSpy.count(), 0); 2247 2248 QCOMPARE(myPlayListProxyModel.currentTrack(), QPersistentModelIndex(myPlayListProxyModel.index(2, 0))); 2249 2250 myPlayListProxyModel.skipNextTrack(); 2251 2252 QCOMPARE(currentTrackChangedSpy.count(), 4); 2253 QCOMPARE(shufflePlayListChangedSpy.count(), 0); 2254 QCOMPARE(repeatModeChangedSpy.count(), 1); 2255 QCOMPARE(playListFinishedSpy.count(), 0); 2256 2257 QCOMPARE(myPlayListProxyModel.currentTrack(), QPersistentModelIndex(myPlayListProxyModel.index(3, 0))); 2258 2259 myPlayListProxyModel.skipNextTrack(); 2260 2261 QCOMPARE(currentTrackChangedSpy.count(), 5); 2262 QCOMPARE(shufflePlayListChangedSpy.count(), 0); 2263 QCOMPARE(repeatModeChangedSpy.count(), 1); 2264 QCOMPARE(playListFinishedSpy.count(), 0); 2265 2266 QCOMPARE(myPlayListProxyModel.currentTrack(), QPersistentModelIndex(myPlayListProxyModel.index(0, 0))); 2267 } 2268 2269 void MediaPlayListProxyModelTest::previousAndNextTracksTest() 2270 { 2271 MediaPlayList myPlayList; 2272 QAbstractItemModelTester testModel(&myPlayList); 2273 MediaPlayListProxyModel myPlayListProxyModel; 2274 myPlayListProxyModel.setPlayListModel(&myPlayList); 2275 QAbstractItemModelTester testProxyModel(&myPlayListProxyModel); 2276 DatabaseInterface myDatabaseContent; 2277 TracksListener myListener(&myDatabaseContent); 2278 2279 QSignalSpy previousTrackChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::previousTrackChanged); 2280 QSignalSpy currentTrackChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::currentTrackChanged); 2281 QSignalSpy nextTrackChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::nextTrackChanged); 2282 QSignalSpy shufflePlayListChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::shufflePlayListChanged); 2283 QSignalSpy repeatModeChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::repeatModeChanged); 2284 QSignalSpy playListFinishedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::playListFinished); 2285 2286 myDatabaseContent.init(QStringLiteral("testDbDirectContent")); 2287 2288 connect(&myListener, &TracksListener::trackHasChanged, 2289 &myPlayList, &MediaPlayList::trackChanged, 2290 Qt::QueuedConnection); 2291 connect(&myListener, &TracksListener::tracksListAdded, 2292 &myPlayList, &MediaPlayList::tracksListAdded, 2293 Qt::QueuedConnection); 2294 connect(&myPlayList, &MediaPlayList::newTrackByNameInList, 2295 &myListener, &TracksListener::trackByNameInList, 2296 Qt::QueuedConnection); 2297 connect(&myPlayList, &MediaPlayList::newEntryInList, 2298 &myListener, &TracksListener::newEntryInList, 2299 Qt::QueuedConnection); 2300 connect(&myPlayList, &MediaPlayList::newUrlInList, 2301 &myListener, &TracksListener::newUrlInList, 2302 Qt::QueuedConnection); 2303 connect(&myDatabaseContent, &DatabaseInterface::tracksAdded, 2304 &myListener, &TracksListener::tracksAdded); 2305 2306 myDatabaseContent.insertTracksList(mNewTracks, mNewCovers); 2307 2308 QCOMPARE(previousTrackChangedSpy.count(), 0); 2309 QCOMPARE(currentTrackChangedSpy.count(), 0); 2310 QCOMPARE(nextTrackChangedSpy.count(), 0); 2311 QCOMPARE(shufflePlayListChangedSpy.count(), 0); 2312 QCOMPARE(repeatModeChangedSpy.count(), 0); 2313 QCOMPARE(playListFinishedSpy.count(), 0); 2314 2315 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track}, 2316 {DataTypes::DatabaseIdRole, myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track1"), QStringLiteral("artist1"), QStringLiteral("album2"), 1, 1)}}, 2317 QStringLiteral("track1"), {}}}, {}, {}); 2318 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track}, 2319 {DataTypes::DatabaseIdRole, myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track3"), QStringLiteral("artist3"), QStringLiteral("album1"), 3, 3)}}, 2320 QStringLiteral("track3"), {}}}, {}, {}); 2321 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track}, 2322 {DataTypes::DatabaseIdRole, myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track4"), QStringLiteral("artist1"), QStringLiteral("album1"), 4, 4)}}, 2323 QStringLiteral("track4"), {}}}, {}, {}); 2324 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track}, 2325 {DataTypes::DatabaseIdRole, myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track2"), QStringLiteral("artist1"), QStringLiteral("album1"), 2, 2)}}, 2326 QStringLiteral("track2"), {}}}, {}, {}); 2327 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track}, 2328 {DataTypes::DatabaseIdRole, myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track1"), QStringLiteral("artist1"), QStringLiteral("album2"), 1, 1)}}, 2329 QStringLiteral("track1"), {}}}, {}, {}); 2330 2331 QCOMPARE(previousTrackChangedSpy.count(), 0); 2332 QCOMPARE(currentTrackChangedSpy.count(), 1); 2333 QCOMPARE(nextTrackChangedSpy.count(), 1); 2334 QCOMPARE(shufflePlayListChangedSpy.count(), 0); 2335 QCOMPARE(repeatModeChangedSpy.count(), 0); 2336 QCOMPARE(playListFinishedSpy.count(), 0); 2337 2338 QCOMPARE(myPlayListProxyModel.previousTrack(), QPersistentModelIndex()); 2339 QCOMPARE(myPlayListProxyModel.currentTrack(), QPersistentModelIndex(myPlayListProxyModel.index(0, 0))); 2340 QCOMPARE(myPlayListProxyModel.nextTrack(), QPersistentModelIndex(myPlayListProxyModel.index(1, 0))); 2341 2342 myPlayListProxyModel.skipNextTrack(); 2343 2344 QCOMPARE(previousTrackChangedSpy.count(), 1); 2345 QCOMPARE(currentTrackChangedSpy.count(), 2); 2346 QCOMPARE(nextTrackChangedSpy.count(), 2); 2347 QCOMPARE(shufflePlayListChangedSpy.count(), 0); 2348 QCOMPARE(repeatModeChangedSpy.count(), 0); 2349 QCOMPARE(playListFinishedSpy.count(), 0); 2350 2351 QCOMPARE(myPlayListProxyModel.previousTrack(), QPersistentModelIndex(myPlayListProxyModel.index(0, 0))); 2352 QCOMPARE(myPlayListProxyModel.currentTrack(), QPersistentModelIndex(myPlayListProxyModel.index(1, 0))); 2353 QCOMPARE(myPlayListProxyModel.nextTrack(), QPersistentModelIndex(myPlayListProxyModel.index(2, 0))); 2354 2355 myPlayListProxyModel.switchTo(4); 2356 2357 QCOMPARE(previousTrackChangedSpy.count(), 2); 2358 QCOMPARE(currentTrackChangedSpy.count(), 3); 2359 QCOMPARE(nextTrackChangedSpy.count(), 3); 2360 2361 QCOMPARE(myPlayListProxyModel.previousTrack(), QPersistentModelIndex(myPlayListProxyModel.index(3, 0))); 2362 QCOMPARE(myPlayListProxyModel.currentTrack(), QPersistentModelIndex(myPlayListProxyModel.index(4, 0))); 2363 QCOMPARE(myPlayListProxyModel.nextTrack(), QPersistentModelIndex()); 2364 2365 myPlayListProxyModel.setRepeatMode(MediaPlayListProxyModel::Repeat::Playlist); 2366 2367 QCOMPARE(previousTrackChangedSpy.count(), 2); 2368 QCOMPARE(currentTrackChangedSpy.count(), 3); 2369 QCOMPARE(nextTrackChangedSpy.count(), 4); 2370 2371 QCOMPARE(myPlayListProxyModel.previousTrack(), QPersistentModelIndex(myPlayListProxyModel.index(3, 0))); 2372 QCOMPARE(myPlayListProxyModel.currentTrack(), QPersistentModelIndex(myPlayListProxyModel.index(4, 0))); 2373 QCOMPARE(myPlayListProxyModel.nextTrack(), QPersistentModelIndex(myPlayListProxyModel.index(0, 0))); 2374 2375 myPlayListProxyModel.skipNextTrack(); 2376 2377 QCOMPARE(previousTrackChangedSpy.count(), 3); 2378 QCOMPARE(currentTrackChangedSpy.count(), 4); 2379 QCOMPARE(nextTrackChangedSpy.count(), 5); 2380 2381 QCOMPARE(myPlayListProxyModel.previousTrack(), QPersistentModelIndex(myPlayListProxyModel.index(4, 0))); 2382 QCOMPARE(myPlayListProxyModel.currentTrack(), QPersistentModelIndex(myPlayListProxyModel.index(0, 0))); 2383 QCOMPARE(myPlayListProxyModel.nextTrack(), QPersistentModelIndex(myPlayListProxyModel.index(1, 0))); 2384 2385 myPlayListProxyModel.setShufflePlayList(true); 2386 2387 QVERIFY(myPlayListProxyModel.previousTrack() != QPersistentModelIndex()); 2388 QVERIFY(myPlayListProxyModel.currentTrack() != QPersistentModelIndex()); 2389 QVERIFY(myPlayListProxyModel.nextTrack() != QPersistentModelIndex()); 2390 } 2391 2392 void MediaPlayListProxyModelTest::remainingTracksTest() 2393 { 2394 MediaPlayList myPlayList; 2395 QAbstractItemModelTester testModel(&myPlayList); 2396 MediaPlayListProxyModel myPlayListProxyModel; 2397 myPlayListProxyModel.setPlayListModel(&myPlayList); 2398 QAbstractItemModelTester testProxyModel(&myPlayListProxyModel); 2399 DatabaseInterface myDatabaseContent; 2400 TracksListener myListener(&myDatabaseContent); 2401 2402 QSignalSpy currentTrackChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::currentTrackChanged); 2403 QSignalSpy shufflePlayListChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::shufflePlayListChanged); 2404 QSignalSpy repeatModeChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::repeatModeChanged); 2405 QSignalSpy remainingTracksChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::remainingTracksChanged); 2406 2407 myDatabaseContent.init(QStringLiteral("testDbDirectContent")); 2408 2409 connect(&myListener, &TracksListener::trackHasChanged, 2410 &myPlayList, &MediaPlayList::trackChanged, 2411 Qt::QueuedConnection); 2412 connect(&myListener, &TracksListener::tracksListAdded, 2413 &myPlayList, &MediaPlayList::tracksListAdded, 2414 Qt::QueuedConnection); 2415 connect(&myPlayList, &MediaPlayList::newTrackByNameInList, 2416 &myListener, &TracksListener::trackByNameInList, 2417 Qt::QueuedConnection); 2418 connect(&myPlayList, &MediaPlayList::newEntryInList, 2419 &myListener, &TracksListener::newEntryInList, 2420 Qt::QueuedConnection); 2421 connect(&myPlayList, &MediaPlayList::newUrlInList, 2422 &myListener, &TracksListener::newUrlInList, 2423 Qt::QueuedConnection); 2424 connect(&myDatabaseContent, &DatabaseInterface::tracksAdded, 2425 &myListener, &TracksListener::tracksAdded); 2426 2427 myDatabaseContent.insertTracksList(mNewTracks, mNewCovers); 2428 2429 QCOMPARE(currentTrackChangedSpy.count(), 0); 2430 QCOMPARE(shufflePlayListChangedSpy.count(), 0); 2431 QCOMPARE(repeatModeChangedSpy.count(), 0); 2432 QCOMPARE(remainingTracksChangedSpy.count(), 0); 2433 2434 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track}, 2435 {DataTypes::DatabaseIdRole, myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track1"), QStringLiteral("artist1"), QStringLiteral("album2"), 1, 1)}}, 2436 QStringLiteral("track1"), {}}}, {}, {}); 2437 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track}, 2438 {DataTypes::DatabaseIdRole, myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track3"), QStringLiteral("artist3"), QStringLiteral("album1"), 3, 3)}}, 2439 QStringLiteral("track3"), {}}}, {}, {}); 2440 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track}, 2441 {DataTypes::DatabaseIdRole, myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track4"), QStringLiteral("artist1"), QStringLiteral("album1"), 4, 4)}}, 2442 QStringLiteral("track4"), {}}}, {}, {}); 2443 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track}, 2444 {DataTypes::DatabaseIdRole, myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track2"), QStringLiteral("artist1"), QStringLiteral("album1"), 2, 2)}}, 2445 QStringLiteral("track2"), {}}}, {}, {}); 2446 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track}, 2447 {DataTypes::DatabaseIdRole, myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track1"), QStringLiteral("artist1"), QStringLiteral("album2"), 1, 1)}}, 2448 QStringLiteral("track1"), {}}}, {}, {}); 2449 2450 QCOMPARE(currentTrackChangedSpy.count(), 1); 2451 QCOMPARE(shufflePlayListChangedSpy.count(), 0); 2452 QCOMPARE(repeatModeChangedSpy.count(), 0); 2453 QCOMPARE(remainingTracksChangedSpy.count(), 6); 2454 2455 QCOMPARE(myPlayListProxyModel.currentTrack(), QPersistentModelIndex(myPlayListProxyModel.index(0, 0))); 2456 QCOMPARE(myPlayListProxyModel.remainingTracks(), 4); 2457 2458 myPlayListProxyModel.skipNextTrack(); 2459 2460 QCOMPARE(currentTrackChangedSpy.count(), 2); 2461 QCOMPARE(remainingTracksChangedSpy.count(), 7); 2462 QCOMPARE(myPlayListProxyModel.currentTrack(), QPersistentModelIndex(myPlayListProxyModel.index(1, 0))); 2463 QCOMPARE(myPlayListProxyModel.remainingTracks(), 3); 2464 2465 myPlayListProxyModel.setShufflePlayList(true); 2466 2467 QCOMPARE(currentTrackChangedSpy.count(), 2); 2468 QCOMPARE(shufflePlayListChangedSpy.count(), 1); 2469 QCOMPARE(repeatModeChangedSpy.count(), 0); 2470 QCOMPARE(remainingTracksChangedSpy.count(), 8); 2471 2472 myPlayListProxyModel.setShufflePlayList(false); 2473 myPlayListProxyModel.setRepeatMode(MediaPlayListProxyModel::Repeat::Playlist); 2474 2475 QCOMPARE(currentTrackChangedSpy.count(), 2); 2476 QCOMPARE(shufflePlayListChangedSpy.count(), 2); 2477 QCOMPARE(repeatModeChangedSpy.count(), 1); 2478 QCOMPARE(remainingTracksChangedSpy.count(), 10); 2479 2480 myPlayListProxyModel.setRepeatMode(MediaPlayListProxyModel::Repeat::One); 2481 QCOMPARE(myPlayListProxyModel.remainingTracks(), -1); 2482 } 2483 2484 void MediaPlayListProxyModelTest::clearPlayListCase() 2485 { 2486 MediaPlayList myPlayList; 2487 QAbstractItemModelTester testModel(&myPlayList); 2488 MediaPlayListProxyModel myPlayListProxyModel; 2489 myPlayListProxyModel.setPlayListModel(&myPlayList); 2490 QAbstractItemModelTester testProxyModel(&myPlayListProxyModel); 2491 DatabaseInterface myDatabaseContent; 2492 TracksListener myListener(&myDatabaseContent); 2493 2494 QSignalSpy rowsAboutToBeMovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsAboutToBeMoved); 2495 QSignalSpy rowsAboutToBeRemovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsAboutToBeRemoved); 2496 QSignalSpy rowsAboutToBeInsertedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsAboutToBeInserted); 2497 QSignalSpy rowsMovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsMoved); 2498 QSignalSpy rowsRemovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsRemoved); 2499 QSignalSpy rowsInsertedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsInserted); 2500 QSignalSpy tracksCountChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::tracksCountChanged); 2501 QSignalSpy persistentStateChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::persistentStateChanged); 2502 QSignalSpy currentTrackChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::currentTrackChanged); 2503 QSignalSpy dataChangedSpy(&myPlayListProxyModel, &MediaPlayList::dataChanged); 2504 QSignalSpy newTrackByNameInListSpy(&myPlayList, &MediaPlayList::newTrackByNameInList); 2505 QSignalSpy newEntryInListSpy(&myPlayList, &MediaPlayList::newEntryInList); 2506 QSignalSpy newUrlInListSpy(&myPlayList, &MediaPlayList::newUrlInList); 2507 2508 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); 2509 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 2510 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 0); 2511 QCOMPARE(rowsRemovedSpy.count(), 0); 2512 QCOMPARE(rowsMovedSpy.count(), 0); 2513 QCOMPARE(rowsInsertedSpy.count(), 0); 2514 QCOMPARE(tracksCountChangedSpy.count(), 0); 2515 QCOMPARE(persistentStateChangedSpy.count(), 0); 2516 QCOMPARE(dataChangedSpy.count(), 0); 2517 QCOMPARE(newTrackByNameInListSpy.count(), 0); 2518 QCOMPARE(newEntryInListSpy.count(), 0); 2519 QCOMPARE(currentTrackChangedSpy.count(), 0); 2520 2521 myDatabaseContent.init(QStringLiteral("testDbDirectContent")); 2522 2523 connect(&myListener, &TracksListener::trackHasChanged, 2524 &myPlayList, &MediaPlayList::trackChanged, 2525 Qt::QueuedConnection); 2526 connect(&myListener, &TracksListener::tracksListAdded, 2527 &myPlayList, &MediaPlayList::tracksListAdded, 2528 Qt::QueuedConnection); 2529 connect(&myPlayList, &MediaPlayList::newTrackByNameInList, 2530 &myListener, &TracksListener::trackByNameInList, 2531 Qt::QueuedConnection); 2532 connect(&myPlayList, &MediaPlayList::newEntryInList, 2533 &myListener, &TracksListener::newEntryInList, 2534 Qt::QueuedConnection); 2535 connect(&myPlayList, &MediaPlayList::newUrlInList, 2536 &myListener, &TracksListener::newUrlInList, 2537 Qt::QueuedConnection); 2538 connect(&myDatabaseContent, &DatabaseInterface::tracksAdded, 2539 &myListener, &TracksListener::tracksAdded); 2540 2541 myDatabaseContent.insertTracksList(mNewTracks, mNewCovers); 2542 2543 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); 2544 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 2545 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 0); 2546 QCOMPARE(rowsRemovedSpy.count(), 0); 2547 QCOMPARE(rowsMovedSpy.count(), 0); 2548 QCOMPARE(rowsInsertedSpy.count(), 0); 2549 QCOMPARE(tracksCountChangedSpy.count(), 0); 2550 QCOMPARE(persistentStateChangedSpy.count(), 0); 2551 QCOMPARE(dataChangedSpy.count(), 0); 2552 QCOMPARE(newTrackByNameInListSpy.count(), 0); 2553 QCOMPARE(newEntryInListSpy.count(), 0); 2554 QCOMPARE(currentTrackChangedSpy.count(), 0); 2555 2556 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Album}, 2557 {DataTypes::DatabaseIdRole, myDatabaseContent.albumIdFromTitleAndArtist(QStringLiteral("album2"), QStringLiteral("artist1"), QStringLiteral("/"))}}, 2558 QStringLiteral("album2"), {}}}, {}, {}); 2559 2560 QVERIFY(rowsAboutToBeInsertedSpy.wait()); 2561 2562 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 1); 2563 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 2564 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 2); 2565 QCOMPARE(rowsRemovedSpy.count(), 1); 2566 QCOMPARE(rowsMovedSpy.count(), 0); 2567 QCOMPARE(rowsInsertedSpy.count(), 2); 2568 QCOMPARE(tracksCountChangedSpy.count(), 3); 2569 QCOMPARE(persistentStateChangedSpy.count(), 3); 2570 QCOMPARE(dataChangedSpy.count(), 0); 2571 QCOMPARE(newTrackByNameInListSpy.count(), 0); 2572 QCOMPARE(newEntryInListSpy.count(), 1); 2573 QCOMPARE(currentTrackChangedSpy.count(), 1); 2574 2575 QCOMPARE(myPlayListProxyModel.rowCount(), 6); 2576 2577 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::TitleRole).toString(), QStringLiteral("track1")); 2578 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::AlbumRole).toString(), QStringLiteral("album2")); 2579 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ArtistRole).toString(), QStringLiteral("artist1")); 2580 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::TrackNumberRole).toInt(), 1); 2581 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::DiscNumberRole).toInt(), 1); 2582 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::DurationRole).toTime().msecsSinceStartOfDay(), 5); 2583 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::TitleRole).toString(), QStringLiteral("track2")); 2584 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::AlbumRole).toString(), QStringLiteral("album2")); 2585 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::ArtistRole).toString(), QStringLiteral("artist1")); 2586 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::TrackNumberRole).toInt(), 2); 2587 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::DiscNumberRole).toInt(), 1); 2588 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::DurationRole).toTime().msecsSinceStartOfDay(), 6); 2589 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::TitleRole).toString(), QStringLiteral("track3")); 2590 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::AlbumRole).toString(), QStringLiteral("album2")); 2591 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::ArtistRole).toString(), QStringLiteral("artist1")); 2592 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::TrackNumberRole).toInt(), 3); 2593 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::DiscNumberRole).toInt(), 1); 2594 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::DurationRole).toTime().msecsSinceStartOfDay(), 7); 2595 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(3, 0), MediaPlayList::TitleRole).toString(), QStringLiteral("track4")); 2596 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(3, 0), MediaPlayList::AlbumRole).toString(), QStringLiteral("album2")); 2597 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(3, 0), MediaPlayList::ArtistRole).toString(), QStringLiteral("artist1")); 2598 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(3, 0), MediaPlayList::TrackNumberRole).toInt(), 4); 2599 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(3, 0), MediaPlayList::DiscNumberRole).toInt(), 1); 2600 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(3, 0), MediaPlayList::DurationRole).toTime().msecsSinceStartOfDay(), 8); 2601 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(4, 0), MediaPlayList::TitleRole).toString(), QStringLiteral("track5")); 2602 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(4, 0), MediaPlayList::AlbumRole).toString(), QStringLiteral("album2")); 2603 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(4, 0), MediaPlayList::ArtistRole).toString(), QStringLiteral("artist1")); 2604 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(4, 0), MediaPlayList::TrackNumberRole).toInt(), 5); 2605 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(4, 0), MediaPlayList::DiscNumberRole).toInt(), 1); 2606 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(4, 0), MediaPlayList::DurationRole).toTime().msecsSinceStartOfDay(), 9); 2607 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(5, 0), MediaPlayList::TitleRole).toString(), QStringLiteral("track6")); 2608 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(5, 0), MediaPlayList::AlbumRole).toString(), QStringLiteral("album2")); 2609 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(5, 0), MediaPlayList::ArtistRole).toString(), QStringLiteral("artist1 and artist2")); 2610 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(5, 0), MediaPlayList::TrackNumberRole).toInt(), 6); 2611 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(5, 0), MediaPlayList::DiscNumberRole).toInt(), 1); 2612 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(5, 0), MediaPlayList::DurationRole).toTime().msecsSinceStartOfDay(), 10); 2613 2614 QCOMPARE(myPlayListProxyModel.currentTrack(), QPersistentModelIndex(myPlayListProxyModel.index(0, 0))); 2615 2616 myPlayListProxyModel.clearPlayList(); 2617 2618 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 2); 2619 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 2620 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 2); 2621 QCOMPARE(rowsRemovedSpy.count(), 2); 2622 QCOMPARE(rowsMovedSpy.count(), 0); 2623 QCOMPARE(rowsInsertedSpy.count(), 2); 2624 QCOMPARE(tracksCountChangedSpy.count(), 4); 2625 QCOMPARE(persistentStateChangedSpy.count(), 4); 2626 QCOMPARE(dataChangedSpy.count(), 0); 2627 QCOMPARE(newTrackByNameInListSpy.count(), 0); 2628 QCOMPARE(newEntryInListSpy.count(), 1); 2629 QCOMPARE(currentTrackChangedSpy.count(), 2); 2630 2631 QCOMPARE(myPlayListProxyModel.rowCount(), 0); 2632 2633 QCOMPARE(myPlayListProxyModel.currentTrack().isValid(), false); 2634 } 2635 2636 void MediaPlayListProxyModelTest::undoClearPlayListCase() 2637 { 2638 MediaPlayList myPlayList; 2639 QAbstractItemModelTester testModel(&myPlayList); 2640 MediaPlayListProxyModel myPlayListProxyModel; 2641 myPlayListProxyModel.setPlayListModel(&myPlayList); 2642 QAbstractItemModelTester testProxyModel(&myPlayListProxyModel); 2643 DatabaseInterface myDatabaseContent; 2644 TracksListener myListener(&myDatabaseContent); 2645 2646 QSignalSpy rowsAboutToBeMovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsAboutToBeMoved); 2647 QSignalSpy rowsAboutToBeRemovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsAboutToBeRemoved); 2648 QSignalSpy rowsAboutToBeInsertedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsAboutToBeInserted); 2649 QSignalSpy rowsMovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsMoved); 2650 QSignalSpy rowsRemovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsRemoved); 2651 QSignalSpy rowsInsertedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsInserted); 2652 QSignalSpy tracksCountChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::tracksCountChanged); 2653 QSignalSpy persistentStateChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::persistentStateChanged); 2654 QSignalSpy displayUndoNotificationSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::displayUndoNotification); 2655 QSignalSpy currentTrackChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::currentTrackChanged); 2656 QSignalSpy dataChangedSpy(&myPlayListProxyModel, &MediaPlayList::dataChanged); 2657 QSignalSpy newTrackByNameInListSpy(&myPlayList, &MediaPlayList::newTrackByNameInList); 2658 QSignalSpy newEntryInListSpy(&myPlayList, &MediaPlayList::newEntryInList); 2659 QSignalSpy newUrlInListSpy(&myPlayList, &MediaPlayList::newUrlInList); 2660 2661 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); 2662 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 2663 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 0); 2664 QCOMPARE(rowsRemovedSpy.count(), 0); 2665 QCOMPARE(rowsMovedSpy.count(), 0); 2666 QCOMPARE(rowsInsertedSpy.count(), 0); 2667 QCOMPARE(tracksCountChangedSpy.count(), 0); 2668 QCOMPARE(persistentStateChangedSpy.count(), 0); 2669 QCOMPARE(dataChangedSpy.count(), 0); 2670 QCOMPARE(newTrackByNameInListSpy.count(), 0); 2671 QCOMPARE(newEntryInListSpy.count(), 0); 2672 QCOMPARE(currentTrackChangedSpy.count(), 0); 2673 2674 myDatabaseContent.init(QStringLiteral("testDbDirectContent")); 2675 2676 connect(&myListener, &TracksListener::trackHasChanged, 2677 &myPlayList, &MediaPlayList::trackChanged, 2678 Qt::QueuedConnection); 2679 connect(&myListener, &TracksListener::tracksListAdded, 2680 &myPlayList, &MediaPlayList::tracksListAdded, 2681 Qt::QueuedConnection); 2682 connect(&myPlayList, &MediaPlayList::newTrackByNameInList, 2683 &myListener, &TracksListener::trackByNameInList, 2684 Qt::QueuedConnection); 2685 connect(&myPlayList, &MediaPlayList::newEntryInList, 2686 &myListener, &TracksListener::newEntryInList, 2687 Qt::QueuedConnection); 2688 connect(&myPlayList, &MediaPlayList::newUrlInList, 2689 &myListener, &TracksListener::newUrlInList, 2690 Qt::QueuedConnection); 2691 connect(&myDatabaseContent, &DatabaseInterface::tracksAdded, 2692 &myListener, &TracksListener::tracksAdded); 2693 2694 myDatabaseContent.insertTracksList(mNewTracks, mNewCovers); 2695 2696 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); 2697 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 2698 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 0); 2699 QCOMPARE(rowsRemovedSpy.count(), 0); 2700 QCOMPARE(rowsMovedSpy.count(), 0); 2701 QCOMPARE(rowsInsertedSpy.count(), 0); 2702 QCOMPARE(tracksCountChangedSpy.count(), 0); 2703 QCOMPARE(persistentStateChangedSpy.count(), 0); 2704 QCOMPARE(dataChangedSpy.count(), 0); 2705 QCOMPARE(newTrackByNameInListSpy.count(), 0); 2706 QCOMPARE(newEntryInListSpy.count(), 0); 2707 QCOMPARE(currentTrackChangedSpy.count(), 0); 2708 2709 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Album}, 2710 {DataTypes::DatabaseIdRole, myDatabaseContent.albumIdFromTitleAndArtist(QStringLiteral("album2"), QStringLiteral("artist1"), QStringLiteral("/"))}}, 2711 QStringLiteral("album2"), {}}}, {}, {}); 2712 2713 QVERIFY(rowsAboutToBeInsertedSpy.wait()); 2714 2715 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 1); 2716 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 2717 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 2); 2718 QCOMPARE(rowsRemovedSpy.count(), 1); 2719 QCOMPARE(rowsMovedSpy.count(), 0); 2720 QCOMPARE(rowsInsertedSpy.count(), 2); 2721 QCOMPARE(tracksCountChangedSpy.count(), 3); 2722 QCOMPARE(persistentStateChangedSpy.count(), 3); 2723 QCOMPARE(dataChangedSpy.count(), 0); 2724 QCOMPARE(newTrackByNameInListSpy.count(), 0); 2725 QCOMPARE(newEntryInListSpy.count(), 1); 2726 QCOMPARE(currentTrackChangedSpy.count(), 1); 2727 2728 QCOMPARE(myPlayListProxyModel.rowCount(), 6); 2729 2730 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::TitleRole).toString(), QStringLiteral("track1")); 2731 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::AlbumRole).toString(), QStringLiteral("album2")); 2732 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ArtistRole).toString(), QStringLiteral("artist1")); 2733 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::TrackNumberRole).toInt(), 1); 2734 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::DiscNumberRole).toInt(), 1); 2735 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::DurationRole).toTime().msecsSinceStartOfDay(), 5); 2736 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::TitleRole).toString(), QStringLiteral("track2")); 2737 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::AlbumRole).toString(), QStringLiteral("album2")); 2738 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::ArtistRole).toString(), QStringLiteral("artist1")); 2739 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::TrackNumberRole).toInt(), 2); 2740 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::DiscNumberRole).toInt(), 1); 2741 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::DurationRole).toTime().msecsSinceStartOfDay(), 6); 2742 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::TitleRole).toString(), QStringLiteral("track3")); 2743 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::AlbumRole).toString(), QStringLiteral("album2")); 2744 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::ArtistRole).toString(), QStringLiteral("artist1")); 2745 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::TrackNumberRole).toInt(), 3); 2746 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::DiscNumberRole).toInt(), 1); 2747 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::DurationRole).toTime().msecsSinceStartOfDay(), 7); 2748 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(3, 0), MediaPlayList::TitleRole).toString(), QStringLiteral("track4")); 2749 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(3, 0), MediaPlayList::AlbumRole).toString(), QStringLiteral("album2")); 2750 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(3, 0), MediaPlayList::ArtistRole).toString(), QStringLiteral("artist1")); 2751 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(3, 0), MediaPlayList::TrackNumberRole).toInt(), 4); 2752 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(3, 0), MediaPlayList::DiscNumberRole).toInt(), 1); 2753 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(3, 0), MediaPlayList::DurationRole).toTime().msecsSinceStartOfDay(), 8); 2754 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(4, 0), MediaPlayList::TitleRole).toString(), QStringLiteral("track5")); 2755 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(4, 0), MediaPlayList::AlbumRole).toString(), QStringLiteral("album2")); 2756 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(4, 0), MediaPlayList::ArtistRole).toString(), QStringLiteral("artist1")); 2757 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(4, 0), MediaPlayList::TrackNumberRole).toInt(), 5); 2758 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(4, 0), MediaPlayList::DiscNumberRole).toInt(), 1); 2759 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(4, 0), MediaPlayList::DurationRole).toTime().msecsSinceStartOfDay(), 9); 2760 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(5, 0), MediaPlayList::TitleRole).toString(), QStringLiteral("track6")); 2761 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(5, 0), MediaPlayList::AlbumRole).toString(), QStringLiteral("album2")); 2762 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(5, 0), MediaPlayList::ArtistRole).toString(), QStringLiteral("artist1 and artist2")); 2763 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(5, 0), MediaPlayList::TrackNumberRole).toInt(), 6); 2764 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(5, 0), MediaPlayList::DiscNumberRole).toInt(), 1); 2765 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(5, 0), MediaPlayList::DurationRole).toTime().msecsSinceStartOfDay(), 10); 2766 2767 QCOMPARE(myPlayListProxyModel.currentTrack(), QPersistentModelIndex(myPlayListProxyModel.index(0, 0))); 2768 2769 myPlayListProxyModel.clearPlayList(); 2770 2771 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 2); 2772 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 2773 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 2); 2774 QCOMPARE(rowsRemovedSpy.count(), 2); 2775 QCOMPARE(rowsMovedSpy.count(), 0); 2776 QCOMPARE(rowsInsertedSpy.count(), 2); 2777 QCOMPARE(tracksCountChangedSpy.count(), 4); 2778 QCOMPARE(persistentStateChangedSpy.count(), 4); 2779 QCOMPARE(dataChangedSpy.count(), 0); 2780 QCOMPARE(newTrackByNameInListSpy.count(), 0); 2781 QCOMPARE(newEntryInListSpy.count(), 1); 2782 QCOMPARE(currentTrackChangedSpy.count(), 2); 2783 2784 QCOMPARE(myPlayListProxyModel.rowCount(), 0); 2785 2786 QCOMPARE(myPlayListProxyModel.currentTrack().isValid(), false); 2787 2788 myPlayListProxyModel.undoClearPlayList(); 2789 2790 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 2); 2791 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 2792 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 3); 2793 QCOMPARE(rowsRemovedSpy.count(), 2); 2794 QCOMPARE(rowsMovedSpy.count(), 0); 2795 QCOMPARE(rowsInsertedSpy.count(), 3); 2796 QCOMPARE(tracksCountChangedSpy.count(), 5); 2797 QCOMPARE(persistentStateChangedSpy.count(), 6); 2798 QCOMPARE(dataChangedSpy.count(), 0); 2799 QCOMPARE(newTrackByNameInListSpy.count(), 6); 2800 QCOMPARE(newEntryInListSpy.count(), 1); 2801 QCOMPARE(currentTrackChangedSpy.count(), 3); 2802 QCOMPARE(displayUndoNotificationSpy.count(), 1); 2803 2804 QCOMPARE(myPlayListProxyModel.rowCount(), 6); 2805 2806 QVERIFY(dataChangedSpy.wait()); 2807 2808 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::TitleRole).toString(), QStringLiteral("track1")); 2809 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::AlbumRole).toString(), QStringLiteral("album2")); 2810 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ArtistRole).toString(), QStringLiteral("artist1")); 2811 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::TrackNumberRole).toInt(), 1); 2812 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::DiscNumberRole).toInt(), 1); 2813 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::DurationRole).toTime().msecsSinceStartOfDay(), 5); 2814 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::TitleRole).toString(), QStringLiteral("track2")); 2815 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::AlbumRole).toString(), QStringLiteral("album2")); 2816 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::ArtistRole).toString(), QStringLiteral("artist1")); 2817 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::TrackNumberRole).toInt(), 2); 2818 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::DiscNumberRole).toInt(), 1); 2819 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::DurationRole).toTime().msecsSinceStartOfDay(), 6); 2820 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::TitleRole).toString(), QStringLiteral("track3")); 2821 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::AlbumRole).toString(), QStringLiteral("album2")); 2822 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::ArtistRole).toString(), QStringLiteral("artist1")); 2823 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::TrackNumberRole).toInt(), 3); 2824 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::DiscNumberRole).toInt(), 1); 2825 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::DurationRole).toTime().msecsSinceStartOfDay(), 7); 2826 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(3, 0), MediaPlayList::TitleRole).toString(), QStringLiteral("track4")); 2827 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(3, 0), MediaPlayList::AlbumRole).toString(), QStringLiteral("album2")); 2828 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(3, 0), MediaPlayList::ArtistRole).toString(), QStringLiteral("artist1")); 2829 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(3, 0), MediaPlayList::TrackNumberRole).toInt(), 4); 2830 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(3, 0), MediaPlayList::DiscNumberRole).toInt(), 1); 2831 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(3, 0), MediaPlayList::DurationRole).toTime().msecsSinceStartOfDay(), 8); 2832 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(4, 0), MediaPlayList::TitleRole).toString(), QStringLiteral("track5")); 2833 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(4, 0), MediaPlayList::AlbumRole).toString(), QStringLiteral("album2")); 2834 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(4, 0), MediaPlayList::ArtistRole).toString(), QStringLiteral("artist1")); 2835 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(4, 0), MediaPlayList::TrackNumberRole).toInt(), 5); 2836 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(4, 0), MediaPlayList::DiscNumberRole).toInt(), 1); 2837 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(4, 0), MediaPlayList::DurationRole).toTime().msecsSinceStartOfDay(), 9); 2838 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(5, 0), MediaPlayList::TitleRole).toString(), QStringLiteral("track6")); 2839 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(5, 0), MediaPlayList::AlbumRole).toString(), QStringLiteral("album2")); 2840 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(5, 0), MediaPlayList::ArtistRole).toString(), QStringLiteral("artist1 and artist2")); 2841 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(5, 0), MediaPlayList::TrackNumberRole).toInt(), 6); 2842 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(5, 0), MediaPlayList::DiscNumberRole).toInt(), 1); 2843 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(5, 0), MediaPlayList::DurationRole).toTime().msecsSinceStartOfDay(), 10); 2844 2845 QCOMPARE(myPlayListProxyModel.currentTrack(), QPersistentModelIndex(myPlayListProxyModel.index(0, 0))); 2846 } 2847 2848 void MediaPlayListProxyModelTest::undoReplacePlayListCase() 2849 { 2850 MediaPlayList myPlayList; 2851 QAbstractItemModelTester testModel(&myPlayList); 2852 MediaPlayListProxyModel myPlayListProxyModel; 2853 myPlayListProxyModel.setPlayListModel(&myPlayList); 2854 QAbstractItemModelTester testProxyModel(&myPlayListProxyModel); 2855 DatabaseInterface myDatabaseContent; 2856 TracksListener myListener(&myDatabaseContent); 2857 2858 QSignalSpy rowsAboutToBeMovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsAboutToBeMoved); 2859 QSignalSpy rowsAboutToBeRemovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsAboutToBeRemoved); 2860 QSignalSpy rowsAboutToBeInsertedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsAboutToBeInserted); 2861 QSignalSpy rowsMovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsMoved); 2862 QSignalSpy rowsRemovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsRemoved); 2863 QSignalSpy rowsInsertedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsInserted); 2864 QSignalSpy tracksCountChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::tracksCountChanged); 2865 QSignalSpy persistentStateChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::persistentStateChanged); 2866 QSignalSpy currentTrackChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::currentTrackChanged); 2867 QSignalSpy displayUndoNotificationSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::displayUndoNotification); 2868 QSignalSpy dataChangedSpy(&myPlayListProxyModel, &MediaPlayList::dataChanged); 2869 QSignalSpy newTrackByNameInListSpy(&myPlayList, &MediaPlayList::newTrackByNameInList); 2870 QSignalSpy newEntryInListSpy(&myPlayList, &MediaPlayList::newEntryInList); 2871 QSignalSpy newUrlInListSpy(&myPlayList, &MediaPlayList::newUrlInList); 2872 2873 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); 2874 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 2875 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 0); 2876 QCOMPARE(rowsRemovedSpy.count(), 0); 2877 QCOMPARE(rowsMovedSpy.count(), 0); 2878 QCOMPARE(rowsInsertedSpy.count(), 0); 2879 QCOMPARE(tracksCountChangedSpy.count(), 0); 2880 QCOMPARE(persistentStateChangedSpy.count(), 0); 2881 QCOMPARE(dataChangedSpy.count(), 0); 2882 QCOMPARE(newTrackByNameInListSpy.count(), 0); 2883 QCOMPARE(newEntryInListSpy.count(), 0); 2884 QCOMPARE(currentTrackChangedSpy.count(), 0); 2885 2886 myDatabaseContent.init(QStringLiteral("testDbDirectContent")); 2887 2888 connect(&myListener, &TracksListener::trackHasChanged, 2889 &myPlayList, &MediaPlayList::trackChanged, 2890 Qt::QueuedConnection); 2891 connect(&myListener, &TracksListener::tracksListAdded, 2892 &myPlayList, &MediaPlayList::tracksListAdded, 2893 Qt::QueuedConnection); 2894 connect(&myPlayList, &MediaPlayList::newTrackByNameInList, 2895 &myListener, &TracksListener::trackByNameInList, 2896 Qt::QueuedConnection); 2897 connect(&myPlayList, &MediaPlayList::newEntryInList, 2898 &myListener, &TracksListener::newEntryInList, 2899 Qt::QueuedConnection); 2900 connect(&myPlayList, &MediaPlayList::newUrlInList, 2901 &myListener, &TracksListener::newUrlInList, 2902 Qt::QueuedConnection); 2903 connect(&myDatabaseContent, &DatabaseInterface::tracksAdded, 2904 &myListener, &TracksListener::tracksAdded); 2905 2906 myDatabaseContent.insertTracksList(mNewTracks, mNewCovers); 2907 2908 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); 2909 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 2910 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 0); 2911 QCOMPARE(rowsRemovedSpy.count(), 0); 2912 QCOMPARE(rowsMovedSpy.count(), 0); 2913 QCOMPARE(rowsInsertedSpy.count(), 0); 2914 QCOMPARE(tracksCountChangedSpy.count(), 0); 2915 QCOMPARE(persistentStateChangedSpy.count(), 0); 2916 QCOMPARE(dataChangedSpy.count(), 0); 2917 QCOMPARE(newTrackByNameInListSpy.count(), 0); 2918 QCOMPARE(newEntryInListSpy.count(), 0); 2919 QCOMPARE(currentTrackChangedSpy.count(), 0); 2920 2921 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Album}, 2922 {DataTypes::DatabaseIdRole, myDatabaseContent.albumIdFromTitleAndArtist(QStringLiteral("album2"), QStringLiteral("artist1"), QStringLiteral("/"))}}, 2923 QStringLiteral("album2"), {}}}, {}, {}); 2924 2925 QVERIFY(rowsAboutToBeInsertedSpy.wait()); 2926 2927 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 1); 2928 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 2929 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 2); 2930 QCOMPARE(rowsRemovedSpy.count(), 1); 2931 QCOMPARE(rowsMovedSpy.count(), 0); 2932 QCOMPARE(rowsInsertedSpy.count(), 2); 2933 QCOMPARE(tracksCountChangedSpy.count(), 3); 2934 QCOMPARE(persistentStateChangedSpy.count(), 3); 2935 QCOMPARE(dataChangedSpy.count(), 0); 2936 QCOMPARE(newTrackByNameInListSpy.count(), 0); 2937 QCOMPARE(newEntryInListSpy.count(), 1); 2938 QCOMPARE(currentTrackChangedSpy.count(), 1); 2939 2940 QCOMPARE(myPlayListProxyModel.rowCount(), 6); 2941 2942 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::TitleRole).toString(), QStringLiteral("track1")); 2943 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::AlbumRole).toString(), QStringLiteral("album2")); 2944 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ArtistRole).toString(), QStringLiteral("artist1")); 2945 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::TrackNumberRole).toInt(), 1); 2946 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::DiscNumberRole).toInt(), 1); 2947 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::DurationRole).toTime().msecsSinceStartOfDay(), 5); 2948 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::TitleRole).toString(), QStringLiteral("track2")); 2949 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::AlbumRole).toString(), QStringLiteral("album2")); 2950 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::ArtistRole).toString(), QStringLiteral("artist1")); 2951 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::TrackNumberRole).toInt(), 2); 2952 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::DiscNumberRole).toInt(), 1); 2953 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::DurationRole).toTime().msecsSinceStartOfDay(), 6); 2954 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::TitleRole).toString(), QStringLiteral("track3")); 2955 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::AlbumRole).toString(), QStringLiteral("album2")); 2956 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::ArtistRole).toString(), QStringLiteral("artist1")); 2957 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::TrackNumberRole).toInt(), 3); 2958 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::DiscNumberRole).toInt(), 1); 2959 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::DurationRole).toTime().msecsSinceStartOfDay(), 7); 2960 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(3, 0), MediaPlayList::TitleRole).toString(), QStringLiteral("track4")); 2961 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(3, 0), MediaPlayList::AlbumRole).toString(), QStringLiteral("album2")); 2962 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(3, 0), MediaPlayList::ArtistRole).toString(), QStringLiteral("artist1")); 2963 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(3, 0), MediaPlayList::TrackNumberRole).toInt(), 4); 2964 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(3, 0), MediaPlayList::DiscNumberRole).toInt(), 1); 2965 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(3, 0), MediaPlayList::DurationRole).toTime().msecsSinceStartOfDay(), 8); 2966 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(4, 0), MediaPlayList::TitleRole).toString(), QStringLiteral("track5")); 2967 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(4, 0), MediaPlayList::AlbumRole).toString(), QStringLiteral("album2")); 2968 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(4, 0), MediaPlayList::ArtistRole).toString(), QStringLiteral("artist1")); 2969 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(4, 0), MediaPlayList::TrackNumberRole).toInt(), 5); 2970 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(4, 0), MediaPlayList::DiscNumberRole).toInt(), 1); 2971 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(4, 0), MediaPlayList::DurationRole).toTime().msecsSinceStartOfDay(), 9); 2972 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(5, 0), MediaPlayList::TitleRole).toString(), QStringLiteral("track6")); 2973 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(5, 0), MediaPlayList::AlbumRole).toString(), QStringLiteral("album2")); 2974 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(5, 0), MediaPlayList::ArtistRole).toString(), QStringLiteral("artist1 and artist2")); 2975 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(5, 0), MediaPlayList::TrackNumberRole).toInt(), 6); 2976 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(5, 0), MediaPlayList::DiscNumberRole).toInt(), 1); 2977 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(5, 0), MediaPlayList::DurationRole).toTime().msecsSinceStartOfDay(), 10); 2978 2979 QCOMPARE(myPlayListProxyModel.currentTrack(), QPersistentModelIndex(myPlayListProxyModel.index(0, 0))); 2980 2981 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Album}, 2982 {DataTypes::DatabaseIdRole, myDatabaseContent.albumIdFromTitleAndArtist(QStringLiteral("album1"), QStringLiteral("Various Artists"), QStringLiteral("/"))}}, 2983 QStringLiteral("album1"), {}}}, 2984 ElisaUtils::ReplacePlayList, 2985 ElisaUtils::TriggerPlay); 2986 2987 QVERIFY(rowsAboutToBeInsertedSpy.wait()); 2988 2989 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 3); 2990 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 2991 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 4); 2992 QCOMPARE(rowsRemovedSpy.count(), 3); 2993 QCOMPARE(rowsMovedSpy.count(), 0); 2994 QCOMPARE(rowsInsertedSpy.count(), 4); 2995 QCOMPARE(persistentStateChangedSpy.count(), 7); 2996 QCOMPARE(dataChangedSpy.count(), 0); 2997 QCOMPARE(newTrackByNameInListSpy.count(), 0); 2998 QCOMPARE(newEntryInListSpy.count(), 2); 2999 QCOMPARE(currentTrackChangedSpy.count(), 3); 3000 3001 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::TitleRole).toString(), QStringLiteral("track1")); 3002 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::AlbumRole).toString(), QStringLiteral("album1")); 3003 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ArtistRole).toString(), QStringLiteral("artist1")); 3004 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::TrackNumberRole).toInt(), 1); 3005 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::DiscNumberRole).toInt(), 1); 3006 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::DurationRole).toTime().msecsSinceStartOfDay(), 1); 3007 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::TitleRole).toString(), QStringLiteral("track2")); 3008 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::AlbumRole).toString(), QStringLiteral("album1")); 3009 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::ArtistRole).toString(), QStringLiteral("artist2")); 3010 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::TrackNumberRole).toInt(), 2); 3011 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::DiscNumberRole).toInt(), 2); 3012 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::DurationRole).toTime().msecsSinceStartOfDay(), 2); 3013 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::TitleRole).toString(), QStringLiteral("track3")); 3014 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::AlbumRole).toString(), QStringLiteral("album1")); 3015 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::ArtistRole).toString(), QStringLiteral("artist3")); 3016 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::TrackNumberRole).toInt(), 3); 3017 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::DiscNumberRole).toInt(), 3); 3018 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::DurationRole).toTime().msecsSinceStartOfDay(), 3); 3019 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(3, 0), MediaPlayList::TitleRole).toString(), QStringLiteral("track4")); 3020 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(3, 0), MediaPlayList::AlbumRole).toString(), QStringLiteral("album1")); 3021 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(3, 0), MediaPlayList::ArtistRole).toString(), QStringLiteral("artist4")); 3022 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(3, 0), MediaPlayList::TrackNumberRole).toInt(), 4); 3023 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(3, 0), MediaPlayList::DiscNumberRole).toInt(), 4); 3024 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(3, 0), MediaPlayList::DurationRole).toTime().msecsSinceStartOfDay(), 4); 3025 3026 myPlayListProxyModel.undoClearPlayList(); 3027 3028 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 4); 3029 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 3030 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 5); 3031 QCOMPARE(rowsRemovedSpy.count(), 4); 3032 QCOMPARE(rowsMovedSpy.count(), 0); 3033 QCOMPARE(rowsInsertedSpy.count(), 5); 3034 QCOMPARE(tracksCountChangedSpy.count(), 9); 3035 QCOMPARE(persistentStateChangedSpy.count(), 10); 3036 QCOMPARE(dataChangedSpy.count(), 0); 3037 QCOMPARE(newTrackByNameInListSpy.count(), 6); 3038 QCOMPARE(newEntryInListSpy.count(), 2); 3039 QCOMPARE(currentTrackChangedSpy.count(), 5); 3040 QCOMPARE(displayUndoNotificationSpy.count(), 1); 3041 3042 QCOMPARE(myPlayListProxyModel.rowCount(), 6); 3043 3044 QVERIFY(dataChangedSpy.wait()); 3045 3046 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::TitleRole).toString(), QStringLiteral("track1")); 3047 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::AlbumRole).toString(), QStringLiteral("album2")); 3048 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ArtistRole).toString(), QStringLiteral("artist1")); 3049 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::TrackNumberRole).toInt(), 1); 3050 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::DiscNumberRole).toInt(), 1); 3051 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::DurationRole).toTime().msecsSinceStartOfDay(), 5); 3052 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::TitleRole).toString(), QStringLiteral("track2")); 3053 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::AlbumRole).toString(), QStringLiteral("album2")); 3054 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::ArtistRole).toString(), QStringLiteral("artist1")); 3055 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::TrackNumberRole).toInt(), 2); 3056 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::DiscNumberRole).toInt(), 1); 3057 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::DurationRole).toTime().msecsSinceStartOfDay(), 6); 3058 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::TitleRole).toString(), QStringLiteral("track3")); 3059 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::AlbumRole).toString(), QStringLiteral("album2")); 3060 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::ArtistRole).toString(), QStringLiteral("artist1")); 3061 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::TrackNumberRole).toInt(), 3); 3062 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::DiscNumberRole).toInt(), 1); 3063 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::DurationRole).toTime().msecsSinceStartOfDay(), 7); 3064 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(3, 0), MediaPlayList::TitleRole).toString(), QStringLiteral("track4")); 3065 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(3, 0), MediaPlayList::AlbumRole).toString(), QStringLiteral("album2")); 3066 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(3, 0), MediaPlayList::ArtistRole).toString(), QStringLiteral("artist1")); 3067 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(3, 0), MediaPlayList::TrackNumberRole).toInt(), 4); 3068 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(3, 0), MediaPlayList::DiscNumberRole).toInt(), 1); 3069 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(3, 0), MediaPlayList::DurationRole).toTime().msecsSinceStartOfDay(), 8); 3070 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(4, 0), MediaPlayList::TitleRole).toString(), QStringLiteral("track5")); 3071 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(4, 0), MediaPlayList::AlbumRole).toString(), QStringLiteral("album2")); 3072 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(4, 0), MediaPlayList::ArtistRole).toString(), QStringLiteral("artist1")); 3073 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(4, 0), MediaPlayList::TrackNumberRole).toInt(), 5); 3074 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(4, 0), MediaPlayList::DiscNumberRole).toInt(), 1); 3075 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(4, 0), MediaPlayList::DurationRole).toTime().msecsSinceStartOfDay(), 9); 3076 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(5, 0), MediaPlayList::TitleRole).toString(), QStringLiteral("track6")); 3077 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(5, 0), MediaPlayList::AlbumRole).toString(), QStringLiteral("album2")); 3078 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(5, 0), MediaPlayList::ArtistRole).toString(), QStringLiteral("artist1 and artist2")); 3079 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(5, 0), MediaPlayList::TrackNumberRole).toInt(), 6); 3080 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(5, 0), MediaPlayList::DiscNumberRole).toInt(), 1); 3081 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(5, 0), MediaPlayList::DurationRole).toTime().msecsSinceStartOfDay(), 10); 3082 3083 QCOMPARE(myPlayListProxyModel.currentTrack(), QPersistentModelIndex(myPlayListProxyModel.index(0, 0))); 3084 } 3085 3086 void MediaPlayListProxyModelTest::testBringUpAndSkipPreviousAndContinueCase() 3087 { 3088 MediaPlayList myPlayList; 3089 QAbstractItemModelTester testModel(&myPlayList); 3090 MediaPlayListProxyModel myPlayListProxyModel; 3091 myPlayListProxyModel.setPlayListModel(&myPlayList); 3092 QAbstractItemModelTester testProxyModel(&myPlayListProxyModel); 3093 DatabaseInterface myDatabaseContent; 3094 TracksListener myListener(&myDatabaseContent); 3095 3096 QSignalSpy currentTrackChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::currentTrackChanged); 3097 QSignalSpy shufflePlayListChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::shufflePlayListChanged); 3098 QSignalSpy repeatModeChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::repeatModeChanged); 3099 QSignalSpy playListFinishedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::playListFinished); 3100 3101 myDatabaseContent.init(QStringLiteral("testDbDirectContent")); 3102 3103 connect(&myListener, &TracksListener::trackHasChanged, 3104 &myPlayList, &MediaPlayList::trackChanged, 3105 Qt::QueuedConnection); 3106 connect(&myListener, &TracksListener::tracksListAdded, 3107 &myPlayList, &MediaPlayList::tracksListAdded, 3108 Qt::QueuedConnection); 3109 connect(&myPlayList, &MediaPlayList::newTrackByNameInList, 3110 &myListener, &TracksListener::trackByNameInList, 3111 Qt::QueuedConnection); 3112 connect(&myPlayList, &MediaPlayList::newEntryInList, 3113 &myListener, &TracksListener::newEntryInList, 3114 Qt::QueuedConnection); 3115 connect(&myPlayList, &MediaPlayList::newUrlInList, 3116 &myListener, &TracksListener::newUrlInList, 3117 Qt::QueuedConnection); 3118 connect(&myDatabaseContent, &DatabaseInterface::tracksAdded, 3119 &myListener, &TracksListener::tracksAdded); 3120 3121 QCOMPARE(currentTrackChangedSpy.count(), 0); 3122 QCOMPARE(shufflePlayListChangedSpy.count(), 0); 3123 QCOMPARE(repeatModeChangedSpy.count(), 0); 3124 QCOMPARE(playListFinishedSpy.count(), 0); 3125 3126 myPlayListProxyModel.setRepeatMode(MediaPlayListProxyModel::Repeat::Playlist); 3127 3128 QCOMPARE(currentTrackChangedSpy.count(), 0); 3129 QCOMPARE(shufflePlayListChangedSpy.count(), 0); 3130 QCOMPARE(repeatModeChangedSpy.count(), 1); 3131 QCOMPARE(playListFinishedSpy.count(), 0); 3132 3133 myDatabaseContent.insertTracksList(mNewTracks, mNewCovers); 3134 3135 QCOMPARE(currentTrackChangedSpy.count(), 0); 3136 QCOMPARE(shufflePlayListChangedSpy.count(), 0); 3137 QCOMPARE(repeatModeChangedSpy.count(), 1); 3138 QCOMPARE(playListFinishedSpy.count(), 0); 3139 3140 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track}, 3141 {DataTypes::DatabaseIdRole, myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track1"), QStringLiteral("artist1"), QStringLiteral("album2"), 1, 1)}}, 3142 QStringLiteral("track1"), {}}}, {}, {}); 3143 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track}, 3144 {DataTypes::DatabaseIdRole, myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track3"), QStringLiteral("artist3"), QStringLiteral("album1"), 3, 3)}}, 3145 QStringLiteral("track3"), {}}}, {}, {}); 3146 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track}, 3147 {DataTypes::DatabaseIdRole, myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track2"), QStringLiteral("artist1"), QStringLiteral("album2"), 2, 1)}}, 3148 QStringLiteral("track2"), {}}}, {}, {}); 3149 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track}, 3150 {DataTypes::DatabaseIdRole, myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track1"), QStringLiteral("artist1"), QStringLiteral("album2"), 1, 1)}}, 3151 QStringLiteral("track1"), {}}}, {}, {}); 3152 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track}, 3153 {DataTypes::DatabaseIdRole, myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track3"), QStringLiteral("artist1"), QStringLiteral("album2"), 3, 1)}}, 3154 QStringLiteral("track3"), {}}}, {}, {}); 3155 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track}, 3156 {DataTypes::DatabaseIdRole, myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track2"), QStringLiteral("artist1"), QStringLiteral("album1"), 2, 2)}}, 3157 QStringLiteral("track2"), {}}}, {}, {}); 3158 3159 QCOMPARE(currentTrackChangedSpy.count(), 1); 3160 QCOMPARE(shufflePlayListChangedSpy.count(), 0); 3161 QCOMPARE(repeatModeChangedSpy.count(), 1); 3162 QCOMPARE(playListFinishedSpy.count(), 0); 3163 3164 QCOMPARE(myPlayListProxyModel.currentTrack(), QPersistentModelIndex(myPlayListProxyModel.index(0, 0))); 3165 3166 myPlayListProxyModel.skipNextTrack(); 3167 3168 QCOMPARE(currentTrackChangedSpy.count(), 2); 3169 QCOMPARE(shufflePlayListChangedSpy.count(), 0); 3170 QCOMPARE(repeatModeChangedSpy.count(), 1); 3171 QCOMPARE(playListFinishedSpy.count(), 0); 3172 3173 QCOMPARE(myPlayListProxyModel.currentTrack(), QPersistentModelIndex(myPlayListProxyModel.index(1, 0))); 3174 3175 myPlayListProxyModel.skipNextTrack(); 3176 3177 QCOMPARE(currentTrackChangedSpy.count(), 3); 3178 QCOMPARE(shufflePlayListChangedSpy.count(), 0); 3179 QCOMPARE(repeatModeChangedSpy.count(), 1); 3180 QCOMPARE(playListFinishedSpy.count(), 0); 3181 3182 QCOMPARE(myPlayListProxyModel.currentTrack(), QPersistentModelIndex(myPlayListProxyModel.index(2, 0))); 3183 3184 myPlayListProxyModel.skipNextTrack(); 3185 3186 QCOMPARE(currentTrackChangedSpy.count(), 4); 3187 QCOMPARE(shufflePlayListChangedSpy.count(), 0); 3188 QCOMPARE(repeatModeChangedSpy.count(), 1); 3189 QCOMPARE(playListFinishedSpy.count(), 0); 3190 3191 QCOMPARE(myPlayListProxyModel.currentTrack(), QPersistentModelIndex(myPlayListProxyModel.index(3, 0))); 3192 3193 myPlayListProxyModel.skipNextTrack(); 3194 3195 QCOMPARE(currentTrackChangedSpy.count(), 5); 3196 QCOMPARE(shufflePlayListChangedSpy.count(), 0); 3197 QCOMPARE(repeatModeChangedSpy.count(), 1); 3198 QCOMPARE(playListFinishedSpy.count(), 0); 3199 3200 QCOMPARE(myPlayListProxyModel.currentTrack(), QPersistentModelIndex(myPlayListProxyModel.index(4, 0))); 3201 3202 myPlayListProxyModel.skipNextTrack(); 3203 3204 QCOMPARE(currentTrackChangedSpy.count(), 6); 3205 QCOMPARE(shufflePlayListChangedSpy.count(), 0); 3206 QCOMPARE(repeatModeChangedSpy.count(), 1); 3207 QCOMPARE(playListFinishedSpy.count(), 0); 3208 3209 QCOMPARE(myPlayListProxyModel.currentTrack(), QPersistentModelIndex(myPlayListProxyModel.index(5, 0))); 3210 3211 myPlayListProxyModel.skipPreviousTrack(0); 3212 3213 QCOMPARE(currentTrackChangedSpy.count(), 7); 3214 QCOMPARE(shufflePlayListChangedSpy.count(), 0); 3215 QCOMPARE(repeatModeChangedSpy.count(), 1); 3216 QCOMPARE(playListFinishedSpy.count(), 0); 3217 3218 QCOMPARE(myPlayListProxyModel.currentTrack(), QPersistentModelIndex(myPlayListProxyModel.index(4, 0))); 3219 3220 myPlayListProxyModel.skipPreviousTrack(0); 3221 3222 QCOMPARE(currentTrackChangedSpy.count(), 8); 3223 QCOMPARE(shufflePlayListChangedSpy.count(), 0); 3224 QCOMPARE(repeatModeChangedSpy.count(), 1); 3225 QCOMPARE(playListFinishedSpy.count(), 0); 3226 3227 QCOMPARE(myPlayListProxyModel.currentTrack(), QPersistentModelIndex(myPlayListProxyModel.index(3, 0))); 3228 3229 myPlayListProxyModel.skipPreviousTrack(0); 3230 3231 QCOMPARE(currentTrackChangedSpy.count(), 9); 3232 QCOMPARE(shufflePlayListChangedSpy.count(), 0); 3233 QCOMPARE(repeatModeChangedSpy.count(), 1); 3234 QCOMPARE(playListFinishedSpy.count(), 0); 3235 3236 QCOMPARE(myPlayListProxyModel.currentTrack(), QPersistentModelIndex(myPlayListProxyModel.index(2, 0))); 3237 3238 myPlayListProxyModel.skipPreviousTrack(0); 3239 3240 QCOMPARE(currentTrackChangedSpy.count(), 10); 3241 QCOMPARE(shufflePlayListChangedSpy.count(), 0); 3242 QCOMPARE(repeatModeChangedSpy.count(), 1); 3243 QCOMPARE(playListFinishedSpy.count(), 0); 3244 3245 QCOMPARE(myPlayListProxyModel.currentTrack(), QPersistentModelIndex(myPlayListProxyModel.index(1, 0))); 3246 3247 myPlayListProxyModel.skipPreviousTrack(0); 3248 3249 QCOMPARE(currentTrackChangedSpy.count(), 11); 3250 QCOMPARE(shufflePlayListChangedSpy.count(), 0); 3251 QCOMPARE(repeatModeChangedSpy.count(), 1); 3252 QCOMPARE(playListFinishedSpy.count(), 0); 3253 3254 QCOMPARE(myPlayListProxyModel.currentTrack(), QPersistentModelIndex(myPlayListProxyModel.index(0, 0))); 3255 3256 myPlayListProxyModel.skipPreviousTrack(0); 3257 3258 QCOMPARE(currentTrackChangedSpy.count(), 12); 3259 QCOMPARE(shufflePlayListChangedSpy.count(), 0); 3260 QCOMPARE(repeatModeChangedSpy.count(), 1); 3261 QCOMPARE(playListFinishedSpy.count(), 0); 3262 3263 QCOMPARE(myPlayListProxyModel.currentTrack(), QPersistentModelIndex(myPlayListProxyModel.index(5, 0))); 3264 3265 myPlayListProxyModel.setRepeatMode(MediaPlayListProxyModel::Repeat::One); 3266 3267 QCOMPARE(currentTrackChangedSpy.count(), 12); 3268 QCOMPARE(shufflePlayListChangedSpy.count(), 0); 3269 QCOMPARE(repeatModeChangedSpy.count(), 2); 3270 QCOMPARE(playListFinishedSpy.count(), 0); 3271 3272 QCOMPARE(myPlayListProxyModel.nextTrack(), QPersistentModelIndex(myPlayListProxyModel.index(5, 0))); 3273 QCOMPARE(myPlayListProxyModel.currentTrack(), QPersistentModelIndex(myPlayListProxyModel.index(5, 0))); 3274 QCOMPARE(myPlayListProxyModel.previousTrack(), QPersistentModelIndex(myPlayListProxyModel.index(5, 0))); 3275 3276 myPlayListProxyModel.skipPreviousTrack(0); 3277 3278 QCOMPARE(myPlayListProxyModel.nextTrack(), QPersistentModelIndex(myPlayListProxyModel.index(4, 0))); 3279 QCOMPARE(myPlayListProxyModel.currentTrack(), QPersistentModelIndex(myPlayListProxyModel.index(4, 0))); 3280 QCOMPARE(myPlayListProxyModel.previousTrack(), QPersistentModelIndex(myPlayListProxyModel.index(4, 0))); 3281 3282 myPlayListProxyModel.skipPreviousTrack(2001); 3283 3284 QCOMPARE(myPlayListProxyModel.nextTrack(), QPersistentModelIndex(myPlayListProxyModel.index(4, 0))); 3285 QCOMPARE(myPlayListProxyModel.currentTrack(), QPersistentModelIndex(myPlayListProxyModel.index(4, 0))); 3286 QCOMPARE(myPlayListProxyModel.previousTrack(), QPersistentModelIndex(myPlayListProxyModel.index(4, 0))); 3287 3288 myPlayListProxyModel.skipNextTrack(); 3289 3290 QCOMPARE(myPlayListProxyModel.nextTrack(), QPersistentModelIndex(myPlayListProxyModel.index(4, 0))); 3291 QCOMPARE(myPlayListProxyModel.currentTrack(), QPersistentModelIndex(myPlayListProxyModel.index(4, 0))); 3292 QCOMPARE(myPlayListProxyModel.previousTrack(), QPersistentModelIndex(myPlayListProxyModel.index(4, 0))); 3293 3294 myPlayListProxyModel.skipNextTrack(ElisaUtils::SkipReason::Manual); 3295 3296 QCOMPARE(myPlayListProxyModel.nextTrack(), QPersistentModelIndex(myPlayListProxyModel.index(5, 0))); 3297 QCOMPARE(myPlayListProxyModel.currentTrack(), QPersistentModelIndex(myPlayListProxyModel.index(5, 0))); 3298 QCOMPARE(myPlayListProxyModel.previousTrack(), QPersistentModelIndex(myPlayListProxyModel.index(5, 0))); 3299 3300 myPlayListProxyModel.skipNextTrack(ElisaUtils::SkipReason::Manual); 3301 3302 QCOMPARE(myPlayListProxyModel.nextTrack(), QPersistentModelIndex(myPlayListProxyModel.index(0, 0))); 3303 QCOMPARE(myPlayListProxyModel.currentTrack(), QPersistentModelIndex(myPlayListProxyModel.index(0, 0))); 3304 QCOMPARE(myPlayListProxyModel.previousTrack(), QPersistentModelIndex(myPlayListProxyModel.index(0, 0))); 3305 } 3306 3307 void MediaPlayListProxyModelTest::testBringUpAndRemoveMultipleNotBeginCase() 3308 { 3309 MediaPlayList myPlayList; 3310 QAbstractItemModelTester testModel(&myPlayList); 3311 MediaPlayListProxyModel myPlayListProxyModel; 3312 myPlayListProxyModel.setPlayListModel(&myPlayList); 3313 QAbstractItemModelTester testProxyModel(&myPlayListProxyModel); 3314 DatabaseInterface myDatabaseContent; 3315 TracksListener myListener(&myDatabaseContent); 3316 3317 QSignalSpy currentTrackChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::currentTrackChanged); 3318 QSignalSpy playListFinishedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::playListFinished); 3319 3320 myDatabaseContent.init(QStringLiteral("testDbDirectContent")); 3321 3322 connect(&myListener, &TracksListener::trackHasChanged, 3323 &myPlayList, &MediaPlayList::trackChanged, 3324 Qt::QueuedConnection); 3325 connect(&myListener, &TracksListener::tracksListAdded, 3326 &myPlayList, &MediaPlayList::tracksListAdded, 3327 Qt::QueuedConnection); 3328 connect(&myPlayList, &MediaPlayList::newTrackByNameInList, 3329 &myListener, &TracksListener::trackByNameInList, 3330 Qt::QueuedConnection); 3331 connect(&myPlayList, &MediaPlayList::newEntryInList, 3332 &myListener, &TracksListener::newEntryInList, 3333 Qt::QueuedConnection); 3334 connect(&myPlayList, &MediaPlayList::newUrlInList, 3335 &myListener, &TracksListener::newUrlInList, 3336 Qt::QueuedConnection); 3337 connect(&myDatabaseContent, &DatabaseInterface::tracksAdded, 3338 &myListener, &TracksListener::tracksAdded); 3339 3340 myDatabaseContent.insertTracksList(mNewTracks, mNewCovers); 3341 3342 QCOMPARE(currentTrackChangedSpy.count(), 0); 3343 QCOMPARE(playListFinishedSpy.count(), 0); 3344 3345 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track}, 3346 {DataTypes::DatabaseIdRole, myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track1"), QStringLiteral("artist1"), QStringLiteral("album2"), 1, 1)}}, 3347 QStringLiteral("track1"), {}}}, {}, {}); 3348 3349 QCOMPARE(currentTrackChangedSpy.count(), 1); 3350 QCOMPARE(playListFinishedSpy.count(), 0); 3351 3352 QCOMPARE(myPlayListProxyModel.currentTrack(), QPersistentModelIndex(myPlayListProxyModel.index(0, 0))); 3353 3354 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track}, 3355 {DataTypes::DatabaseIdRole, myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track2"), QStringLiteral("artist1"), QStringLiteral("album1"), 2, 2)}}, 3356 QStringLiteral("track2"), {}}}, {}, {}); 3357 3358 QCOMPARE(currentTrackChangedSpy.count(), 1); 3359 QCOMPARE(playListFinishedSpy.count(), 0); 3360 3361 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track}, 3362 {DataTypes::DatabaseIdRole, myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track4"), QStringLiteral("artist1"), QStringLiteral("album1"), 4, 1)}}, 3363 QStringLiteral("track4"), {}}}, {}, {}); 3364 3365 QCOMPARE(currentTrackChangedSpy.count(), 1); 3366 QCOMPARE(playListFinishedSpy.count(), 0); 3367 3368 myPlayListProxyModel.skipNextTrack(); 3369 3370 QCOMPARE(currentTrackChangedSpy.count(), 2); 3371 QCOMPARE(playListFinishedSpy.count(), 0); 3372 3373 qDebug() << myPlayListProxyModel.currentTrack() << QPersistentModelIndex(myPlayListProxyModel.index(1, 0)); 3374 QCOMPARE(myPlayListProxyModel.currentTrack(), QPersistentModelIndex(myPlayListProxyModel.index(1, 0))); 3375 3376 myPlayListProxyModel.removeRow(1); 3377 3378 QCOMPARE(currentTrackChangedSpy.count(), 3); 3379 QCOMPARE(playListFinishedSpy.count(), 0); 3380 3381 QCOMPARE(myPlayListProxyModel.currentTrack(), QPersistentModelIndex(myPlayListProxyModel.index(1, 0))); 3382 } 3383 3384 void MediaPlayListProxyModelTest::testBringUpAndPlayCase() 3385 { 3386 MediaPlayList myPlayList; 3387 QAbstractItemModelTester testModel(&myPlayList); 3388 MediaPlayListProxyModel myPlayListProxyModel; 3389 myPlayListProxyModel.setPlayListModel(&myPlayList); 3390 QAbstractItemModelTester testProxyModel(&myPlayListProxyModel); 3391 DatabaseInterface myDatabaseContent; 3392 TracksListener myListener(&myDatabaseContent); 3393 3394 QSignalSpy currentTrackChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::currentTrackChanged); 3395 QSignalSpy playListFinishedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::playListFinished); 3396 3397 myDatabaseContent.init(QStringLiteral("testDbDirectContent")); 3398 3399 connect(&myListener, &TracksListener::trackHasChanged, 3400 &myPlayList, &MediaPlayList::trackChanged, 3401 Qt::QueuedConnection); 3402 connect(&myListener, &TracksListener::tracksListAdded, 3403 &myPlayList, &MediaPlayList::tracksListAdded, 3404 Qt::QueuedConnection); 3405 connect(&myPlayList, &MediaPlayList::newTrackByNameInList, 3406 &myListener, &TracksListener::trackByNameInList, 3407 Qt::QueuedConnection); 3408 connect(&myPlayList, &MediaPlayList::newEntryInList, 3409 &myListener, &TracksListener::newEntryInList, 3410 Qt::QueuedConnection); 3411 connect(&myPlayList, &MediaPlayList::newUrlInList, 3412 &myListener, &TracksListener::newUrlInList, 3413 Qt::QueuedConnection); 3414 connect(&myDatabaseContent, &DatabaseInterface::tracksAdded, 3415 &myListener, &TracksListener::tracksAdded); 3416 3417 myDatabaseContent.insertTracksList(mNewTracks, mNewCovers); 3418 3419 QCOMPARE(currentTrackChangedSpy.count(), 0); 3420 QCOMPARE(playListFinishedSpy.count(), 0); 3421 3422 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track}, 3423 {DataTypes::DatabaseIdRole, myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track1"), QStringLiteral("artist1"), QStringLiteral("album2"), 1, 1)}}, 3424 QStringLiteral("track1"), {}}}, {}, {}); 3425 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track}, 3426 {DataTypes::DatabaseIdRole, myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track3"), QStringLiteral("artist2"), QStringLiteral("album1"), 3, 3)}}, 3427 QStringLiteral("track3"), {}}}, {}, {}); 3428 3429 QCOMPARE(currentTrackChangedSpy.count(), 1); 3430 QCOMPARE(playListFinishedSpy.count(), 0); 3431 3432 QCOMPARE(myPlayListProxyModel.currentTrack(), QPersistentModelIndex(myPlayListProxyModel.index(0, 0))); 3433 3434 myPlayListProxyModel.skipNextTrack(); 3435 3436 QCOMPARE(currentTrackChangedSpy.count(), 2); 3437 QCOMPARE(playListFinishedSpy.count(), 0); 3438 3439 QCOMPARE(myPlayListProxyModel.currentTrack(), QPersistentModelIndex(myPlayListProxyModel.index(1, 0))); 3440 } 3441 3442 void MediaPlayListProxyModelTest::testBringUpAndSkipNextCase() 3443 { 3444 MediaPlayList myPlayList; 3445 QAbstractItemModelTester testModel(&myPlayList); 3446 MediaPlayListProxyModel myPlayListProxyModel; 3447 myPlayListProxyModel.setPlayListModel(&myPlayList); 3448 QAbstractItemModelTester testProxyModel(&myPlayListProxyModel); 3449 DatabaseInterface myDatabaseContent; 3450 TracksListener myListener(&myDatabaseContent); 3451 3452 QSignalSpy currentTrackChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::currentTrackChanged); 3453 QSignalSpy playListFinishedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::playListFinished); 3454 3455 myDatabaseContent.init(QStringLiteral("testDbDirectContent")); 3456 3457 connect(&myListener, &TracksListener::trackHasChanged, 3458 &myPlayList, &MediaPlayList::trackChanged, 3459 Qt::QueuedConnection); 3460 connect(&myListener, &TracksListener::tracksListAdded, 3461 &myPlayList, &MediaPlayList::tracksListAdded, 3462 Qt::QueuedConnection); 3463 connect(&myPlayList, &MediaPlayList::newTrackByNameInList, 3464 &myListener, &TracksListener::trackByNameInList, 3465 Qt::QueuedConnection); 3466 connect(&myPlayList, &MediaPlayList::newEntryInList, 3467 &myListener, &TracksListener::newEntryInList, 3468 Qt::QueuedConnection); 3469 connect(&myPlayList, &MediaPlayList::newUrlInList, 3470 &myListener, &TracksListener::newUrlInList, 3471 Qt::QueuedConnection); 3472 connect(&myDatabaseContent, &DatabaseInterface::tracksAdded, 3473 &myListener, &TracksListener::tracksAdded); 3474 3475 myDatabaseContent.insertTracksList(mNewTracks, mNewCovers); 3476 3477 QCOMPARE(currentTrackChangedSpy.count(), 0); 3478 QCOMPARE(playListFinishedSpy.count(), 0); 3479 3480 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track}, 3481 {DataTypes::DatabaseIdRole, myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track1"), QStringLiteral("artist1"), QStringLiteral("album2"), 1, 1)}}, 3482 QStringLiteral("track1"), {}}}, {}, {}); 3483 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track}, 3484 {DataTypes::DatabaseIdRole, myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track3"), QStringLiteral("artist2"), QStringLiteral("album1"), 3, 3)}}, 3485 QStringLiteral("track3"), {}}}, {}, {}); 3486 3487 QCOMPARE(currentTrackChangedSpy.count(), 1); 3488 QCOMPARE(playListFinishedSpy.count(), 0); 3489 3490 QCOMPARE(myPlayListProxyModel.currentTrack(), QPersistentModelIndex(myPlayListProxyModel.index(0, 0))); 3491 3492 myPlayListProxyModel.skipNextTrack(); 3493 3494 QCOMPARE(currentTrackChangedSpy.count(), 2); 3495 QCOMPARE(playListFinishedSpy.count(), 0); 3496 3497 QCOMPARE(myPlayListProxyModel.currentTrack(), QPersistentModelIndex(myPlayListProxyModel.index(1, 0))); 3498 } 3499 3500 void MediaPlayListProxyModelTest::testBringUpAndSkipPreviousCase() 3501 { 3502 MediaPlayList myPlayList; 3503 QAbstractItemModelTester testModel(&myPlayList); 3504 MediaPlayListProxyModel myPlayListProxyModel; 3505 myPlayListProxyModel.setPlayListModel(&myPlayList); 3506 QAbstractItemModelTester testProxyModel(&myPlayListProxyModel); 3507 DatabaseInterface myDatabaseContent; 3508 TracksListener myListener(&myDatabaseContent); 3509 3510 QSignalSpy currentTrackChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::currentTrackChanged); 3511 QSignalSpy playListFinishedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::playListFinished); 3512 3513 myDatabaseContent.init(QStringLiteral("testDbDirectContent")); 3514 3515 connect(&myListener, &TracksListener::trackHasChanged, 3516 &myPlayList, &MediaPlayList::trackChanged, 3517 Qt::QueuedConnection); 3518 connect(&myListener, &TracksListener::tracksListAdded, 3519 &myPlayList, &MediaPlayList::tracksListAdded, 3520 Qt::QueuedConnection); 3521 connect(&myPlayList, &MediaPlayList::newTrackByNameInList, 3522 &myListener, &TracksListener::trackByNameInList, 3523 Qt::QueuedConnection); 3524 connect(&myPlayList, &MediaPlayList::newEntryInList, 3525 &myListener, &TracksListener::newEntryInList, 3526 Qt::QueuedConnection); 3527 connect(&myPlayList, &MediaPlayList::newUrlInList, 3528 &myListener, &TracksListener::newUrlInList, 3529 Qt::QueuedConnection); 3530 connect(&myDatabaseContent, &DatabaseInterface::tracksAdded, 3531 &myListener, &TracksListener::tracksAdded); 3532 3533 myDatabaseContent.insertTracksList(mNewTracks, mNewCovers); 3534 3535 QCOMPARE(currentTrackChangedSpy.count(), 0); 3536 QCOMPARE(playListFinishedSpy.count(), 0); 3537 3538 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track}, 3539 {DataTypes::DatabaseIdRole, myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track1"), QStringLiteral("artist1"), QStringLiteral("album2"), 1, 1)}}, 3540 QStringLiteral("track1"), {}}}, {}, {}); 3541 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track}, 3542 {DataTypes::DatabaseIdRole, myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track3"), QStringLiteral("artist2"), QStringLiteral("album1"), 3, 3)}}, 3543 QStringLiteral("track3"), {}}}, {}, {}); 3544 3545 QCOMPARE(currentTrackChangedSpy.count(), 1); 3546 QCOMPARE(playListFinishedSpy.count(), 0); 3547 3548 QCOMPARE(myPlayListProxyModel.currentTrack(), QPersistentModelIndex(myPlayListProxyModel.index(0, 0))); 3549 3550 myPlayListProxyModel.skipNextTrack(); 3551 3552 QCOMPARE(currentTrackChangedSpy.count(), 2); 3553 QCOMPARE(playListFinishedSpy.count(), 0); 3554 3555 QCOMPARE(myPlayListProxyModel.currentTrack(), QPersistentModelIndex(myPlayListProxyModel.index(1, 0))); 3556 3557 myPlayListProxyModel.skipPreviousTrack(0); 3558 3559 QCOMPARE(currentTrackChangedSpy.count(), 3); 3560 QCOMPARE(playListFinishedSpy.count(), 0); 3561 3562 QCOMPARE(myPlayListProxyModel.currentTrack(), QPersistentModelIndex(myPlayListProxyModel.index(0, 0))); 3563 } 3564 3565 void MediaPlayListProxyModelTest::testBringUpAndSkipPreviousWithSeekCase() 3566 { 3567 MediaPlayList myPlayList; 3568 QAbstractItemModelTester testModel(&myPlayList); 3569 MediaPlayListProxyModel myPlayListProxyModel; 3570 myPlayListProxyModel.setPlayListModel(&myPlayList); 3571 QAbstractItemModelTester testProxyModel(&myPlayListProxyModel); 3572 DatabaseInterface myDatabaseContent; 3573 TracksListener myListener(&myDatabaseContent); 3574 3575 QSignalSpy currentTrackChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::currentTrackChanged); 3576 QSignalSpy playListFinishedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::playListFinished); 3577 QSignalSpy trackSeekedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::seek); 3578 3579 myDatabaseContent.init(QStringLiteral("testDbDirectContent")); 3580 3581 connect(&myListener, &TracksListener::trackHasChanged, 3582 &myPlayList, &MediaPlayList::trackChanged, 3583 Qt::QueuedConnection); 3584 connect(&myListener, &TracksListener::tracksListAdded, 3585 &myPlayList, &MediaPlayList::tracksListAdded, 3586 Qt::QueuedConnection); 3587 connect(&myPlayList, &MediaPlayList::newTrackByNameInList, 3588 &myListener, &TracksListener::trackByNameInList, 3589 Qt::QueuedConnection); 3590 connect(&myPlayList, &MediaPlayList::newEntryInList, 3591 &myListener, &TracksListener::newEntryInList, 3592 Qt::QueuedConnection); 3593 connect(&myPlayList, &MediaPlayList::newUrlInList, 3594 &myListener, &TracksListener::newUrlInList, 3595 Qt::QueuedConnection); 3596 connect(&myDatabaseContent, &DatabaseInterface::tracksAdded, 3597 &myListener, &TracksListener::tracksAdded); 3598 3599 myDatabaseContent.insertTracksList(mNewTracks, mNewCovers); 3600 3601 QCOMPARE(currentTrackChangedSpy.count(), 0); 3602 QCOMPARE(playListFinishedSpy.count(), 0); 3603 3604 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track}, 3605 {DataTypes::DatabaseIdRole, myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track1"), QStringLiteral("artist1"), QStringLiteral("album2"), 1, 1)}}, 3606 QStringLiteral("track1"), {}}}, {}, {}); 3607 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track}, 3608 {DataTypes::DatabaseIdRole, myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track3"), QStringLiteral("artist2"), QStringLiteral("album1"), 3, 3)}}, 3609 QStringLiteral("track3"), {}}}, {}, {}); 3610 3611 QCOMPARE(currentTrackChangedSpy.count(), 1); 3612 QCOMPARE(playListFinishedSpy.count(), 0); 3613 QCOMPARE(trackSeekedSpy.count(), 0); 3614 3615 QCOMPARE(myPlayListProxyModel.currentTrack(), QPersistentModelIndex(myPlayListProxyModel.index(0, 0))); 3616 3617 myPlayListProxyModel.skipNextTrack(); 3618 3619 QCOMPARE(currentTrackChangedSpy.count(), 2); 3620 QCOMPARE(playListFinishedSpy.count(), 0); 3621 QCOMPARE(trackSeekedSpy.count(), 0); 3622 3623 QCOMPARE(myPlayListProxyModel.currentTrack(), QPersistentModelIndex(myPlayListProxyModel.index(1, 0))); 3624 3625 myPlayListProxyModel.skipPreviousTrack(10000); 3626 3627 QCOMPARE(currentTrackChangedSpy.count(), 2); 3628 QCOMPARE(playListFinishedSpy.count(), 0); 3629 QCOMPARE(trackSeekedSpy.count(), 1); 3630 3631 myPlayListProxyModel.skipPreviousTrack(0); 3632 3633 QCOMPARE(currentTrackChangedSpy.count(), 3); 3634 QCOMPARE(playListFinishedSpy.count(), 0); 3635 QCOMPARE(trackSeekedSpy.count(), 1); 3636 3637 QCOMPARE(myPlayListProxyModel.currentTrack(), QPersistentModelIndex(myPlayListProxyModel.index(0, 0))); 3638 } 3639 3640 void MediaPlayListProxyModelTest::testRemoveSelection() 3641 { 3642 MediaPlayList myPlayList; 3643 QAbstractItemModelTester testModel(&myPlayList); 3644 MediaPlayListProxyModel myPlayListProxyModel; 3645 myPlayListProxyModel.setPlayListModel(&myPlayList); 3646 QAbstractItemModelTester testProxyModel(&myPlayListProxyModel); 3647 DatabaseInterface myDatabaseContent; 3648 TracksListener myListener(&myDatabaseContent); 3649 3650 QSignalSpy rowsAboutToBeMovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsAboutToBeMoved); 3651 QSignalSpy rowsAboutToBeRemovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsAboutToBeRemoved); 3652 QSignalSpy rowsAboutToBeInsertedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsAboutToBeInserted); 3653 QSignalSpy rowsMovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsMoved); 3654 QSignalSpy rowsRemovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsRemoved); 3655 QSignalSpy rowsInsertedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsInserted); 3656 QSignalSpy persistentStateChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::persistentStateChanged); 3657 QSignalSpy dataChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::dataChanged); 3658 QSignalSpy newTrackByNameInListSpy(&myPlayList, &MediaPlayList::newTrackByNameInList); 3659 QSignalSpy newEntryInListSpy(&myPlayList, &MediaPlayList::newEntryInList); 3660 QSignalSpy newUrlInListSpy(&myPlayList, &MediaPlayList::newUrlInList); 3661 3662 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); 3663 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 3664 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 0); 3665 QCOMPARE(rowsRemovedSpy.count(), 0); 3666 QCOMPARE(rowsMovedSpy.count(), 0); 3667 QCOMPARE(rowsInsertedSpy.count(), 0); 3668 QCOMPARE(persistentStateChangedSpy.count(), 0); 3669 QCOMPARE(dataChangedSpy.count(), 0); 3670 QCOMPARE(newTrackByNameInListSpy.count(), 0); 3671 QCOMPARE(newEntryInListSpy.count(), 0); 3672 3673 myDatabaseContent.init(QStringLiteral("testDbDirectContent")); 3674 3675 connect(&myListener, &TracksListener::trackHasChanged, 3676 &myPlayList, &MediaPlayList::trackChanged, 3677 Qt::QueuedConnection); 3678 connect(&myListener, &TracksListener::tracksListAdded, 3679 &myPlayList, &MediaPlayList::tracksListAdded, 3680 Qt::QueuedConnection); 3681 connect(&myPlayList, &MediaPlayList::newTrackByNameInList, 3682 &myListener, &TracksListener::trackByNameInList, 3683 Qt::QueuedConnection); 3684 connect(&myPlayList, &MediaPlayList::newEntryInList, 3685 &myListener, &TracksListener::newEntryInList, 3686 Qt::QueuedConnection); 3687 connect(&myPlayList, &MediaPlayList::newUrlInList, 3688 &myListener, &TracksListener::newUrlInList, 3689 Qt::QueuedConnection); 3690 connect(&myDatabaseContent, &DatabaseInterface::tracksAdded, 3691 &myListener, &TracksListener::tracksAdded); 3692 3693 myDatabaseContent.insertTracksList(mNewTracks, mNewCovers); 3694 3695 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); 3696 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 3697 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 0); 3698 QCOMPARE(rowsRemovedSpy.count(), 0); 3699 QCOMPARE(rowsMovedSpy.count(), 0); 3700 QCOMPARE(rowsInsertedSpy.count(), 0); 3701 QCOMPARE(persistentStateChangedSpy.count(), 0); 3702 QCOMPARE(dataChangedSpy.count(), 0); 3703 QCOMPARE(newTrackByNameInListSpy.count(), 0); 3704 QCOMPARE(newEntryInListSpy.count(), 0); 3705 3706 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Artist}}, QStringLiteral("artist1"), {}}}, 3707 ElisaUtils::PlayListEnqueueMode::ReplacePlayList, ElisaUtils::PlayListEnqueueTriggerPlay::TriggerPlay); 3708 3709 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); 3710 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 3711 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 1); 3712 QCOMPARE(rowsRemovedSpy.count(), 0); 3713 QCOMPARE(rowsMovedSpy.count(), 0); 3714 QCOMPARE(rowsInsertedSpy.count(), 1); 3715 QCOMPARE(persistentStateChangedSpy.count(), 1); 3716 QCOMPARE(dataChangedSpy.count(), 0); 3717 QCOMPARE(newTrackByNameInListSpy.count(), 0); 3718 QCOMPARE(newEntryInListSpy.count(), 1); 3719 3720 QCOMPARE(rowsAboutToBeInsertedSpy.wait(), true); 3721 3722 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 1); 3723 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 3724 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 2); 3725 QCOMPARE(rowsRemovedSpy.count(),1); 3726 QCOMPARE(rowsMovedSpy.count(), 0); 3727 QCOMPARE(rowsInsertedSpy.count(), 2); 3728 QCOMPARE(persistentStateChangedSpy.count(), 3); 3729 QCOMPARE(dataChangedSpy.count(), 0); 3730 QCOMPARE(newTrackByNameInListSpy.count(), 0); 3731 QCOMPARE(newEntryInListSpy.count(), 1); 3732 3733 QCOMPARE(myPlayListProxyModel.tracksCount(), 6); 3734 3735 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::IsValidRole).toBool(), true); 3736 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::TitleRole).toString(), QStringLiteral("track1")); 3737 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::ArtistRole).toString(), QStringLiteral("artist1")); 3738 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::AlbumArtistRole).toString(), QStringLiteral("Various Artists")); 3739 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::AlbumRole).toString(), QStringLiteral("album1")); 3740 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::TrackNumberRole).toInt(), 1); 3741 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::DiscNumberRole).toInt(), 1); 3742 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::ColumnsRoles::IsValidRole).toBool(), true); 3743 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::ColumnsRoles::TitleRole).toString(), QStringLiteral("track1")); 3744 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::ColumnsRoles::ArtistRole).toString(), QStringLiteral("artist1")); 3745 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::ColumnsRoles::AlbumArtistRole).toString(), QStringLiteral("artist1")); 3746 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::ColumnsRoles::AlbumRole).toString(), QStringLiteral("album2")); 3747 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::ColumnsRoles::TrackNumberRole).toInt(), 1); 3748 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::ColumnsRoles::DiscNumberRole).toInt(), 1); 3749 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::ColumnsRoles::IsValidRole).toBool(), true); 3750 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::ColumnsRoles::TitleRole).toString(), QStringLiteral("track2")); 3751 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::ColumnsRoles::ArtistRole).toString(), QStringLiteral("artist1")); 3752 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::ColumnsRoles::AlbumArtistRole).toString(), QStringLiteral("artist1")); 3753 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::ColumnsRoles::AlbumRole).toString(), QStringLiteral("album2")); 3754 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::ColumnsRoles::TrackNumberRole).toInt(), 2); 3755 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::ColumnsRoles::DiscNumberRole).toInt(), 1); 3756 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(3, 0), MediaPlayList::ColumnsRoles::IsValidRole).toBool(), true); 3757 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(3, 0), MediaPlayList::ColumnsRoles::TitleRole).toString(), QStringLiteral("track3")); 3758 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(3, 0), MediaPlayList::ColumnsRoles::ArtistRole).toString(), QStringLiteral("artist1")); 3759 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(3, 0), MediaPlayList::ColumnsRoles::AlbumArtistRole).toString(), QStringLiteral("artist1")); 3760 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(3, 0), MediaPlayList::ColumnsRoles::AlbumRole).toString(), QStringLiteral("album2")); 3761 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(3, 0), MediaPlayList::ColumnsRoles::TrackNumberRole).toInt(), 3); 3762 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(3, 0), MediaPlayList::ColumnsRoles::DiscNumberRole).toInt(), 1); 3763 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(4, 0), MediaPlayList::ColumnsRoles::IsValidRole).toBool(), true); 3764 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(4, 0), MediaPlayList::ColumnsRoles::TitleRole).toString(), QStringLiteral("track4")); 3765 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(4, 0), MediaPlayList::ColumnsRoles::ArtistRole).toString(), QStringLiteral("artist1")); 3766 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(4, 0), MediaPlayList::ColumnsRoles::AlbumArtistRole).toString(), QStringLiteral("artist1")); 3767 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(4, 0), MediaPlayList::ColumnsRoles::AlbumRole).toString(), QStringLiteral("album2")); 3768 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(4, 0), MediaPlayList::ColumnsRoles::TrackNumberRole).toInt(), 4); 3769 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(4, 0), MediaPlayList::ColumnsRoles::DiscNumberRole).toInt(), 1); 3770 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(5, 0), MediaPlayList::ColumnsRoles::IsValidRole).toBool(), true); 3771 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(5, 0), MediaPlayList::ColumnsRoles::TitleRole).toString(), QStringLiteral("track5")); 3772 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(5, 0), MediaPlayList::ColumnsRoles::ArtistRole).toString(), QStringLiteral("artist1")); 3773 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(5, 0), MediaPlayList::ColumnsRoles::AlbumArtistRole).toString(), QStringLiteral("artist1")); 3774 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(5, 0), MediaPlayList::ColumnsRoles::AlbumRole).toString(), QStringLiteral("album2")); 3775 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(5, 0), MediaPlayList::ColumnsRoles::TrackNumberRole).toInt(), 5); 3776 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(5, 0), MediaPlayList::ColumnsRoles::DiscNumberRole).toInt(), 1); 3777 3778 myPlayListProxyModel.removeSelection({2, 4, 5}); 3779 3780 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 4); 3781 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 3782 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 2); 3783 QCOMPARE(rowsRemovedSpy.count(), 4); 3784 QCOMPARE(rowsMovedSpy.count(), 0); 3785 QCOMPARE(rowsInsertedSpy.count(), 2); 3786 QCOMPARE(persistentStateChangedSpy.count(), 6); 3787 QCOMPARE(dataChangedSpy.count(), 0); 3788 QCOMPARE(newTrackByNameInListSpy.count(), 0); 3789 QCOMPARE(newEntryInListSpy.count(), 1); 3790 3791 QCOMPARE(myPlayListProxyModel.tracksCount(), 3); 3792 3793 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::IsValidRole).toBool(), true); 3794 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::TitleRole).toString(), QStringLiteral("track1")); 3795 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::ArtistRole).toString(), QStringLiteral("artist1")); 3796 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::AlbumArtistRole).toString(), QStringLiteral("Various Artists")); 3797 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::AlbumRole).toString(), QStringLiteral("album1")); 3798 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::TrackNumberRole).toInt(), 1); 3799 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::DiscNumberRole).toInt(), 1); 3800 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::ColumnsRoles::IsValidRole).toBool(), true); 3801 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::ColumnsRoles::TitleRole).toString(), QStringLiteral("track1")); 3802 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::ColumnsRoles::ArtistRole).toString(), QStringLiteral("artist1")); 3803 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::ColumnsRoles::AlbumArtistRole).toString(), QStringLiteral("artist1")); 3804 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::ColumnsRoles::AlbumRole).toString(), QStringLiteral("album2")); 3805 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::ColumnsRoles::TrackNumberRole).toInt(), 1); 3806 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::ColumnsRoles::DiscNumberRole).toInt(), 1); 3807 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::ColumnsRoles::IsValidRole).toBool(), true); 3808 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::ColumnsRoles::TitleRole).toString(), QStringLiteral("track3")); 3809 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::ColumnsRoles::ArtistRole).toString(), QStringLiteral("artist1")); 3810 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::ColumnsRoles::AlbumArtistRole).toString(), QStringLiteral("artist1")); 3811 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::ColumnsRoles::AlbumRole).toString(), QStringLiteral("album2")); 3812 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::ColumnsRoles::TrackNumberRole).toInt(), 3); 3813 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::ColumnsRoles::DiscNumberRole).toInt(), 1); 3814 } 3815 3816 void MediaPlayListProxyModelTest::testReplaceAndPlayArtist() 3817 { 3818 MediaPlayList myPlayList; 3819 QAbstractItemModelTester testModel(&myPlayList); 3820 MediaPlayListProxyModel myPlayListProxyModel; 3821 myPlayListProxyModel.setPlayListModel(&myPlayList); 3822 QAbstractItemModelTester testProxyModel(&myPlayListProxyModel); 3823 DatabaseInterface myDatabaseContent; 3824 TracksListener myListener(&myDatabaseContent); 3825 3826 QSignalSpy rowsAboutToBeMovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsAboutToBeMoved); 3827 QSignalSpy rowsAboutToBeRemovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsAboutToBeRemoved); 3828 QSignalSpy rowsAboutToBeInsertedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsAboutToBeInserted); 3829 QSignalSpy rowsMovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsMoved); 3830 QSignalSpy rowsRemovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsRemoved); 3831 QSignalSpy rowsInsertedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsInserted); 3832 QSignalSpy persistentStateChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::persistentStateChanged); 3833 QSignalSpy dataChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::dataChanged); 3834 QSignalSpy newTrackByNameInListSpy(&myPlayList, &MediaPlayList::newTrackByNameInList); 3835 QSignalSpy newEntryInListSpy(&myPlayList, &MediaPlayList::newEntryInList); 3836 QSignalSpy newUrlInListSpy(&myPlayList, &MediaPlayList::newUrlInList); 3837 3838 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); 3839 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 3840 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 0); 3841 QCOMPARE(rowsRemovedSpy.count(), 0); 3842 QCOMPARE(rowsMovedSpy.count(), 0); 3843 QCOMPARE(rowsInsertedSpy.count(), 0); 3844 QCOMPARE(persistentStateChangedSpy.count(), 0); 3845 QCOMPARE(dataChangedSpy.count(), 0); 3846 QCOMPARE(newTrackByNameInListSpy.count(), 0); 3847 QCOMPARE(newEntryInListSpy.count(), 0); 3848 3849 myDatabaseContent.init(QStringLiteral("testDbDirectContent")); 3850 3851 connect(&myListener, &TracksListener::trackHasChanged, 3852 &myPlayList, &MediaPlayList::trackChanged, 3853 Qt::QueuedConnection); 3854 connect(&myListener, &TracksListener::tracksListAdded, 3855 &myPlayList, &MediaPlayList::tracksListAdded, 3856 Qt::QueuedConnection); 3857 connect(&myPlayList, &MediaPlayList::newTrackByNameInList, 3858 &myListener, &TracksListener::trackByNameInList, 3859 Qt::QueuedConnection); 3860 connect(&myPlayList, &MediaPlayList::newEntryInList, 3861 &myListener, &TracksListener::newEntryInList, 3862 Qt::QueuedConnection); 3863 connect(&myPlayList, &MediaPlayList::newUrlInList, 3864 &myListener, &TracksListener::newUrlInList, 3865 Qt::QueuedConnection); 3866 connect(&myDatabaseContent, &DatabaseInterface::tracksAdded, 3867 &myListener, &TracksListener::tracksAdded); 3868 3869 myDatabaseContent.insertTracksList(mNewTracks, mNewCovers); 3870 3871 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); 3872 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 3873 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 0); 3874 QCOMPARE(rowsRemovedSpy.count(), 0); 3875 QCOMPARE(rowsMovedSpy.count(), 0); 3876 QCOMPARE(rowsInsertedSpy.count(), 0); 3877 QCOMPARE(persistentStateChangedSpy.count(), 0); 3878 QCOMPARE(dataChangedSpy.count(), 0); 3879 QCOMPARE(newTrackByNameInListSpy.count(), 0); 3880 QCOMPARE(newEntryInListSpy.count(), 0); 3881 3882 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Artist}}, QStringLiteral("artist3"), {}}}, 3883 ElisaUtils::PlayListEnqueueMode::ReplacePlayList, ElisaUtils::PlayListEnqueueTriggerPlay::TriggerPlay); 3884 3885 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); 3886 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 3887 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 1); 3888 QCOMPARE(rowsRemovedSpy.count(), 0); 3889 QCOMPARE(rowsMovedSpy.count(), 0); 3890 QCOMPARE(rowsInsertedSpy.count(), 1); 3891 QCOMPARE(persistentStateChangedSpy.count(), 1); 3892 QCOMPARE(dataChangedSpy.count(), 0); 3893 QCOMPARE(newTrackByNameInListSpy.count(), 0); 3894 QCOMPARE(newEntryInListSpy.count(), 1); 3895 3896 QCOMPARE(rowsAboutToBeInsertedSpy.wait(), true); 3897 3898 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 1); 3899 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 3900 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 2); 3901 QCOMPARE(rowsRemovedSpy.count(), 1); 3902 QCOMPARE(rowsMovedSpy.count(), 0); 3903 QCOMPARE(rowsInsertedSpy.count(), 2); 3904 QCOMPARE(persistentStateChangedSpy.count(), 3); 3905 QCOMPARE(dataChangedSpy.count(), 0); 3906 QCOMPARE(newTrackByNameInListSpy.count(), 0); 3907 QCOMPARE(newEntryInListSpy.count(), 1); 3908 3909 QCOMPARE(myPlayListProxyModel.tracksCount(), 1); 3910 3911 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::IsValidRole).toBool(), true); 3912 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::TitleRole).toString(), QStringLiteral("track3")); 3913 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::DurationRole).toTime().msecsSinceStartOfDay(), 3); 3914 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::ArtistRole).toString(), QStringLiteral("artist3")); 3915 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::AlbumArtistRole).toString(), QStringLiteral("Various Artists")); 3916 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::AlbumRole).toString(), QStringLiteral("album1")); 3917 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::TrackNumberRole).toInt(), 3); 3918 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::DiscNumberRole).toInt(), 3); 3919 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::ImageUrlRole).toUrl(), QUrl::fromLocalFile(QStringLiteral("album1"))); 3920 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::ResourceRole).toUrl(), QUrl::fromUserInput(QStringLiteral("/$3"))); 3921 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::IsPlayingRole).toBool(), false); 3922 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::IsSingleDiscAlbumRole).toBool(), false); 3923 3924 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Artist}}, QStringLiteral("artist4"), {}}}, 3925 ElisaUtils::PlayListEnqueueMode::ReplacePlayList, ElisaUtils::PlayListEnqueueTriggerPlay::TriggerPlay); 3926 3927 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 2); 3928 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 3929 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 3); 3930 QCOMPARE(rowsRemovedSpy.count(), 2); 3931 QCOMPARE(rowsMovedSpy.count(), 0); 3932 QCOMPARE(rowsInsertedSpy.count(), 3); 3933 QCOMPARE(persistentStateChangedSpy.count(), 5); 3934 QCOMPARE(dataChangedSpy.count(), 0); 3935 QCOMPARE(newTrackByNameInListSpy.count(), 0); 3936 QCOMPARE(newEntryInListSpy.count(), 2); 3937 3938 QCOMPARE(rowsAboutToBeInsertedSpy.wait(), true); 3939 3940 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 3); 3941 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 3942 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 4); 3943 QCOMPARE(rowsRemovedSpy.count(), 3); 3944 QCOMPARE(rowsMovedSpy.count(), 0); 3945 QCOMPARE(rowsInsertedSpy.count(), 4); 3946 QCOMPARE(persistentStateChangedSpy.count(), 7); 3947 QCOMPARE(dataChangedSpy.count(), 0); 3948 QCOMPARE(newTrackByNameInListSpy.count(), 0); 3949 QCOMPARE(newEntryInListSpy.count(), 2); 3950 3951 QCOMPARE(myPlayListProxyModel.tracksCount(), 1); 3952 3953 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::IsValidRole).toBool(), true); 3954 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::TitleRole).toString(), QStringLiteral("track4")); 3955 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::DurationRole).toTime().msecsSinceStartOfDay(), 4); 3956 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::ArtistRole).toString(), QStringLiteral("artist4")); 3957 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::AlbumArtistRole).toString(), QStringLiteral("Various Artists")); 3958 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::AlbumRole).toString(), QStringLiteral("album1")); 3959 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::TrackNumberRole).toInt(), 4); 3960 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::DiscNumberRole).toInt(), 4); 3961 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::ImageUrlRole).toUrl(), QUrl::fromLocalFile(QStringLiteral("album1"))); 3962 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::ResourceRole).toUrl(), QUrl::fromUserInput(QStringLiteral("/$4"))); 3963 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::IsPlayingRole).toBool(), false); 3964 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::IsSingleDiscAlbumRole).toBool(), false); 3965 } 3966 3967 void MediaPlayListProxyModelTest::testReplaceAndPlayTrackId() 3968 { 3969 MediaPlayList myPlayList; 3970 QAbstractItemModelTester testModel(&myPlayList); 3971 MediaPlayListProxyModel myPlayListProxyModel; 3972 myPlayListProxyModel.setPlayListModel(&myPlayList); 3973 QAbstractItemModelTester testProxyModel(&myPlayListProxyModel); 3974 DatabaseInterface myDatabaseContent; 3975 TracksListener myListener(&myDatabaseContent); 3976 3977 QSignalSpy rowsAboutToBeMovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsAboutToBeMoved); 3978 QSignalSpy rowsAboutToBeRemovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsAboutToBeRemoved); 3979 QSignalSpy rowsAboutToBeInsertedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsAboutToBeInserted); 3980 QSignalSpy rowsMovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsMoved); 3981 QSignalSpy rowsRemovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsRemoved); 3982 QSignalSpy rowsInsertedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsInserted); 3983 QSignalSpy persistentStateChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::persistentStateChanged); 3984 QSignalSpy dataChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::dataChanged); 3985 QSignalSpy newTrackByNameInListSpy(&myPlayList, &MediaPlayList::newTrackByNameInList); 3986 QSignalSpy newEntryInListSpy(&myPlayList, &MediaPlayList::newEntryInList); 3987 QSignalSpy newUrlInListSpy(&myPlayList, &MediaPlayList::newUrlInList); 3988 3989 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); 3990 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 3991 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 0); 3992 QCOMPARE(rowsRemovedSpy.count(), 0); 3993 QCOMPARE(rowsMovedSpy.count(), 0); 3994 QCOMPARE(rowsInsertedSpy.count(), 0); 3995 QCOMPARE(persistentStateChangedSpy.count(), 0); 3996 QCOMPARE(dataChangedSpy.count(), 0); 3997 QCOMPARE(newTrackByNameInListSpy.count(), 0); 3998 QCOMPARE(newEntryInListSpy.count(), 0); 3999 4000 myDatabaseContent.init(QStringLiteral("testDbDirectContent")); 4001 4002 connect(&myListener, &TracksListener::trackHasChanged, 4003 &myPlayList, &MediaPlayList::trackChanged, 4004 Qt::QueuedConnection); 4005 connect(&myListener, &TracksListener::tracksListAdded, 4006 &myPlayList, &MediaPlayList::tracksListAdded, 4007 Qt::QueuedConnection); 4008 connect(&myPlayList, &MediaPlayList::newTrackByNameInList, 4009 &myListener, &TracksListener::trackByNameInList, 4010 Qt::QueuedConnection); 4011 connect(&myPlayList, &MediaPlayList::newEntryInList, 4012 &myListener, &TracksListener::newEntryInList, 4013 Qt::QueuedConnection); 4014 connect(&myPlayList, &MediaPlayList::newUrlInList, 4015 &myListener, &TracksListener::newUrlInList, 4016 Qt::QueuedConnection); 4017 connect(&myDatabaseContent, &DatabaseInterface::tracksAdded, 4018 &myListener, &TracksListener::tracksAdded); 4019 4020 myDatabaseContent.insertTracksList(mNewTracks, mNewCovers); 4021 4022 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); 4023 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 4024 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 0); 4025 QCOMPARE(rowsRemovedSpy.count(), 0); 4026 QCOMPARE(rowsMovedSpy.count(), 0); 4027 QCOMPARE(rowsInsertedSpy.count(), 0); 4028 QCOMPARE(persistentStateChangedSpy.count(), 0); 4029 QCOMPARE(dataChangedSpy.count(), 0); 4030 QCOMPARE(newTrackByNameInListSpy.count(), 0); 4031 QCOMPARE(newEntryInListSpy.count(), 0); 4032 4033 auto firstTrackId = myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track3"), QStringLiteral("artist3"), 4034 QStringLiteral("album1"), 3, 3); 4035 4036 QCOMPARE(firstTrackId != 0, true); 4037 4038 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track}, {DataTypes::DatabaseIdRole, firstTrackId}}, {}, {}}}, 4039 ElisaUtils::PlayListEnqueueMode::ReplacePlayList, ElisaUtils::PlayListEnqueueTriggerPlay::TriggerPlay); 4040 4041 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); 4042 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 4043 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 1); 4044 QCOMPARE(rowsRemovedSpy.count(), 0); 4045 QCOMPARE(rowsMovedSpy.count(), 0); 4046 QCOMPARE(rowsInsertedSpy.count(), 1); 4047 QCOMPARE(persistentStateChangedSpy.count(), 1); 4048 QCOMPARE(dataChangedSpy.count(), 0); 4049 QCOMPARE(newTrackByNameInListSpy.count(), 0); 4050 QCOMPARE(newEntryInListSpy.count(), 1); 4051 4052 QCOMPARE(dataChangedSpy.wait(), true); 4053 4054 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); 4055 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 4056 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 1); 4057 QCOMPARE(rowsRemovedSpy.count(), 0); 4058 QCOMPARE(rowsMovedSpy.count(), 0); 4059 QCOMPARE(rowsInsertedSpy.count(), 1); 4060 QCOMPARE(persistentStateChangedSpy.count(), 1); 4061 QCOMPARE(dataChangedSpy.count(), 1); 4062 QCOMPARE(newTrackByNameInListSpy.count(), 0); 4063 QCOMPARE(newEntryInListSpy.count(), 1); 4064 4065 QCOMPARE(myPlayListProxyModel.tracksCount(), 1); 4066 4067 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::IsValidRole).toBool(), true); 4068 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::TitleRole).toString(), QStringLiteral("track3")); 4069 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::DurationRole).toTime().msecsSinceStartOfDay(), 3); 4070 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::ArtistRole).toString(), QStringLiteral("artist3")); 4071 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::AlbumArtistRole).toString(), QStringLiteral("Various Artists")); 4072 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::AlbumRole).toString(), QStringLiteral("album1")); 4073 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::TrackNumberRole).toInt(), 3); 4074 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::DiscNumberRole).toInt(), 3); 4075 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::ImageUrlRole).toUrl(), QUrl::fromLocalFile(QStringLiteral("album1"))); 4076 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::ResourceRole).toUrl(), QUrl::fromUserInput(QStringLiteral("/$3"))); 4077 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::IsPlayingRole).toBool(), false); 4078 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::IsSingleDiscAlbumRole).toBool(), false); 4079 4080 auto secondTrackId = myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track4"), QStringLiteral("artist4"), 4081 QStringLiteral("album1"), 4, 4); 4082 4083 QCOMPARE(secondTrackId != 0, true); 4084 4085 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track}, {DataTypes::DatabaseIdRole, secondTrackId}}, {}, {}}}, 4086 ElisaUtils::PlayListEnqueueMode::ReplacePlayList, ElisaUtils::PlayListEnqueueTriggerPlay::TriggerPlay); 4087 4088 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 1); 4089 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 4090 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 2); 4091 QCOMPARE(rowsRemovedSpy.count(), 1); 4092 QCOMPARE(rowsMovedSpy.count(), 0); 4093 QCOMPARE(rowsInsertedSpy.count(), 2); 4094 QCOMPARE(persistentStateChangedSpy.count(), 3); 4095 QCOMPARE(dataChangedSpy.count(), 1); 4096 QCOMPARE(newTrackByNameInListSpy.count(), 0); 4097 QCOMPARE(newEntryInListSpy.count(), 2); 4098 4099 QCOMPARE(dataChangedSpy.wait(), true); 4100 4101 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 1); 4102 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 4103 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 2); 4104 QCOMPARE(rowsRemovedSpy.count(), 1); 4105 QCOMPARE(rowsMovedSpy.count(), 0); 4106 QCOMPARE(rowsInsertedSpy.count(), 2); 4107 QCOMPARE(persistentStateChangedSpy.count(), 3); 4108 QCOMPARE(dataChangedSpy.count(), 2); 4109 QCOMPARE(newTrackByNameInListSpy.count(), 0); 4110 QCOMPARE(newEntryInListSpy.count(), 2); 4111 4112 QCOMPARE(myPlayListProxyModel.tracksCount(), 1); 4113 4114 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::IsValidRole).toBool(), true); 4115 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::TitleRole).toString(), QStringLiteral("track4")); 4116 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::DurationRole).toTime().msecsSinceStartOfDay(), 4); 4117 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::ArtistRole).toString(), QStringLiteral("artist4")); 4118 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::AlbumArtistRole).toString(), QStringLiteral("Various Artists")); 4119 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::AlbumRole).toString(), QStringLiteral("album1")); 4120 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::TrackNumberRole).toInt(), 4); 4121 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::DiscNumberRole).toInt(), 4); 4122 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::ImageUrlRole).toUrl(), QUrl::fromLocalFile(QStringLiteral("album1"))); 4123 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::ResourceRole).toUrl(), QUrl::fromUserInput(QStringLiteral("/$4"))); 4124 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::IsPlayingRole).toBool(), false); 4125 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::IsSingleDiscAlbumRole).toBool(), false); 4126 } 4127 4128 void MediaPlayListProxyModelTest::testTrackBeenRemoved() 4129 { 4130 MediaPlayList myPlayList; 4131 QAbstractItemModelTester testModel(&myPlayList); 4132 MediaPlayListProxyModel myPlayListProxyModel; 4133 myPlayListProxyModel.setPlayListModel(&myPlayList); 4134 QAbstractItemModelTester testProxyModel(&myPlayListProxyModel); 4135 DatabaseInterface myDatabaseContent; 4136 TracksListener myListener(&myDatabaseContent); 4137 4138 QSignalSpy rowsAboutToBeMovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsAboutToBeMoved); 4139 QSignalSpy rowsAboutToBeRemovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsAboutToBeRemoved); 4140 QSignalSpy rowsAboutToBeInsertedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsAboutToBeInserted); 4141 QSignalSpy rowsMovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsMoved); 4142 QSignalSpy rowsRemovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsRemoved); 4143 QSignalSpy rowsInsertedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsInserted); 4144 QSignalSpy persistentStateChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::persistentStateChanged); 4145 QSignalSpy dataChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::dataChanged); 4146 QSignalSpy newTrackByNameInListSpy(&myPlayList, &MediaPlayList::newTrackByNameInList); 4147 QSignalSpy newEntryInListSpy(&myPlayList, &MediaPlayList::newEntryInList); 4148 QSignalSpy newUrlInListSpy(&myPlayList, &MediaPlayList::newUrlInList); 4149 4150 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); 4151 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 4152 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 0); 4153 QCOMPARE(rowsRemovedSpy.count(), 0); 4154 QCOMPARE(rowsMovedSpy.count(), 0); 4155 QCOMPARE(rowsInsertedSpy.count(), 0); 4156 QCOMPARE(persistentStateChangedSpy.count(), 0); 4157 QCOMPARE(dataChangedSpy.count(), 0); 4158 QCOMPARE(newTrackByNameInListSpy.count(), 0); 4159 QCOMPARE(newEntryInListSpy.count(), 0); 4160 4161 myDatabaseContent.init(QStringLiteral("testDbDirectContent")); 4162 4163 connect(&myListener, &TracksListener::trackHasChanged, 4164 &myPlayList, &MediaPlayList::trackChanged, 4165 Qt::QueuedConnection); 4166 connect(&myListener, &TracksListener::tracksListAdded, 4167 &myPlayList, &MediaPlayList::tracksListAdded, 4168 Qt::QueuedConnection); 4169 connect(&myPlayList, &MediaPlayList::newTrackByNameInList, 4170 &myListener, &TracksListener::trackByNameInList, 4171 Qt::QueuedConnection); 4172 connect(&myPlayList, &MediaPlayList::newEntryInList, 4173 &myListener, &TracksListener::newEntryInList, 4174 Qt::QueuedConnection); 4175 connect(&myPlayList, &MediaPlayList::newUrlInList, 4176 &myListener, &TracksListener::newUrlInList, 4177 Qt::QueuedConnection); 4178 connect(&myDatabaseContent, &DatabaseInterface::tracksAdded, 4179 &myListener, &TracksListener::tracksAdded); 4180 4181 myDatabaseContent.insertTracksList(mNewTracks, mNewCovers); 4182 4183 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); 4184 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 4185 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 0); 4186 QCOMPARE(rowsRemovedSpy.count(), 0); 4187 QCOMPARE(rowsMovedSpy.count(), 0); 4188 QCOMPARE(rowsInsertedSpy.count(), 0); 4189 QCOMPARE(persistentStateChangedSpy.count(), 0); 4190 QCOMPARE(dataChangedSpy.count(), 0); 4191 QCOMPARE(newTrackByNameInListSpy.count(), 0); 4192 QCOMPARE(newEntryInListSpy.count(), 0); 4193 4194 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Artist}}, QStringLiteral("artist1"), {}}}, 4195 ElisaUtils::PlayListEnqueueMode::ReplacePlayList, ElisaUtils::PlayListEnqueueTriggerPlay::TriggerPlay); 4196 4197 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); 4198 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 4199 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 1); 4200 QCOMPARE(rowsRemovedSpy.count(), 0); 4201 QCOMPARE(rowsMovedSpy.count(), 0); 4202 QCOMPARE(rowsInsertedSpy.count(), 1); 4203 QCOMPARE(persistentStateChangedSpy.count(), 1); 4204 QCOMPARE(dataChangedSpy.count(), 0); 4205 QCOMPARE(newTrackByNameInListSpy.count(), 0); 4206 QCOMPARE(newEntryInListSpy.count(), 1); 4207 4208 QCOMPARE(rowsAboutToBeInsertedSpy.wait(), true); 4209 4210 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 1); 4211 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 4212 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 2); 4213 QCOMPARE(rowsRemovedSpy.count(), 1); 4214 QCOMPARE(rowsMovedSpy.count(), 0); 4215 QCOMPARE(rowsInsertedSpy.count(), 2); 4216 QCOMPARE(persistentStateChangedSpy.count(), 3); 4217 QCOMPARE(dataChangedSpy.count(), 0); 4218 QCOMPARE(newTrackByNameInListSpy.count(), 0); 4219 QCOMPARE(newEntryInListSpy.count(), 1); 4220 4221 QCOMPARE(myPlayListProxyModel.tracksCount(), 6); 4222 4223 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::IsValidRole).toBool(), true); 4224 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::TitleRole).toString(), QStringLiteral("track1")); 4225 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::ArtistRole).toString(), QStringLiteral("artist1")); 4226 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::AlbumArtistRole).toString(), QStringLiteral("Various Artists")); 4227 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::AlbumRole).toString(), QStringLiteral("album1")); 4228 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::TrackNumberRole).toInt(), 1); 4229 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::DiscNumberRole).toInt(), 1); 4230 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::ColumnsRoles::IsValidRole).toBool(), true); 4231 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::ColumnsRoles::TitleRole).toString(), QStringLiteral("track1")); 4232 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::ColumnsRoles::ArtistRole).toString(), QStringLiteral("artist1")); 4233 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::ColumnsRoles::AlbumArtistRole).toString(), QStringLiteral("artist1")); 4234 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::ColumnsRoles::AlbumRole).toString(), QStringLiteral("album2")); 4235 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::ColumnsRoles::TrackNumberRole).toInt(), 1); 4236 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::ColumnsRoles::DiscNumberRole).toInt(), 1); 4237 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::ColumnsRoles::IsValidRole).toBool(), true); 4238 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::ColumnsRoles::TitleRole).toString(), QStringLiteral("track2")); 4239 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::ColumnsRoles::ArtistRole).toString(), QStringLiteral("artist1")); 4240 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::ColumnsRoles::AlbumArtistRole).toString(), QStringLiteral("artist1")); 4241 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::ColumnsRoles::AlbumRole).toString(), QStringLiteral("album2")); 4242 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::ColumnsRoles::TrackNumberRole).toInt(), 2); 4243 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::ColumnsRoles::DiscNumberRole).toInt(), 1); 4244 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(3, 0), MediaPlayList::ColumnsRoles::IsValidRole).toBool(), true); 4245 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(3, 0), MediaPlayList::ColumnsRoles::TitleRole).toString(), QStringLiteral("track3")); 4246 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(3, 0), MediaPlayList::ColumnsRoles::ArtistRole).toString(), QStringLiteral("artist1")); 4247 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(3, 0), MediaPlayList::ColumnsRoles::AlbumArtistRole).toString(), QStringLiteral("artist1")); 4248 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(3, 0), MediaPlayList::ColumnsRoles::AlbumRole).toString(), QStringLiteral("album2")); 4249 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(3, 0), MediaPlayList::ColumnsRoles::TrackNumberRole).toInt(), 3); 4250 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(3, 0), MediaPlayList::ColumnsRoles::DiscNumberRole).toInt(), 1); 4251 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(4, 0), MediaPlayList::ColumnsRoles::IsValidRole).toBool(), true); 4252 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(4, 0), MediaPlayList::ColumnsRoles::TitleRole).toString(), QStringLiteral("track4")); 4253 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(4, 0), MediaPlayList::ColumnsRoles::ArtistRole).toString(), QStringLiteral("artist1")); 4254 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(4, 0), MediaPlayList::ColumnsRoles::AlbumArtistRole).toString(), QStringLiteral("artist1")); 4255 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(4, 0), MediaPlayList::ColumnsRoles::AlbumRole).toString(), QStringLiteral("album2")); 4256 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(4, 0), MediaPlayList::ColumnsRoles::TrackNumberRole).toInt(), 4); 4257 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(4, 0), MediaPlayList::ColumnsRoles::DiscNumberRole).toInt(), 1); 4258 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(5, 0), MediaPlayList::ColumnsRoles::IsValidRole).toBool(), true); 4259 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(5, 0), MediaPlayList::ColumnsRoles::TitleRole).toString(), QStringLiteral("track5")); 4260 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(5, 0), MediaPlayList::ColumnsRoles::ArtistRole).toString(), QStringLiteral("artist1")); 4261 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(5, 0), MediaPlayList::ColumnsRoles::AlbumArtistRole).toString(), QStringLiteral("artist1")); 4262 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(5, 0), MediaPlayList::ColumnsRoles::AlbumRole).toString(), QStringLiteral("album2")); 4263 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(5, 0), MediaPlayList::ColumnsRoles::TrackNumberRole).toInt(), 5); 4264 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(5, 0), MediaPlayList::ColumnsRoles::DiscNumberRole).toInt(), 1); 4265 4266 auto removedTrackId = myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track2"), QStringLiteral("artist1"), 4267 QStringLiteral("album2"), 2, 1); 4268 4269 QCOMPARE(removedTrackId != 0, true); 4270 4271 auto removedTrack = myDatabaseContent.trackDataFromDatabaseId(removedTrackId); 4272 4273 QVERIFY(!removedTrack.isEmpty()); 4274 4275 myPlayList.trackRemoved(removedTrack[DataTypes::DatabaseIdRole].toULongLong()); 4276 4277 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 1); 4278 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 4279 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 2); 4280 QCOMPARE(rowsRemovedSpy.count(), 1); 4281 QCOMPARE(rowsMovedSpy.count(), 0); 4282 QCOMPARE(rowsInsertedSpy.count(), 2); 4283 QCOMPARE(persistentStateChangedSpy.count(), 3); 4284 QCOMPARE(dataChangedSpy.count(), 1); 4285 QCOMPARE(newTrackByNameInListSpy.count(), 0); 4286 QCOMPARE(newEntryInListSpy.count(), 1); 4287 4288 QCOMPARE(myPlayListProxyModel.tracksCount(), 6); 4289 4290 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::IsValidRole).toBool(), true); 4291 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::TitleRole).toString(), QStringLiteral("track1")); 4292 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::ArtistRole).toString(), QStringLiteral("artist1")); 4293 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::AlbumArtistRole).toString(), QStringLiteral("Various Artists")); 4294 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::AlbumRole).toString(), QStringLiteral("album1")); 4295 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::TrackNumberRole).toInt(), 1); 4296 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::DiscNumberRole).toInt(), 1); 4297 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::ColumnsRoles::IsValidRole).toBool(), true); 4298 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::ColumnsRoles::TitleRole).toString(), QStringLiteral("track1")); 4299 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::ColumnsRoles::ArtistRole).toString(), QStringLiteral("artist1")); 4300 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::ColumnsRoles::AlbumArtistRole).toString(), QStringLiteral("artist1")); 4301 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::ColumnsRoles::AlbumRole).toString(), QStringLiteral("album2")); 4302 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::ColumnsRoles::TrackNumberRole).toInt(), 1); 4303 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::ColumnsRoles::DiscNumberRole).toInt(), 1); 4304 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::ColumnsRoles::IsValidRole).toBool(), false); 4305 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::ColumnsRoles::TitleRole).toString(), QStringLiteral("track2")); 4306 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::ColumnsRoles::ArtistRole).toString(), QStringLiteral("artist1")); 4307 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::ColumnsRoles::AlbumArtistRole).toString(), QStringLiteral("artist1")); 4308 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::ColumnsRoles::AlbumRole).toString(), QStringLiteral("album2")); 4309 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::ColumnsRoles::TrackNumberRole).toInt(), -1); 4310 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::ColumnsRoles::DiscNumberRole).toInt(), 0); 4311 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(3, 0), MediaPlayList::ColumnsRoles::IsValidRole).toBool(), true); 4312 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(3, 0), MediaPlayList::ColumnsRoles::TitleRole).toString(), QStringLiteral("track3")); 4313 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(3, 0), MediaPlayList::ColumnsRoles::ArtistRole).toString(), QStringLiteral("artist1")); 4314 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(3, 0), MediaPlayList::ColumnsRoles::AlbumArtistRole).toString(), QStringLiteral("artist1")); 4315 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(3, 0), MediaPlayList::ColumnsRoles::AlbumRole).toString(), QStringLiteral("album2")); 4316 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(3, 0), MediaPlayList::ColumnsRoles::TrackNumberRole).toInt(), 3); 4317 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(3, 0), MediaPlayList::ColumnsRoles::DiscNumberRole).toInt(), 1); 4318 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(4, 0), MediaPlayList::ColumnsRoles::IsValidRole).toBool(), true); 4319 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(4, 0), MediaPlayList::ColumnsRoles::TitleRole).toString(), QStringLiteral("track4")); 4320 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(4, 0), MediaPlayList::ColumnsRoles::ArtistRole).toString(), QStringLiteral("artist1")); 4321 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(4, 0), MediaPlayList::ColumnsRoles::AlbumArtistRole).toString(), QStringLiteral("artist1")); 4322 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(4, 0), MediaPlayList::ColumnsRoles::AlbumRole).toString(), QStringLiteral("album2")); 4323 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(4, 0), MediaPlayList::ColumnsRoles::TrackNumberRole).toInt(), 4); 4324 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(4, 0), MediaPlayList::ColumnsRoles::DiscNumberRole).toInt(), 1); 4325 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(5, 0), MediaPlayList::ColumnsRoles::IsValidRole).toBool(), true); 4326 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(5, 0), MediaPlayList::ColumnsRoles::TitleRole).toString(), QStringLiteral("track5")); 4327 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(5, 0), MediaPlayList::ColumnsRoles::ArtistRole).toString(), QStringLiteral("artist1")); 4328 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(5, 0), MediaPlayList::ColumnsRoles::AlbumArtistRole).toString(), QStringLiteral("artist1")); 4329 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(5, 0), MediaPlayList::ColumnsRoles::AlbumRole).toString(), QStringLiteral("album2")); 4330 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(5, 0), MediaPlayList::ColumnsRoles::TrackNumberRole).toInt(), 5); 4331 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(5, 0), MediaPlayList::ColumnsRoles::DiscNumberRole).toInt(), 1); 4332 } 4333 4334 void MediaPlayListProxyModelTest::finishPlayList() 4335 { 4336 MediaPlayList myPlayList; 4337 QAbstractItemModelTester testModel(&myPlayList); 4338 MediaPlayListProxyModel myPlayListProxyModel; 4339 myPlayListProxyModel.setPlayListModel(&myPlayList); 4340 QAbstractItemModelTester testProxyModel(&myPlayListProxyModel); 4341 DatabaseInterface myDatabaseContent; 4342 TracksListener myListener(&myDatabaseContent); 4343 4344 QSignalSpy currentTrackChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::currentTrackChanged); 4345 QSignalSpy playListFinishedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::playListFinished); 4346 4347 myDatabaseContent.init(QStringLiteral("testDbDirectContent")); 4348 4349 connect(&myListener, &TracksListener::trackHasChanged, 4350 &myPlayList, &MediaPlayList::trackChanged, 4351 Qt::QueuedConnection); 4352 connect(&myListener, &TracksListener::tracksListAdded, 4353 &myPlayList, &MediaPlayList::tracksListAdded, 4354 Qt::QueuedConnection); 4355 connect(&myPlayList, &MediaPlayList::newTrackByNameInList, 4356 &myListener, &TracksListener::trackByNameInList, 4357 Qt::QueuedConnection); 4358 connect(&myPlayList, &MediaPlayList::newEntryInList, 4359 &myListener, &TracksListener::newEntryInList, 4360 Qt::QueuedConnection); 4361 connect(&myPlayList, &MediaPlayList::newUrlInList, 4362 &myListener, &TracksListener::newUrlInList, 4363 Qt::QueuedConnection); 4364 connect(&myDatabaseContent, &DatabaseInterface::tracksAdded, 4365 &myListener, &TracksListener::tracksAdded); 4366 4367 myDatabaseContent.insertTracksList(mNewTracks, mNewCovers); 4368 4369 QCOMPARE(currentTrackChangedSpy.count(), 0); 4370 QCOMPARE(playListFinishedSpy.count(), 0); 4371 4372 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track}, 4373 {DataTypes::DatabaseIdRole, myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track1"), QStringLiteral("artist1"), QStringLiteral("album2"), 1, 1)}}, 4374 QStringLiteral("track1"), {}}}, {}, {}); 4375 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track}, 4376 {DataTypes::DatabaseIdRole, myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track3"), QStringLiteral("artist2"), QStringLiteral("album1"), 3, 3)}}, 4377 QStringLiteral("track3"), {}}}, {}, {}); 4378 4379 QCOMPARE(currentTrackChangedSpy.count(), 1); 4380 QCOMPARE(playListFinishedSpy.count(), 0); 4381 4382 QCOMPARE(myPlayListProxyModel.currentTrack(), QPersistentModelIndex(myPlayListProxyModel.index(0, 0))); 4383 4384 myPlayListProxyModel.skipNextTrack(); 4385 4386 QCOMPARE(currentTrackChangedSpy.count(), 2); 4387 QCOMPARE(playListFinishedSpy.count(), 0); 4388 4389 QCOMPARE(myPlayListProxyModel.currentTrack(), QPersistentModelIndex(myPlayListProxyModel.index(1, 0))); 4390 4391 myPlayListProxyModel.skipNextTrack(); 4392 4393 QCOMPARE(currentTrackChangedSpy.count(), 3); 4394 QCOMPARE(playListFinishedSpy.count(), 1); 4395 4396 QCOMPARE(myPlayListProxyModel.currentTrack(), QPersistentModelIndex(myPlayListProxyModel.index(0, 0))); 4397 } 4398 4399 void MediaPlayListProxyModelTest::removeBeforeCurrentTrack() 4400 { 4401 MediaPlayList myPlayList; 4402 QAbstractItemModelTester testModel(&myPlayList); 4403 MediaPlayListProxyModel myPlayListProxyModel; 4404 myPlayListProxyModel.setPlayListModel(&myPlayList); 4405 QAbstractItemModelTester testProxyModel(&myPlayListProxyModel); 4406 DatabaseInterface myDatabaseContent; 4407 TracksListener myListener(&myDatabaseContent); 4408 4409 QSignalSpy currentTrackChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::currentTrackChanged); 4410 QSignalSpy playListFinishedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::playListFinished); 4411 4412 myDatabaseContent.init(QStringLiteral("testDbDirectContent")); 4413 4414 connect(&myListener, &TracksListener::trackHasChanged, 4415 &myPlayList, &MediaPlayList::trackChanged, 4416 Qt::QueuedConnection); 4417 connect(&myListener, &TracksListener::tracksListAdded, 4418 &myPlayList, &MediaPlayList::tracksListAdded, 4419 Qt::QueuedConnection); 4420 connect(&myPlayList, &MediaPlayList::newTrackByNameInList, 4421 &myListener, &TracksListener::trackByNameInList, 4422 Qt::QueuedConnection); 4423 connect(&myPlayList, &MediaPlayList::newEntryInList, 4424 &myListener, &TracksListener::newEntryInList, 4425 Qt::QueuedConnection); 4426 connect(&myPlayList, &MediaPlayList::newUrlInList, 4427 &myListener, &TracksListener::newUrlInList, 4428 Qt::QueuedConnection); 4429 connect(&myDatabaseContent, &DatabaseInterface::tracksAdded, 4430 &myListener, &TracksListener::tracksAdded); 4431 4432 myDatabaseContent.insertTracksList(mNewTracks, mNewCovers); 4433 4434 QCOMPARE(currentTrackChangedSpy.count(), 0); 4435 QCOMPARE(playListFinishedSpy.count(), 0); 4436 4437 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track}, 4438 {DataTypes::DatabaseIdRole, myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track1"), QStringLiteral("artist1"), QStringLiteral("album2"), 1, 1)}}, 4439 QStringLiteral("track1"), {}}}, {}, {}); 4440 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track}, 4441 {DataTypes::DatabaseIdRole, myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track3"), QStringLiteral("artist3"), QStringLiteral("album1"), 3, 3)}}, 4442 QStringLiteral("track3"), {}}}, {}, {}); 4443 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track}, 4444 {DataTypes::DatabaseIdRole, myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track5"), QStringLiteral("artist1"), QStringLiteral("album2"), 5, 1)}}, 4445 QStringLiteral("track5"), {}}}, {}, {}); 4446 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track}, 4447 {DataTypes::DatabaseIdRole, myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track1"), QStringLiteral("artist1"), QStringLiteral("album2"), 1, 1)}}, 4448 QStringLiteral("track1"), {}}}, {}, {}); 4449 4450 QCOMPARE(currentTrackChangedSpy.count(), 1); 4451 QCOMPARE(playListFinishedSpy.count(), 0); 4452 4453 QCOMPARE(myPlayListProxyModel.currentTrack(), QPersistentModelIndex(myPlayListProxyModel.index(0, 0))); 4454 4455 myPlayListProxyModel.skipNextTrack(); 4456 4457 QCOMPARE(currentTrackChangedSpy.count(), 2); 4458 QCOMPARE(playListFinishedSpy.count(), 0); 4459 4460 QCOMPARE(myPlayListProxyModel.currentTrack(), QPersistentModelIndex(myPlayListProxyModel.index(1, 0))); 4461 4462 myPlayListProxyModel.skipNextTrack(); 4463 4464 QCOMPARE(currentTrackChangedSpy.count(), 3); 4465 QCOMPARE(playListFinishedSpy.count(), 0); 4466 4467 QCOMPARE(myPlayListProxyModel.currentTrack(), QPersistentModelIndex(myPlayListProxyModel.index(2, 0))); 4468 4469 myPlayListProxyModel.skipNextTrack(); 4470 4471 QCOMPARE(currentTrackChangedSpy.count(), 4); 4472 QCOMPARE(playListFinishedSpy.count(), 0); 4473 4474 QCOMPARE(myPlayListProxyModel.currentTrack(), QPersistentModelIndex(myPlayListProxyModel.index(3, 0))); 4475 4476 myPlayListProxyModel.removeRow(1); 4477 4478 QCOMPARE(currentTrackChangedSpy.count(), 4); 4479 QCOMPARE(playListFinishedSpy.count(), 0); 4480 } 4481 4482 void MediaPlayListProxyModelTest::switchToTrackTest() 4483 { 4484 MediaPlayList myPlayList; 4485 QAbstractItemModelTester testModel(&myPlayList); 4486 MediaPlayListProxyModel myPlayListProxyModel; 4487 myPlayListProxyModel.setPlayListModel(&myPlayList); 4488 QAbstractItemModelTester testProxyModel(&myPlayListProxyModel); 4489 DatabaseInterface myDatabaseContent; 4490 TracksListener myListener(&myDatabaseContent); 4491 4492 QSignalSpy currentTrackChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::currentTrackChanged); 4493 QSignalSpy playListFinishedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::playListFinished); 4494 4495 myDatabaseContent.init(QStringLiteral("testDbDirectContent")); 4496 4497 connect(&myListener, &TracksListener::trackHasChanged, 4498 &myPlayList, &MediaPlayList::trackChanged, 4499 Qt::QueuedConnection); 4500 connect(&myListener, &TracksListener::tracksListAdded, 4501 &myPlayList, &MediaPlayList::tracksListAdded, 4502 Qt::QueuedConnection); 4503 connect(&myPlayList, &MediaPlayList::newTrackByNameInList, 4504 &myListener, &TracksListener::trackByNameInList, 4505 Qt::QueuedConnection); 4506 connect(&myPlayList, &MediaPlayList::newEntryInList, 4507 &myListener, &TracksListener::newEntryInList, 4508 Qt::QueuedConnection); 4509 connect(&myPlayList, &MediaPlayList::newUrlInList, 4510 &myListener, &TracksListener::newUrlInList, 4511 Qt::QueuedConnection); 4512 connect(&myDatabaseContent, &DatabaseInterface::tracksAdded, 4513 &myListener, &TracksListener::tracksAdded); 4514 4515 myDatabaseContent.insertTracksList(mNewTracks, mNewCovers); 4516 4517 QCOMPARE(currentTrackChangedSpy.count(), 0); 4518 QCOMPARE(playListFinishedSpy.count(), 0); 4519 4520 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track}, 4521 {DataTypes::DatabaseIdRole, myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track1"), QStringLiteral("artist1"), QStringLiteral("album2"), 1, 1)}}, 4522 QStringLiteral("track1"), {}}}, {}, {}); 4523 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track}, 4524 {DataTypes::DatabaseIdRole, myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track3"), QStringLiteral("artist3"), QStringLiteral("album1"), 3, 3)}}, 4525 QStringLiteral("track3"), {}}}, {}, {}); 4526 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track}, 4527 {DataTypes::DatabaseIdRole, myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track4"), QStringLiteral("artist1"), QStringLiteral("album1"), 4, 4)}}, 4528 QStringLiteral("track4"), {}}}, {}, {}); 4529 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track}, 4530 {DataTypes::DatabaseIdRole, myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track2"), QStringLiteral("artist1"), QStringLiteral("album1"), 2, 2)}}, 4531 QStringLiteral("track2"), {}}}, {}, {}); 4532 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track}, 4533 {DataTypes::DatabaseIdRole, myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track1"), QStringLiteral("artist1"), QStringLiteral("album2"), 1, 1)}}, 4534 QStringLiteral("track1"), {}}}, {}, {}); 4535 4536 QCOMPARE(currentTrackChangedSpy.count(), 1); 4537 QCOMPARE(playListFinishedSpy.count(), 0); 4538 4539 QCOMPARE(myPlayListProxyModel.currentTrack(), QPersistentModelIndex(myPlayListProxyModel.index(0, 0))); 4540 4541 myPlayListProxyModel.switchTo(4); 4542 4543 QCOMPARE(currentTrackChangedSpy.count(), 2); 4544 QCOMPARE(playListFinishedSpy.count(), 0); 4545 4546 QCOMPARE(myPlayListProxyModel.currentTrack(), QPersistentModelIndex(myPlayListProxyModel.index(4, 0))); 4547 } 4548 4549 void MediaPlayListProxyModelTest::singleTrack() 4550 { 4551 MediaPlayList myPlayList; 4552 QAbstractItemModelTester testModel(&myPlayList); 4553 MediaPlayListProxyModel myPlayListProxyModel; 4554 myPlayListProxyModel.setPlayListModel(&myPlayList); 4555 QAbstractItemModelTester testProxyModel(&myPlayListProxyModel); 4556 DatabaseInterface myDatabaseContent; 4557 TracksListener myListener(&myDatabaseContent); 4558 4559 QSignalSpy currentTrackChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::currentTrackChanged); 4560 QSignalSpy playListFinishedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::playListFinished); 4561 4562 myDatabaseContent.init(QStringLiteral("testDbDirectContent")); 4563 4564 connect(&myListener, &TracksListener::trackHasChanged, 4565 &myPlayList, &MediaPlayList::trackChanged, 4566 Qt::QueuedConnection); 4567 connect(&myListener, &TracksListener::tracksListAdded, 4568 &myPlayList, &MediaPlayList::tracksListAdded, 4569 Qt::QueuedConnection); 4570 connect(&myPlayList, &MediaPlayList::newTrackByNameInList, 4571 &myListener, &TracksListener::trackByNameInList, 4572 Qt::QueuedConnection); 4573 connect(&myPlayList, &MediaPlayList::newEntryInList, 4574 &myListener, &TracksListener::newEntryInList, 4575 Qt::QueuedConnection); 4576 connect(&myPlayList, &MediaPlayList::newUrlInList, 4577 &myListener, &TracksListener::newUrlInList, 4578 Qt::QueuedConnection); 4579 connect(&myDatabaseContent, &DatabaseInterface::tracksAdded, 4580 &myListener, &TracksListener::tracksAdded); 4581 4582 QCOMPARE(currentTrackChangedSpy.count(), 0); 4583 QCOMPARE(playListFinishedSpy.count(), 0); 4584 4585 myDatabaseContent.insertTracksList(mNewTracks, mNewCovers); 4586 4587 QCOMPARE(currentTrackChangedSpy.count(), 0); 4588 QCOMPARE(playListFinishedSpy.count(), 0); 4589 4590 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track}, 4591 {DataTypes::DatabaseIdRole, myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track1"), QStringLiteral("artist1"), QStringLiteral("album2"), 1, 1)}}, 4592 QStringLiteral("track1"), {}}}, {}, {}); 4593 4594 QCOMPARE(currentTrackChangedSpy.count(), 1); 4595 QCOMPARE(playListFinishedSpy.count(), 0); 4596 4597 QCOMPARE(myPlayListProxyModel.currentTrack(), QPersistentModelIndex(myPlayListProxyModel.index(0, 0))); 4598 4599 myPlayListProxyModel.skipNextTrack(); 4600 4601 QCOMPARE(currentTrackChangedSpy.count(), 2); 4602 QCOMPARE(playListFinishedSpy.count(), 1); 4603 4604 QCOMPARE(myPlayListProxyModel.currentTrack(), QPersistentModelIndex(myPlayListProxyModel.index(0, 0))); 4605 } 4606 4607 void MediaPlayListProxyModelTest::testBringUpAndRemoveCase() 4608 { 4609 MediaPlayList myPlayList; 4610 QAbstractItemModelTester testModel(&myPlayList); 4611 MediaPlayListProxyModel myPlayListProxyModel; 4612 myPlayListProxyModel.setPlayListModel(&myPlayList); 4613 QAbstractItemModelTester testProxyModel(&myPlayListProxyModel); 4614 DatabaseInterface myDatabaseContent; 4615 TracksListener myListener(&myDatabaseContent); 4616 4617 QSignalSpy currentTrackChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::currentTrackChanged); 4618 QSignalSpy playListFinishedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::playListFinished); 4619 4620 myDatabaseContent.init(QStringLiteral("testDbDirectContent")); 4621 4622 connect(&myListener, &TracksListener::trackHasChanged, 4623 &myPlayList, &MediaPlayList::trackChanged, 4624 Qt::QueuedConnection); 4625 connect(&myListener, &TracksListener::tracksListAdded, 4626 &myPlayList, &MediaPlayList::tracksListAdded, 4627 Qt::QueuedConnection); 4628 connect(&myPlayList, &MediaPlayList::newTrackByNameInList, 4629 &myListener, &TracksListener::trackByNameInList, 4630 Qt::QueuedConnection); 4631 connect(&myPlayList, &MediaPlayList::newEntryInList, 4632 &myListener, &TracksListener::newEntryInList, 4633 Qt::QueuedConnection); 4634 connect(&myPlayList, &MediaPlayList::newUrlInList, 4635 &myListener, &TracksListener::newUrlInList, 4636 Qt::QueuedConnection); 4637 connect(&myDatabaseContent, &DatabaseInterface::tracksAdded, 4638 &myListener, &TracksListener::tracksAdded); 4639 4640 myDatabaseContent.insertTracksList(mNewTracks, mNewCovers); 4641 4642 QCOMPARE(currentTrackChangedSpy.count(), 0); 4643 QCOMPARE(playListFinishedSpy.count(), 0); 4644 4645 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track}, 4646 {DataTypes::DatabaseIdRole, myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track1"), QStringLiteral("artist1"), QStringLiteral("album2"), 1, 1)}}, 4647 QStringLiteral("track1"), {}}}, {}, {}); 4648 4649 QCOMPARE(currentTrackChangedSpy.count(), 1); 4650 QCOMPARE(playListFinishedSpy.count(), 0); 4651 4652 QCOMPARE(myPlayListProxyModel.currentTrack(), QPersistentModelIndex(myPlayListProxyModel.index(0, 0))); 4653 4654 myPlayListProxyModel.removeRow(0); 4655 4656 QCOMPARE(currentTrackChangedSpy.count(), 2); 4657 QCOMPARE(playListFinishedSpy.count(), 1); 4658 4659 QCOMPARE(myPlayListProxyModel.currentTrack(), QPersistentModelIndex()); 4660 } 4661 4662 void MediaPlayListProxyModelTest::testBringUpAndRemoveLastCase() 4663 { 4664 MediaPlayList myPlayList; 4665 QAbstractItemModelTester testModel(&myPlayList); 4666 MediaPlayListProxyModel myPlayListProxyModel; 4667 myPlayListProxyModel.setPlayListModel(&myPlayList); 4668 QAbstractItemModelTester testProxyModel(&myPlayListProxyModel); 4669 DatabaseInterface myDatabaseContent; 4670 TracksListener myListener(&myDatabaseContent); 4671 4672 QSignalSpy currentTrackChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::currentTrackChanged); 4673 QSignalSpy playListFinishedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::playListFinished); 4674 4675 myDatabaseContent.init(QStringLiteral("testDbDirectContent")); 4676 4677 connect(&myListener, &TracksListener::trackHasChanged, 4678 &myPlayList, &MediaPlayList::trackChanged, 4679 Qt::QueuedConnection); 4680 connect(&myListener, &TracksListener::tracksListAdded, 4681 &myPlayList, &MediaPlayList::tracksListAdded, 4682 Qt::QueuedConnection); 4683 connect(&myPlayList, &MediaPlayList::newTrackByNameInList, 4684 &myListener, &TracksListener::trackByNameInList, 4685 Qt::QueuedConnection); 4686 connect(&myPlayList, &MediaPlayList::newEntryInList, 4687 &myListener, &TracksListener::newEntryInList, 4688 Qt::QueuedConnection); 4689 connect(&myPlayList, &MediaPlayList::newUrlInList, 4690 &myListener, &TracksListener::newUrlInList, 4691 Qt::QueuedConnection); 4692 connect(&myDatabaseContent, &DatabaseInterface::tracksAdded, 4693 &myListener, &TracksListener::tracksAdded); 4694 4695 QCOMPARE(currentTrackChangedSpy.count(), 0); 4696 QCOMPARE(playListFinishedSpy.count(), 0); 4697 4698 myDatabaseContent.insertTracksList(mNewTracks, mNewCovers); 4699 4700 QCOMPARE(currentTrackChangedSpy.count(), 0); 4701 QCOMPARE(playListFinishedSpy.count(), 0); 4702 4703 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track}, 4704 {DataTypes::DatabaseIdRole, myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track1"), QStringLiteral("artist1"), QStringLiteral("album2"), 1, 1)}}, 4705 QStringLiteral("track1"), {}}}, {}, {}); 4706 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track}, 4707 {DataTypes::DatabaseIdRole, myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track2"), QStringLiteral("artist1"), QStringLiteral("album2"), 2, 1)}}, 4708 QStringLiteral("track2"), {}}}, {}, {}); 4709 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track}, 4710 {DataTypes::DatabaseIdRole, myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track3"), QStringLiteral("artist1"), QStringLiteral("album2"), 3, 1)}}, 4711 QStringLiteral("track3"), {}}}, {}, {}); 4712 4713 QCOMPARE(currentTrackChangedSpy.count(), 1); 4714 QCOMPARE(playListFinishedSpy.count(), 0); 4715 4716 QCOMPARE(myPlayListProxyModel.currentTrack(), QPersistentModelIndex(myPlayListProxyModel.index(0, 0))); 4717 4718 myPlayListProxyModel.skipNextTrack(); 4719 4720 QCOMPARE(currentTrackChangedSpy.count(), 2); 4721 QCOMPARE(playListFinishedSpy.count(), 0); 4722 4723 QCOMPARE(myPlayListProxyModel.currentTrack(), QPersistentModelIndex(myPlayListProxyModel.index(1, 0))); 4724 4725 myPlayListProxyModel.skipNextTrack(); 4726 4727 QCOMPARE(currentTrackChangedSpy.count(), 3); 4728 QCOMPARE(playListFinishedSpy.count(), 0); 4729 4730 QCOMPARE(myPlayListProxyModel.currentTrack(), QPersistentModelIndex(myPlayListProxyModel.index(2, 0))); 4731 4732 myPlayListProxyModel.removeRow(2); 4733 4734 QCOMPARE(currentTrackChangedSpy.count(), 4); 4735 QCOMPARE(playListFinishedSpy.count(), 1); 4736 4737 QCOMPARE(myPlayListProxyModel.currentTrack(), QPersistentModelIndex(myPlayListProxyModel.index(0, 0))); 4738 } 4739 4740 void MediaPlayListProxyModelTest::testBringUpAndRemoveMultipleCase() 4741 { 4742 MediaPlayList myPlayList; 4743 QAbstractItemModelTester testModel(&myPlayList); 4744 MediaPlayListProxyModel myPlayListProxyModel; 4745 myPlayListProxyModel.setPlayListModel(&myPlayList); 4746 QAbstractItemModelTester testProxyModel(&myPlayListProxyModel); 4747 DatabaseInterface myDatabaseContent; 4748 TracksListener myListener(&myDatabaseContent); 4749 4750 QSignalSpy currentTrackChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::currentTrackChanged); 4751 QSignalSpy playListFinishedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::playListFinished); 4752 4753 myDatabaseContent.init(QStringLiteral("testDbDirectContent")); 4754 4755 connect(&myListener, &TracksListener::trackHasChanged, 4756 &myPlayList, &MediaPlayList::trackChanged, 4757 Qt::QueuedConnection); 4758 connect(&myListener, &TracksListener::tracksListAdded, 4759 &myPlayList, &MediaPlayList::tracksListAdded, 4760 Qt::QueuedConnection); 4761 connect(&myPlayList, &MediaPlayList::newTrackByNameInList, 4762 &myListener, &TracksListener::trackByNameInList, 4763 Qt::QueuedConnection); 4764 connect(&myPlayList, &MediaPlayList::newEntryInList, 4765 &myListener, &TracksListener::newEntryInList, 4766 Qt::QueuedConnection); 4767 connect(&myPlayList, &MediaPlayList::newUrlInList, 4768 &myListener, &TracksListener::newUrlInList, 4769 Qt::QueuedConnection); 4770 connect(&myDatabaseContent, &DatabaseInterface::tracksAdded, 4771 &myListener, &TracksListener::tracksAdded); 4772 4773 myDatabaseContent.insertTracksList(mNewTracks, mNewCovers); 4774 4775 QCOMPARE(currentTrackChangedSpy.count(), 0); 4776 QCOMPARE(playListFinishedSpy.count(), 0); 4777 4778 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track}, 4779 {DataTypes::DatabaseIdRole, myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track1"), QStringLiteral("artist1"), QStringLiteral("album2"), 1, 1)}}, 4780 QStringLiteral("track1"), {}}}, {}, {}); 4781 4782 QCOMPARE(currentTrackChangedSpy.count(), 1); 4783 QCOMPARE(playListFinishedSpy.count(), 0); 4784 4785 QCOMPARE(myPlayListProxyModel.currentTrack(), QPersistentModelIndex(myPlayListProxyModel.index(0, 0))); 4786 4787 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track}, 4788 {DataTypes::DatabaseIdRole, myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track2"), QStringLiteral("artist1"), QStringLiteral("album1"), 2, 2)}}, 4789 QStringLiteral("track2"), {}}}, {}, {}); 4790 4791 QCOMPARE(currentTrackChangedSpy.count(), 1); 4792 QCOMPARE(playListFinishedSpy.count(), 0); 4793 4794 myPlayListProxyModel.removeRow(0); 4795 4796 QCOMPARE(currentTrackChangedSpy.count(), 2); 4797 QCOMPARE(playListFinishedSpy.count(), 0); 4798 4799 QCOMPARE(myPlayListProxyModel.currentTrack(), QPersistentModelIndex(myPlayListProxyModel.index(0, 0))); 4800 } 4801 4802 void MediaPlayListProxyModelTest::testBringUpAndDownCase() 4803 { 4804 MediaPlayList myPlayList; 4805 QAbstractItemModelTester testModel(&myPlayList); 4806 MediaPlayListProxyModel myPlayListProxyModel; 4807 myPlayListProxyModel.setPlayListModel(&myPlayList); 4808 QAbstractItemModelTester testProxyModel(&myPlayListProxyModel); 4809 DatabaseInterface myDatabaseContent; 4810 TracksListener myListener(&myDatabaseContent); 4811 4812 QSignalSpy currentTrackChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::currentTrackChanged); 4813 QSignalSpy playListFinishedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::playListFinished); 4814 4815 myDatabaseContent.init(QStringLiteral("testDbDirectContent")); 4816 4817 connect(&myListener, &TracksListener::trackHasChanged, 4818 &myPlayList, &MediaPlayList::trackChanged, 4819 Qt::QueuedConnection); 4820 connect(&myListener, &TracksListener::tracksListAdded, 4821 &myPlayList, &MediaPlayList::tracksListAdded, 4822 Qt::QueuedConnection); 4823 connect(&myPlayList, &MediaPlayList::newTrackByNameInList, 4824 &myListener, &TracksListener::trackByNameInList, 4825 Qt::QueuedConnection); 4826 connect(&myPlayList, &MediaPlayList::newEntryInList, 4827 &myListener, &TracksListener::newEntryInList, 4828 Qt::QueuedConnection); 4829 connect(&myPlayList, &MediaPlayList::newUrlInList, 4830 &myListener, &TracksListener::newUrlInList, 4831 Qt::QueuedConnection); 4832 connect(&myDatabaseContent, &DatabaseInterface::tracksAdded, 4833 &myListener, &TracksListener::tracksAdded); 4834 4835 QCOMPARE(currentTrackChangedSpy.count(), 0); 4836 QCOMPARE(playListFinishedSpy.count(), 0); 4837 4838 myDatabaseContent.insertTracksList(mNewTracks, mNewCovers); 4839 4840 QCOMPARE(currentTrackChangedSpy.count(), 0); 4841 QCOMPARE(playListFinishedSpy.count(), 0); 4842 4843 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track}, 4844 {DataTypes::DatabaseIdRole, myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track1"), QStringLiteral("artist1"), QStringLiteral("album2"), 1, 1)}}, 4845 QStringLiteral("track1"), {}}}, {}, {}); 4846 4847 QCOMPARE(currentTrackChangedSpy.count(), 1); 4848 QCOMPARE(playListFinishedSpy.count(), 0); 4849 4850 QCOMPARE(myPlayListProxyModel.currentTrack(), QPersistentModelIndex(myPlayListProxyModel.index(0, 0))); 4851 4852 myPlayListProxyModel.removeRow(0); 4853 4854 QCOMPARE(currentTrackChangedSpy.count(), 2); 4855 QCOMPARE(playListFinishedSpy.count(), 1); 4856 4857 QCOMPARE(myPlayListProxyModel.currentTrack(), QPersistentModelIndex()); 4858 } 4859 4860 void MediaPlayListProxyModelTest::testBringUpCase() 4861 { 4862 MediaPlayList myPlayList; 4863 QAbstractItemModelTester testModel(&myPlayList); 4864 MediaPlayListProxyModel myPlayListProxyModel; 4865 myPlayListProxyModel.setPlayListModel(&myPlayList); 4866 QAbstractItemModelTester testProxyModel(&myPlayListProxyModel); 4867 DatabaseInterface myDatabaseContent; 4868 TracksListener myListener(&myDatabaseContent); 4869 4870 QSignalSpy currentTrackChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::currentTrackChanged); 4871 QSignalSpy playListFinishedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::playListFinished); 4872 4873 myDatabaseContent.init(QStringLiteral("testDbDirectContent")); 4874 4875 connect(&myListener, &TracksListener::trackHasChanged, 4876 &myPlayList, &MediaPlayList::trackChanged, 4877 Qt::QueuedConnection); 4878 connect(&myListener, &TracksListener::tracksListAdded, 4879 &myPlayList, &MediaPlayList::tracksListAdded, 4880 Qt::QueuedConnection); 4881 connect(&myPlayList, &MediaPlayList::newTrackByNameInList, 4882 &myListener, &TracksListener::trackByNameInList, 4883 Qt::QueuedConnection); 4884 connect(&myPlayList, &MediaPlayList::newEntryInList, 4885 &myListener, &TracksListener::newEntryInList, 4886 Qt::QueuedConnection); 4887 connect(&myPlayList, &MediaPlayList::newUrlInList, 4888 &myListener, &TracksListener::newUrlInList, 4889 Qt::QueuedConnection); 4890 connect(&myDatabaseContent, &DatabaseInterface::tracksAdded, 4891 &myListener, &TracksListener::tracksAdded); 4892 4893 QCOMPARE(currentTrackChangedSpy.count(), 0); 4894 QCOMPARE(playListFinishedSpy.count(), 0); 4895 4896 myDatabaseContent.insertTracksList(mNewTracks, mNewCovers); 4897 4898 QCOMPARE(currentTrackChangedSpy.count(), 0); 4899 QCOMPARE(playListFinishedSpy.count(), 0); 4900 4901 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track}, 4902 {DataTypes::DatabaseIdRole, myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track1"), QStringLiteral("artist1"), QStringLiteral("album2"), 1, 1)}}, 4903 QStringLiteral("track1"), {}}}, {}, {}); 4904 4905 QCOMPARE(currentTrackChangedSpy.count(), 1); 4906 QCOMPARE(playListFinishedSpy.count(), 0); 4907 4908 QCOMPARE(myPlayListProxyModel.currentTrack(), QPersistentModelIndex(myPlayListProxyModel.index(0, 0))); 4909 } 4910 4911 void MediaPlayListProxyModelTest::testBringUpCaseFromNewAlbum() 4912 { 4913 MediaPlayList myPlayList; 4914 QAbstractItemModelTester testModel(&myPlayList); 4915 MediaPlayListProxyModel myPlayListProxyModel; 4916 myPlayListProxyModel.setPlayListModel(&myPlayList); 4917 QAbstractItemModelTester testProxyModel(&myPlayListProxyModel); 4918 DatabaseInterface myDatabaseContent; 4919 TracksListener myListener(&myDatabaseContent); 4920 4921 QSignalSpy currentTrackChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::currentTrackChanged); 4922 QSignalSpy playListFinishedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::playListFinished); 4923 4924 myDatabaseContent.init(QStringLiteral("testDbDirectContent")); 4925 4926 connect(&myListener, &TracksListener::trackHasChanged, 4927 &myPlayList, &MediaPlayList::trackChanged, 4928 Qt::QueuedConnection); 4929 connect(&myListener, &TracksListener::tracksListAdded, 4930 &myPlayList, &MediaPlayList::tracksListAdded, 4931 Qt::QueuedConnection); 4932 connect(&myPlayList, &MediaPlayList::newTrackByNameInList, 4933 &myListener, &TracksListener::trackByNameInList, 4934 Qt::QueuedConnection); 4935 connect(&myPlayList, &MediaPlayList::newEntryInList, 4936 &myListener, &TracksListener::newEntryInList, 4937 Qt::QueuedConnection); 4938 connect(&myPlayList, &MediaPlayList::newUrlInList, 4939 &myListener, &TracksListener::newUrlInList, 4940 Qt::QueuedConnection); 4941 connect(&myDatabaseContent, &DatabaseInterface::tracksAdded, 4942 &myListener, &TracksListener::tracksAdded); 4943 4944 QCOMPARE(currentTrackChangedSpy.count(), 0); 4945 QCOMPARE(playListFinishedSpy.count(), 0); 4946 4947 myDatabaseContent.insertTracksList(mNewTracks, mNewCovers); 4948 4949 QCOMPARE(currentTrackChangedSpy.count(), 0); 4950 QCOMPARE(playListFinishedSpy.count(), 0); 4951 4952 auto newTrackID = myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track1"), QStringLiteral("artist1"), 4953 QStringLiteral("album2"), 1, 1); 4954 4955 QVERIFY(newTrackID != 0); 4956 4957 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track}, 4958 {DataTypes::DatabaseIdRole, newTrackID}}, QStringLiteral("track1"), {}}}, {}, {}); 4959 4960 QCOMPARE(currentTrackChangedSpy.count(), 1); 4961 QCOMPARE(playListFinishedSpy.count(), 0); 4962 4963 QCOMPARE(myPlayListProxyModel.currentTrack(), QPersistentModelIndex(myPlayListProxyModel.index(0, 0))); 4964 } 4965 4966 void MediaPlayListProxyModelTest::testSetData() 4967 { 4968 MediaPlayList myPlayList; 4969 QAbstractItemModelTester testModel(&myPlayList); 4970 MediaPlayListProxyModel myPlayListProxyModel; 4971 myPlayListProxyModel.setPlayListModel(&myPlayList); 4972 QAbstractItemModelTester testProxyModel(&myPlayListProxyModel); 4973 DatabaseInterface myDatabaseContent; 4974 TracksListener myListener(&myDatabaseContent); 4975 4976 QSignalSpy rowsAboutToBeMovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsAboutToBeMoved); 4977 QSignalSpy rowsAboutToBeRemovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsAboutToBeRemoved); 4978 QSignalSpy rowsAboutToBeInsertedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsAboutToBeInserted); 4979 QSignalSpy rowsMovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsMoved); 4980 QSignalSpy rowsRemovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsRemoved); 4981 QSignalSpy rowsInsertedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsInserted); 4982 QSignalSpy persistentStateChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::persistentStateChanged); 4983 QSignalSpy dataChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::dataChanged); 4984 QSignalSpy newTrackByNameInListSpy(&myPlayList, &MediaPlayList::newTrackByNameInList); 4985 QSignalSpy newEntryInListSpy(&myPlayList, &MediaPlayList::newEntryInList); 4986 QSignalSpy newUrlInListSpy(&myPlayList, &MediaPlayList::newUrlInList); 4987 4988 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); 4989 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 4990 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 0); 4991 QCOMPARE(rowsRemovedSpy.count(), 0); 4992 QCOMPARE(rowsMovedSpy.count(), 0); 4993 QCOMPARE(rowsInsertedSpy.count(), 0); 4994 QCOMPARE(persistentStateChangedSpy.count(), 0); 4995 QCOMPARE(dataChangedSpy.count(), 0); 4996 QCOMPARE(newTrackByNameInListSpy.count(), 0); 4997 QCOMPARE(newEntryInListSpy.count(), 0); 4998 4999 myDatabaseContent.init(QStringLiteral("testDbDirectContent")); 5000 5001 connect(&myListener, &TracksListener::trackHasChanged, 5002 &myPlayList, &MediaPlayList::trackChanged, 5003 Qt::QueuedConnection); 5004 connect(&myListener, &TracksListener::tracksListAdded, 5005 &myPlayList, &MediaPlayList::tracksListAdded, 5006 Qt::QueuedConnection); 5007 connect(&myPlayList, &MediaPlayList::newTrackByNameInList, 5008 &myListener, &TracksListener::trackByNameInList, 5009 Qt::QueuedConnection); 5010 connect(&myPlayList, &MediaPlayList::newEntryInList, 5011 &myListener, &TracksListener::newEntryInList, 5012 Qt::QueuedConnection); 5013 connect(&myPlayList, &MediaPlayList::newUrlInList, 5014 &myListener, &TracksListener::newUrlInList, 5015 Qt::QueuedConnection); 5016 connect(&myDatabaseContent, &DatabaseInterface::tracksAdded, 5017 &myListener, &TracksListener::tracksAdded); 5018 5019 myDatabaseContent.insertTracksList(mNewTracks, mNewCovers); 5020 5021 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); 5022 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 5023 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 0); 5024 QCOMPARE(rowsRemovedSpy.count(), 0); 5025 QCOMPARE(rowsMovedSpy.count(), 0); 5026 QCOMPARE(rowsInsertedSpy.count(), 0); 5027 QCOMPARE(persistentStateChangedSpy.count(), 0); 5028 QCOMPARE(dataChangedSpy.count(), 0); 5029 QCOMPARE(newTrackByNameInListSpy.count(), 0); 5030 QCOMPARE(newEntryInListSpy.count(), 0); 5031 5032 auto firstTrackId = myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track1"), QStringLiteral("artist2"), 5033 QStringLiteral("album3"), 1, 1); 5034 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track}, 5035 {DataTypes::DatabaseIdRole, firstTrackId}}, {}, {}}}, {}, {}); 5036 5037 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); 5038 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 5039 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 1); 5040 QCOMPARE(rowsRemovedSpy.count(), 0); 5041 QCOMPARE(rowsMovedSpy.count(), 0); 5042 QCOMPARE(rowsInsertedSpy.count(), 1); 5043 QCOMPARE(persistentStateChangedSpy.count(), 1); 5044 QCOMPARE(dataChangedSpy.count(), 0); 5045 QCOMPARE(newTrackByNameInListSpy.count(), 0); 5046 QCOMPARE(newEntryInListSpy.count(), 1); 5047 5048 QCOMPARE(dataChangedSpy.wait(), true); 5049 5050 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); 5051 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 5052 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 1); 5053 QCOMPARE(rowsRemovedSpy.count(), 0); 5054 QCOMPARE(rowsMovedSpy.count(), 0); 5055 QCOMPARE(rowsInsertedSpy.count(), 1); 5056 QCOMPARE(persistentStateChangedSpy.count(), 1); 5057 QCOMPARE(dataChangedSpy.count(), 1); 5058 QCOMPARE(newTrackByNameInListSpy.count(), 0); 5059 QCOMPARE(newEntryInListSpy.count(), 1); 5060 5061 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::IsPlayingRole).toBool(), false); 5062 5063 auto secondTrackId = myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track1"), QStringLiteral("artist1"), 5064 QStringLiteral("album1"), 1, 1); 5065 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track}, 5066 {DataTypes::DatabaseIdRole, secondTrackId}}, {}, {}}}, {}, {}); 5067 5068 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); 5069 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 5070 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 2); 5071 QCOMPARE(rowsRemovedSpy.count(), 0); 5072 QCOMPARE(rowsMovedSpy.count(), 0); 5073 QCOMPARE(rowsInsertedSpy.count(), 2); 5074 QCOMPARE(persistentStateChangedSpy.count(), 2); 5075 QCOMPARE(dataChangedSpy.count(), 1); 5076 QCOMPARE(newTrackByNameInListSpy.count(), 0); 5077 QCOMPARE(newEntryInListSpy.count(), 2); 5078 5079 QCOMPARE(dataChangedSpy.wait(), true); 5080 5081 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); 5082 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 5083 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 2); 5084 QCOMPARE(rowsRemovedSpy.count(), 0); 5085 QCOMPARE(rowsMovedSpy.count(), 0); 5086 QCOMPARE(rowsInsertedSpy.count(), 2); 5087 QCOMPARE(persistentStateChangedSpy.count(), 2); 5088 QCOMPARE(dataChangedSpy.count(), 2); 5089 QCOMPARE(newTrackByNameInListSpy.count(), 0); 5090 QCOMPARE(newEntryInListSpy.count(), 2); 5091 5092 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::IsPlayingRole).toBool(), false); 5093 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::ColumnsRoles::IsPlayingRole).toBool(), false); 5094 5095 auto thirdTrackId = myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track2"), QStringLiteral("artist2"), 5096 QStringLiteral("album3"), 2, 1); 5097 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track}, 5098 {DataTypes::DatabaseIdRole, thirdTrackId}}, {}, {}}}, {}, {}); 5099 5100 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); 5101 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 5102 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 3); 5103 QCOMPARE(rowsRemovedSpy.count(), 0); 5104 QCOMPARE(rowsMovedSpy.count(), 0); 5105 QCOMPARE(rowsInsertedSpy.count(), 3); 5106 QCOMPARE(persistentStateChangedSpy.count(), 3); 5107 QCOMPARE(dataChangedSpy.count(), 2); 5108 QCOMPARE(newTrackByNameInListSpy.count(), 0); 5109 QCOMPARE(newEntryInListSpy.count(), 3); 5110 5111 QCOMPARE(dataChangedSpy.wait(), true); 5112 5113 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); 5114 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 5115 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 3); 5116 QCOMPARE(rowsRemovedSpy.count(), 0); 5117 QCOMPARE(rowsMovedSpy.count(), 0); 5118 QCOMPARE(rowsInsertedSpy.count(), 3); 5119 QCOMPARE(persistentStateChangedSpy.count(), 3); 5120 QCOMPARE(dataChangedSpy.count(), 3); 5121 QCOMPARE(newTrackByNameInListSpy.count(), 0); 5122 QCOMPARE(newEntryInListSpy.count(), 3); 5123 5124 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::IsPlayingRole).toBool(), false); 5125 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::ColumnsRoles::IsPlayingRole).toBool(), false); 5126 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::ColumnsRoles::IsPlayingRole).toBool(), false); 5127 5128 QCOMPARE(myPlayListProxyModel.setData(myPlayListProxyModel.index(2, 0), true, MediaPlayList::ColumnsRoles::IsPlayingRole), true); 5129 5130 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); 5131 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 5132 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 3); 5133 QCOMPARE(rowsRemovedSpy.count(), 0); 5134 QCOMPARE(rowsMovedSpy.count(), 0); 5135 QCOMPARE(rowsInsertedSpy.count(), 3); 5136 QCOMPARE(persistentStateChangedSpy.count(), 3); 5137 QCOMPARE(dataChangedSpy.count(), 4); 5138 QCOMPARE(newTrackByNameInListSpy.count(), 0); 5139 QCOMPARE(newEntryInListSpy.count(), 3); 5140 5141 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::IsPlayingRole).toBool(), false); 5142 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::ColumnsRoles::IsPlayingRole).toBool(), false); 5143 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::ColumnsRoles::IsPlayingRole).toBool(), true); 5144 5145 QCOMPARE(myPlayListProxyModel.setData(myPlayListProxyModel.index(2, 0), true, MediaPlayList::ColumnsRoles::SecondaryTextRole), false); 5146 5147 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); 5148 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 5149 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 3); 5150 QCOMPARE(rowsRemovedSpy.count(), 0); 5151 QCOMPARE(rowsMovedSpy.count(), 0); 5152 QCOMPARE(rowsInsertedSpy.count(), 3); 5153 QCOMPARE(persistentStateChangedSpy.count(), 3); 5154 QCOMPARE(dataChangedSpy.count(), 4); 5155 QCOMPARE(newTrackByNameInListSpy.count(), 0); 5156 QCOMPARE(newEntryInListSpy.count(), 3); 5157 5158 QCOMPARE(myPlayListProxyModel.setData(myPlayListProxyModel.index(4, 0), true, MediaPlayList::ColumnsRoles::TitleRole), false); 5159 5160 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); 5161 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 5162 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 3); 5163 QCOMPARE(rowsRemovedSpy.count(), 0); 5164 QCOMPARE(rowsMovedSpy.count(), 0); 5165 QCOMPARE(rowsInsertedSpy.count(), 3); 5166 QCOMPARE(persistentStateChangedSpy.count(), 3); 5167 QCOMPARE(dataChangedSpy.count(), 4); 5168 QCOMPARE(newTrackByNameInListSpy.count(), 0); 5169 QCOMPARE(newEntryInListSpy.count(), 3); 5170 5171 QCOMPARE(myPlayListProxyModel.setData({}, true, MediaPlayList::ColumnsRoles::TitleRole), false); 5172 5173 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); 5174 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 5175 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 3); 5176 QCOMPARE(rowsRemovedSpy.count(), 0); 5177 QCOMPARE(rowsMovedSpy.count(), 0); 5178 QCOMPARE(rowsInsertedSpy.count(), 3); 5179 QCOMPARE(persistentStateChangedSpy.count(), 3); 5180 QCOMPARE(dataChangedSpy.count(), 4); 5181 QCOMPARE(newTrackByNameInListSpy.count(), 0); 5182 QCOMPARE(newEntryInListSpy.count(), 3); 5183 } 5184 5185 void MediaPlayListProxyModelTest::testHasHeader() 5186 { 5187 MediaPlayList myPlayList; 5188 QAbstractItemModelTester testModel(&myPlayList); 5189 MediaPlayListProxyModel myPlayListProxyModel; 5190 myPlayListProxyModel.setPlayListModel(&myPlayList); 5191 QAbstractItemModelTester testProxyModel(&myPlayListProxyModel); 5192 DatabaseInterface myDatabaseContent; 5193 TracksListener myListener(&myDatabaseContent); 5194 5195 QSignalSpy rowsAboutToBeMovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsAboutToBeMoved); 5196 QSignalSpy rowsAboutToBeRemovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsAboutToBeRemoved); 5197 QSignalSpy rowsAboutToBeInsertedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsAboutToBeInserted); 5198 QSignalSpy rowsMovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsMoved); 5199 QSignalSpy rowsRemovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsRemoved); 5200 QSignalSpy rowsInsertedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsInserted); 5201 QSignalSpy persistentStateChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::persistentStateChanged); 5202 QSignalSpy dataChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::dataChanged); 5203 QSignalSpy newTrackByNameInListSpy(&myPlayList, &MediaPlayList::newTrackByNameInList); 5204 QSignalSpy newEntryInListSpy(&myPlayList, &MediaPlayList::newEntryInList); 5205 QSignalSpy newUrlInListSpy(&myPlayList, &MediaPlayList::newUrlInList); 5206 5207 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); 5208 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 5209 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 0); 5210 QCOMPARE(rowsRemovedSpy.count(), 0); 5211 QCOMPARE(rowsMovedSpy.count(), 0); 5212 QCOMPARE(rowsInsertedSpy.count(), 0); 5213 QCOMPARE(persistentStateChangedSpy.count(), 0); 5214 QCOMPARE(dataChangedSpy.count(), 0); 5215 QCOMPARE(newTrackByNameInListSpy.count(), 0); 5216 QCOMPARE(newEntryInListSpy.count(), 0); 5217 5218 myDatabaseContent.init(QStringLiteral("testDbDirectContent")); 5219 5220 connect(&myListener, &TracksListener::trackHasChanged, 5221 &myPlayList, &MediaPlayList::trackChanged, 5222 Qt::QueuedConnection); 5223 connect(&myListener, &TracksListener::tracksListAdded, 5224 &myPlayList, &MediaPlayList::tracksListAdded, 5225 Qt::QueuedConnection); 5226 connect(&myPlayList, &MediaPlayList::newTrackByNameInList, 5227 &myListener, &TracksListener::trackByNameInList, 5228 Qt::QueuedConnection); 5229 connect(&myPlayList, &MediaPlayList::newEntryInList, 5230 &myListener, &TracksListener::newEntryInList, 5231 Qt::QueuedConnection); 5232 connect(&myPlayList, &MediaPlayList::newUrlInList, 5233 &myListener, &TracksListener::newUrlInList, 5234 Qt::QueuedConnection); 5235 connect(&myDatabaseContent, &DatabaseInterface::tracksAdded, 5236 &myListener, &TracksListener::tracksAdded); 5237 5238 myDatabaseContent.insertTracksList(mNewTracks, mNewCovers); 5239 5240 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); 5241 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 5242 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 0); 5243 QCOMPARE(rowsRemovedSpy.count(), 0); 5244 QCOMPARE(rowsMovedSpy.count(), 0); 5245 QCOMPARE(rowsInsertedSpy.count(), 0); 5246 QCOMPARE(persistentStateChangedSpy.count(), 0); 5247 QCOMPARE(dataChangedSpy.count(), 0); 5248 QCOMPARE(newTrackByNameInListSpy.count(), 0); 5249 QCOMPARE(newEntryInListSpy.count(), 0); 5250 5251 auto firstTrackId = myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track1"), QStringLiteral("artist1"), QStringLiteral("album2"), 1, 1); 5252 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track}, 5253 {DataTypes::DatabaseIdRole, firstTrackId}}, {}, {}}}, {}, {}); 5254 5255 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); 5256 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 5257 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 1); 5258 QCOMPARE(rowsRemovedSpy.count(), 0); 5259 QCOMPARE(rowsMovedSpy.count(), 0); 5260 QCOMPARE(rowsInsertedSpy.count(), 1); 5261 QCOMPARE(persistentStateChangedSpy.count(), 1); 5262 QCOMPARE(dataChangedSpy.count(), 0); 5263 QCOMPARE(newTrackByNameInListSpy.count(), 0); 5264 QCOMPARE(newEntryInListSpy.count(), 1); 5265 5266 QCOMPARE(dataChangedSpy.wait(), true); 5267 5268 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); 5269 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 5270 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 1); 5271 QCOMPARE(rowsRemovedSpy.count(), 0); 5272 QCOMPARE(rowsMovedSpy.count(), 0); 5273 QCOMPARE(rowsInsertedSpy.count(), 1); 5274 QCOMPARE(persistentStateChangedSpy.count(), 1); 5275 QCOMPARE(dataChangedSpy.count(), 1); 5276 QCOMPARE(newTrackByNameInListSpy.count(), 0); 5277 QCOMPARE(newEntryInListSpy.count(), 1); 5278 5279 auto secondTrackId = myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track1"), QStringLiteral("artist1"), QStringLiteral("album1"), 1, 1); 5280 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track}, 5281 {DataTypes::DatabaseIdRole, secondTrackId}}, {}, {}}}, {}, {}); 5282 5283 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); 5284 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 5285 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 2); 5286 QCOMPARE(rowsRemovedSpy.count(), 0); 5287 QCOMPARE(rowsMovedSpy.count(), 0); 5288 QCOMPARE(rowsInsertedSpy.count(), 2); 5289 QCOMPARE(persistentStateChangedSpy.count(), 2); 5290 QCOMPARE(dataChangedSpy.count(), 1); 5291 QCOMPARE(newTrackByNameInListSpy.count(), 0); 5292 QCOMPARE(newEntryInListSpy.count(), 2); 5293 5294 QCOMPARE(dataChangedSpy.wait(), true); 5295 5296 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); 5297 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 5298 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 2); 5299 QCOMPARE(rowsRemovedSpy.count(), 0); 5300 QCOMPARE(rowsMovedSpy.count(), 0); 5301 QCOMPARE(rowsInsertedSpy.count(), 2); 5302 QCOMPARE(persistentStateChangedSpy.count(), 2); 5303 QCOMPARE(dataChangedSpy.count(), 2); 5304 QCOMPARE(newTrackByNameInListSpy.count(), 0); 5305 QCOMPARE(newEntryInListSpy.count(), 2); 5306 5307 auto thirdTrackId = myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track2"), QStringLiteral("artist1"), QStringLiteral("album2"), 2, 1); 5308 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track}, 5309 {DataTypes::DatabaseIdRole, thirdTrackId}}, {}, {}}}, {}, {}); 5310 5311 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); 5312 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 5313 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 3); 5314 QCOMPARE(rowsRemovedSpy.count(), 0); 5315 QCOMPARE(rowsMovedSpy.count(), 0); 5316 QCOMPARE(rowsInsertedSpy.count(), 3); 5317 QCOMPARE(persistentStateChangedSpy.count(), 3); 5318 QCOMPARE(dataChangedSpy.count(), 2); 5319 QCOMPARE(newTrackByNameInListSpy.count(), 0); 5320 QCOMPARE(newEntryInListSpy.count(), 3); 5321 5322 QCOMPARE(dataChangedSpy.wait(), true); 5323 5324 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); 5325 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 5326 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 3); 5327 QCOMPARE(rowsRemovedSpy.count(), 0); 5328 QCOMPARE(rowsMovedSpy.count(), 0); 5329 QCOMPARE(rowsInsertedSpy.count(), 3); 5330 QCOMPARE(persistentStateChangedSpy.count(), 3); 5331 QCOMPARE(dataChangedSpy.count(), 3); 5332 QCOMPARE(newTrackByNameInListSpy.count(), 0); 5333 QCOMPARE(newEntryInListSpy.count(), 3); 5334 5335 auto fourthTrackId = myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track3"), QStringLiteral("artist1"), QStringLiteral("album2"), 3, 1); 5336 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track}, 5337 {DataTypes::DatabaseIdRole, fourthTrackId}}, {}, {}}}, {}, {}); 5338 5339 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); 5340 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 5341 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 4); 5342 QCOMPARE(rowsRemovedSpy.count(), 0); 5343 QCOMPARE(rowsMovedSpy.count(), 0); 5344 QCOMPARE(rowsInsertedSpy.count(), 4); 5345 QCOMPARE(persistentStateChangedSpy.count(), 4); 5346 QCOMPARE(dataChangedSpy.count(), 3); 5347 QCOMPARE(newTrackByNameInListSpy.count(), 0); 5348 QCOMPARE(newEntryInListSpy.count(), 4); 5349 5350 QCOMPARE(dataChangedSpy.wait(), true); 5351 5352 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); 5353 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 5354 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 4); 5355 QCOMPARE(rowsRemovedSpy.count(), 0); 5356 QCOMPARE(rowsMovedSpy.count(), 0); 5357 QCOMPARE(rowsInsertedSpy.count(), 4); 5358 QCOMPARE(persistentStateChangedSpy.count(), 4); 5359 QCOMPARE(dataChangedSpy.count(), 4); 5360 QCOMPARE(newTrackByNameInListSpy.count(), 0); 5361 QCOMPARE(newEntryInListSpy.count(), 4); 5362 5363 myPlayListProxyModel.removeRow(2); 5364 5365 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 1); 5366 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 5367 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 4); 5368 QCOMPARE(rowsRemovedSpy.count(), 1); 5369 QCOMPARE(rowsMovedSpy.count(), 0); 5370 QCOMPARE(rowsInsertedSpy.count(), 4); 5371 QCOMPARE(persistentStateChangedSpy.count(), 5); 5372 QCOMPARE(dataChangedSpy.count(), 4); 5373 QCOMPARE(newTrackByNameInListSpy.count(), 0); 5374 QCOMPARE(newEntryInListSpy.count(), 4); 5375 } 5376 5377 void MediaPlayListProxyModelTest::testHasHeaderWithRemove() 5378 { 5379 MediaPlayList myPlayList; 5380 QAbstractItemModelTester testModel(&myPlayList); 5381 MediaPlayListProxyModel myPlayListProxyModel; 5382 myPlayListProxyModel.setPlayListModel(&myPlayList); 5383 QAbstractItemModelTester testProxyModel(&myPlayListProxyModel); 5384 DatabaseInterface myDatabaseContent; 5385 TracksListener myListener(&myDatabaseContent); 5386 5387 QSignalSpy rowsAboutToBeMovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsAboutToBeMoved); 5388 QSignalSpy rowsAboutToBeRemovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsAboutToBeRemoved); 5389 QSignalSpy rowsAboutToBeInsertedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsAboutToBeInserted); 5390 QSignalSpy rowsMovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsMoved); 5391 QSignalSpy rowsRemovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsRemoved); 5392 QSignalSpy rowsInsertedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsInserted); 5393 QSignalSpy persistentStateChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::persistentStateChanged); 5394 QSignalSpy dataChangedSpy(&myPlayList, &MediaPlayListProxyModel::dataChanged); 5395 QSignalSpy newTrackByNameInListSpy(&myPlayList, &MediaPlayList::newTrackByNameInList); 5396 QSignalSpy newEntryInListSpy(&myPlayList, &MediaPlayList::newEntryInList); 5397 QSignalSpy newUrlInListSpy(&myPlayList, &MediaPlayList::newUrlInList); 5398 5399 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); 5400 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 5401 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 0); 5402 QCOMPARE(rowsRemovedSpy.count(), 0); 5403 QCOMPARE(rowsMovedSpy.count(), 0); 5404 QCOMPARE(rowsInsertedSpy.count(), 0); 5405 QCOMPARE(persistentStateChangedSpy.count(), 0); 5406 QCOMPARE(dataChangedSpy.count(), 0); 5407 QCOMPARE(newTrackByNameInListSpy.count(), 0); 5408 QCOMPARE(newEntryInListSpy.count(), 0); 5409 5410 myDatabaseContent.init(QStringLiteral("testDbDirectContent")); 5411 5412 connect(&myListener, &TracksListener::trackHasChanged, 5413 &myPlayList, &MediaPlayList::trackChanged, 5414 Qt::QueuedConnection); 5415 connect(&myListener, &TracksListener::tracksListAdded, 5416 &myPlayList, &MediaPlayList::tracksListAdded, 5417 Qt::QueuedConnection); 5418 connect(&myPlayList, &MediaPlayList::newTrackByNameInList, 5419 &myListener, &TracksListener::trackByNameInList, 5420 Qt::QueuedConnection); 5421 connect(&myPlayList, &MediaPlayList::newEntryInList, 5422 &myListener, &TracksListener::newEntryInList, 5423 Qt::QueuedConnection); 5424 connect(&myPlayList, &MediaPlayList::newUrlInList, 5425 &myListener, &TracksListener::newUrlInList, 5426 Qt::QueuedConnection); 5427 connect(&myDatabaseContent, &DatabaseInterface::tracksAdded, 5428 &myListener, &TracksListener::tracksAdded); 5429 5430 myDatabaseContent.insertTracksList(mNewTracks, mNewCovers); 5431 5432 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); 5433 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 5434 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 0); 5435 QCOMPARE(rowsRemovedSpy.count(), 0); 5436 QCOMPARE(rowsMovedSpy.count(), 0); 5437 QCOMPARE(rowsInsertedSpy.count(), 0); 5438 QCOMPARE(persistentStateChangedSpy.count(), 0); 5439 QCOMPARE(dataChangedSpy.count(), 0); 5440 QCOMPARE(newTrackByNameInListSpy.count(), 0); 5441 QCOMPARE(newEntryInListSpy.count(), 0); 5442 5443 auto firstTrackId = myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track1"), QStringLiteral("artist1"), QStringLiteral("album2"), 1, 1); 5444 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track}, 5445 {DataTypes::DatabaseIdRole, firstTrackId}}, {}, {}}}, {}, {}); 5446 5447 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); 5448 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 5449 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 1); 5450 QCOMPARE(rowsRemovedSpy.count(), 0); 5451 QCOMPARE(rowsMovedSpy.count(), 0); 5452 QCOMPARE(rowsInsertedSpy.count(), 1); 5453 QCOMPARE(persistentStateChangedSpy.count(), 1); 5454 QCOMPARE(dataChangedSpy.count(), 0); 5455 QCOMPARE(newTrackByNameInListSpy.count(), 0); 5456 QCOMPARE(newEntryInListSpy.count(), 1); 5457 5458 QCOMPARE(dataChangedSpy.wait(), true); 5459 5460 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); 5461 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 5462 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 1); 5463 QCOMPARE(rowsRemovedSpy.count(), 0); 5464 QCOMPARE(rowsMovedSpy.count(), 0); 5465 QCOMPARE(rowsInsertedSpy.count(), 1); 5466 QCOMPARE(persistentStateChangedSpy.count(), 1); 5467 QCOMPARE(dataChangedSpy.count(), 1); 5468 QCOMPARE(newTrackByNameInListSpy.count(), 0); 5469 QCOMPARE(newEntryInListSpy.count(), 1); 5470 5471 auto secondTrackId = myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track2"), QStringLiteral("artist1"), QStringLiteral("album2"), 2, 1); 5472 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track}, 5473 {DataTypes::DatabaseIdRole, secondTrackId}}, {}, {}}}, {}, {}); 5474 5475 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); 5476 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 5477 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 2); 5478 QCOMPARE(rowsRemovedSpy.count(), 0); 5479 QCOMPARE(rowsMovedSpy.count(), 0); 5480 QCOMPARE(rowsInsertedSpy.count(), 2); 5481 QCOMPARE(persistentStateChangedSpy.count(), 2); 5482 QCOMPARE(dataChangedSpy.count(), 1); 5483 QCOMPARE(newTrackByNameInListSpy.count(), 0); 5484 QCOMPARE(newEntryInListSpy.count(), 2); 5485 5486 QCOMPARE(dataChangedSpy.wait(), true); 5487 5488 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); 5489 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 5490 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 2); 5491 QCOMPARE(rowsRemovedSpy.count(), 0); 5492 QCOMPARE(rowsMovedSpy.count(), 0); 5493 QCOMPARE(rowsInsertedSpy.count(), 2); 5494 QCOMPARE(persistentStateChangedSpy.count(), 2); 5495 QCOMPARE(dataChangedSpy.count(), 2); 5496 QCOMPARE(newTrackByNameInListSpy.count(), 0); 5497 QCOMPARE(newEntryInListSpy.count(), 2); 5498 5499 auto thirdTrackId = myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track1"), QStringLiteral("artist1"), QStringLiteral("album1"), 1, 1); 5500 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track}, 5501 {DataTypes::DatabaseIdRole, thirdTrackId}}, {}, {}}}, {}, {}); 5502 5503 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); 5504 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 5505 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 3); 5506 QCOMPARE(rowsRemovedSpy.count(), 0); 5507 QCOMPARE(rowsMovedSpy.count(), 0); 5508 QCOMPARE(rowsInsertedSpy.count(), 3); 5509 QCOMPARE(persistentStateChangedSpy.count(), 3); 5510 QCOMPARE(dataChangedSpy.count(), 2); 5511 QCOMPARE(newTrackByNameInListSpy.count(), 0); 5512 QCOMPARE(newEntryInListSpy.count(), 3); 5513 5514 QCOMPARE(dataChangedSpy.wait(), true); 5515 5516 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); 5517 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 5518 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 3); 5519 QCOMPARE(rowsRemovedSpy.count(), 0); 5520 QCOMPARE(rowsMovedSpy.count(), 0); 5521 QCOMPARE(rowsInsertedSpy.count(), 3); 5522 QCOMPARE(persistentStateChangedSpy.count(), 3); 5523 QCOMPARE(dataChangedSpy.count(), 3); 5524 QCOMPARE(newTrackByNameInListSpy.count(), 0); 5525 QCOMPARE(newEntryInListSpy.count(), 3); 5526 5527 auto fourthTrackId = myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track3"), QStringLiteral("artist1"), QStringLiteral("album2"), 3, 1); 5528 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track}, 5529 {DataTypes::DatabaseIdRole, fourthTrackId}}, {}, {}}}, {}, {}); 5530 5531 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); 5532 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 5533 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 4); 5534 QCOMPARE(rowsRemovedSpy.count(), 0); 5535 QCOMPARE(rowsMovedSpy.count(), 0); 5536 QCOMPARE(rowsInsertedSpy.count(), 4); 5537 QCOMPARE(persistentStateChangedSpy.count(), 4); 5538 QCOMPARE(dataChangedSpy.count(), 3); 5539 QCOMPARE(newTrackByNameInListSpy.count(), 0); 5540 QCOMPARE(newEntryInListSpy.count(), 4); 5541 5542 QCOMPARE(dataChangedSpy.wait(), true); 5543 5544 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); 5545 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 5546 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 4); 5547 QCOMPARE(rowsRemovedSpy.count(), 0); 5548 QCOMPARE(rowsMovedSpy.count(), 0); 5549 QCOMPARE(rowsInsertedSpy.count(), 4); 5550 QCOMPARE(persistentStateChangedSpy.count(), 4); 5551 QCOMPARE(dataChangedSpy.count(), 4); 5552 QCOMPARE(newTrackByNameInListSpy.count(), 0); 5553 QCOMPARE(newEntryInListSpy.count(), 4); 5554 5555 myPlayListProxyModel.removeRow(2); 5556 5557 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 1); 5558 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 5559 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 4); 5560 QCOMPARE(rowsRemovedSpy.count(), 1); 5561 QCOMPARE(rowsMovedSpy.count(), 0); 5562 QCOMPARE(rowsInsertedSpy.count(), 4); 5563 QCOMPARE(persistentStateChangedSpy.count(), 5); 5564 QCOMPARE(dataChangedSpy.count(), 4); 5565 QCOMPARE(newTrackByNameInListSpy.count(), 0); 5566 QCOMPARE(newEntryInListSpy.count(), 4); 5567 5568 myPlayListProxyModel.removeRow(0); 5569 5570 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 2); 5571 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 5572 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 4); 5573 QCOMPARE(rowsRemovedSpy.count(), 2); 5574 QCOMPARE(rowsMovedSpy.count(), 0); 5575 QCOMPARE(rowsInsertedSpy.count(), 4); 5576 QCOMPARE(persistentStateChangedSpy.count(), 6); 5577 QCOMPARE(dataChangedSpy.count(), 4); 5578 QCOMPARE(newTrackByNameInListSpy.count(), 0); 5579 QCOMPARE(newEntryInListSpy.count(), 4); 5580 } 5581 5582 void MediaPlayListProxyModelTest::testHasHeaderMoveFirst() 5583 { 5584 MediaPlayList myPlayList; 5585 QAbstractItemModelTester testModel(&myPlayList); 5586 MediaPlayListProxyModel myPlayListProxyModel; 5587 myPlayListProxyModel.setPlayListModel(&myPlayList); 5588 QAbstractItemModelTester testProxyModel(&myPlayListProxyModel); 5589 DatabaseInterface myDatabaseContent; 5590 TracksListener myListener(&myDatabaseContent); 5591 5592 QSignalSpy rowsAboutToBeMovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsAboutToBeMoved); 5593 QSignalSpy rowsAboutToBeRemovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsAboutToBeRemoved); 5594 QSignalSpy rowsAboutToBeInsertedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsAboutToBeInserted); 5595 QSignalSpy rowsMovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsMoved); 5596 QSignalSpy rowsRemovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsRemoved); 5597 QSignalSpy rowsInsertedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsInserted); 5598 QSignalSpy persistentStateChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::persistentStateChanged); 5599 QSignalSpy dataChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::dataChanged); 5600 QSignalSpy newTrackByNameInListSpy(&myPlayList, &MediaPlayList::newTrackByNameInList); 5601 QSignalSpy newEntryInListSpy(&myPlayList, &MediaPlayList::newEntryInList); 5602 QSignalSpy newUrlInListSpy(&myPlayList, &MediaPlayList::newUrlInList); 5603 5604 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); 5605 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 5606 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 0); 5607 QCOMPARE(rowsRemovedSpy.count(), 0); 5608 QCOMPARE(rowsMovedSpy.count(), 0); 5609 QCOMPARE(rowsInsertedSpy.count(), 0); 5610 QCOMPARE(persistentStateChangedSpy.count(), 0); 5611 QCOMPARE(dataChangedSpy.count(), 0); 5612 QCOMPARE(newTrackByNameInListSpy.count(), 0); 5613 QCOMPARE(newEntryInListSpy.count(), 0); 5614 5615 myDatabaseContent.init(QStringLiteral("testDbDirectContent")); 5616 5617 connect(&myListener, &TracksListener::trackHasChanged, 5618 &myPlayList, &MediaPlayList::trackChanged, 5619 Qt::QueuedConnection); 5620 connect(&myListener, &TracksListener::tracksListAdded, 5621 &myPlayList, &MediaPlayList::tracksListAdded, 5622 Qt::QueuedConnection); 5623 connect(&myPlayList, &MediaPlayList::newTrackByNameInList, 5624 &myListener, &TracksListener::trackByNameInList, 5625 Qt::QueuedConnection); 5626 connect(&myPlayList, &MediaPlayList::newEntryInList, 5627 &myListener, &TracksListener::newEntryInList, 5628 Qt::QueuedConnection); 5629 connect(&myPlayList, &MediaPlayList::newUrlInList, 5630 &myListener, &TracksListener::newUrlInList, 5631 Qt::QueuedConnection); 5632 connect(&myDatabaseContent, &DatabaseInterface::tracksAdded, 5633 &myListener, &TracksListener::tracksAdded); 5634 5635 myDatabaseContent.insertTracksList(mNewTracks, mNewCovers); 5636 5637 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); 5638 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 5639 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 0); 5640 QCOMPARE(rowsRemovedSpy.count(), 0); 5641 QCOMPARE(rowsMovedSpy.count(), 0); 5642 QCOMPARE(rowsInsertedSpy.count(), 0); 5643 QCOMPARE(persistentStateChangedSpy.count(), 0); 5644 QCOMPARE(dataChangedSpy.count(), 0); 5645 QCOMPARE(newTrackByNameInListSpy.count(), 0); 5646 QCOMPARE(newEntryInListSpy.count(), 0); 5647 5648 auto firstTrackId = myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track1"), QStringLiteral("artist1"), QStringLiteral("album2"), 1, 1); 5649 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track}, 5650 {DataTypes::DatabaseIdRole, firstTrackId}}, {}, {}}}, {}, {}); 5651 5652 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); 5653 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 5654 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 1); 5655 QCOMPARE(rowsRemovedSpy.count(), 0); 5656 QCOMPARE(rowsMovedSpy.count(), 0); 5657 QCOMPARE(rowsInsertedSpy.count(), 1); 5658 QCOMPARE(persistentStateChangedSpy.count(), 1); 5659 QCOMPARE(dataChangedSpy.count(), 0); 5660 QCOMPARE(newTrackByNameInListSpy.count(), 0); 5661 QCOMPARE(newEntryInListSpy.count(), 1); 5662 5663 QCOMPARE(dataChangedSpy.wait(), true); 5664 5665 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); 5666 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 5667 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 1); 5668 QCOMPARE(rowsRemovedSpy.count(), 0); 5669 QCOMPARE(rowsMovedSpy.count(), 0); 5670 QCOMPARE(rowsInsertedSpy.count(), 1); 5671 QCOMPARE(persistentStateChangedSpy.count(), 1); 5672 QCOMPARE(dataChangedSpy.count(), 1); 5673 QCOMPARE(newTrackByNameInListSpy.count(), 0); 5674 QCOMPARE(newEntryInListSpy.count(), 1); 5675 5676 auto secondTrackId = myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track2"), QStringLiteral("artist1"), QStringLiteral("album2"), 2, 1); 5677 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track}, 5678 {DataTypes::DatabaseIdRole, secondTrackId}}, {}, {}}}, {}, {}); 5679 5680 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); 5681 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 5682 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 2); 5683 QCOMPARE(rowsRemovedSpy.count(), 0); 5684 QCOMPARE(rowsMovedSpy.count(), 0); 5685 QCOMPARE(rowsInsertedSpy.count(), 2); 5686 QCOMPARE(persistentStateChangedSpy.count(), 2); 5687 QCOMPARE(dataChangedSpy.count(), 1); 5688 QCOMPARE(newTrackByNameInListSpy.count(), 0); 5689 QCOMPARE(newEntryInListSpy.count(), 2); 5690 5691 QCOMPARE(dataChangedSpy.wait(), true); 5692 5693 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); 5694 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 5695 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 2); 5696 QCOMPARE(rowsRemovedSpy.count(), 0); 5697 QCOMPARE(rowsMovedSpy.count(), 0); 5698 QCOMPARE(rowsInsertedSpy.count(), 2); 5699 QCOMPARE(persistentStateChangedSpy.count(), 2); 5700 QCOMPARE(dataChangedSpy.count(), 2); 5701 QCOMPARE(newTrackByNameInListSpy.count(), 0); 5702 QCOMPARE(newEntryInListSpy.count(), 2); 5703 5704 auto thirdTrackId = myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track3"), QStringLiteral("artist1"), QStringLiteral("album2"), 3, 1); 5705 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track}, 5706 {DataTypes::DatabaseIdRole, thirdTrackId}}, {}, {}}}, {}, {}); 5707 5708 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); 5709 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 5710 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 3); 5711 QCOMPARE(rowsRemovedSpy.count(), 0); 5712 QCOMPARE(rowsMovedSpy.count(), 0); 5713 QCOMPARE(rowsInsertedSpy.count(), 3); 5714 QCOMPARE(persistentStateChangedSpy.count(), 3); 5715 QCOMPARE(dataChangedSpy.count(), 2); 5716 QCOMPARE(newTrackByNameInListSpy.count(), 0); 5717 QCOMPARE(newEntryInListSpy.count(), 3); 5718 5719 QCOMPARE(dataChangedSpy.wait(), true); 5720 5721 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); 5722 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 5723 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 3); 5724 QCOMPARE(rowsRemovedSpy.count(), 0); 5725 QCOMPARE(rowsMovedSpy.count(), 0); 5726 QCOMPARE(rowsInsertedSpy.count(), 3); 5727 QCOMPARE(persistentStateChangedSpy.count(), 3); 5728 QCOMPARE(dataChangedSpy.count(), 3); 5729 QCOMPARE(newTrackByNameInListSpy.count(), 0); 5730 QCOMPARE(newEntryInListSpy.count(), 3); 5731 5732 auto fourthTrackId = myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track4"), QStringLiteral("artist1"), QStringLiteral("album2"), 4, 1); 5733 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track}, 5734 {DataTypes::DatabaseIdRole, fourthTrackId}}, {}, {}}}, {}, {}); 5735 5736 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); 5737 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 5738 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 4); 5739 QCOMPARE(rowsRemovedSpy.count(), 0); 5740 QCOMPARE(rowsMovedSpy.count(), 0); 5741 QCOMPARE(rowsInsertedSpy.count(), 4); 5742 QCOMPARE(persistentStateChangedSpy.count(), 4); 5743 QCOMPARE(dataChangedSpy.count(), 3); 5744 QCOMPARE(newTrackByNameInListSpy.count(), 0); 5745 QCOMPARE(newEntryInListSpy.count(), 4); 5746 5747 QCOMPARE(dataChangedSpy.wait(), true); 5748 5749 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); 5750 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 5751 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 4); 5752 QCOMPARE(rowsRemovedSpy.count(), 0); 5753 QCOMPARE(rowsMovedSpy.count(), 0); 5754 QCOMPARE(rowsInsertedSpy.count(), 4); 5755 QCOMPARE(persistentStateChangedSpy.count(), 4); 5756 QCOMPARE(dataChangedSpy.count(), 4); 5757 QCOMPARE(newTrackByNameInListSpy.count(), 0); 5758 QCOMPARE(newEntryInListSpy.count(), 4); 5759 5760 myPlayListProxyModel.moveRow(0, 3); 5761 5762 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); 5763 QCOMPARE(rowsAboutToBeMovedSpy.count(), 1); 5764 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 4); 5765 QCOMPARE(rowsRemovedSpy.count(), 0); 5766 QCOMPARE(rowsMovedSpy.count(), 1); 5767 QCOMPARE(rowsInsertedSpy.count(), 4); 5768 QCOMPARE(persistentStateChangedSpy.count(), 5); 5769 QCOMPARE(dataChangedSpy.count(), 4); 5770 QCOMPARE(newTrackByNameInListSpy.count(), 0); 5771 QCOMPARE(newEntryInListSpy.count(), 4); 5772 } 5773 5774 void MediaPlayListProxyModelTest::testHasHeaderMoveAnother() 5775 { 5776 MediaPlayList myPlayList; 5777 QAbstractItemModelTester testModel(&myPlayList); 5778 MediaPlayListProxyModel myPlayListProxyModel; 5779 myPlayListProxyModel.setPlayListModel(&myPlayList); 5780 QAbstractItemModelTester testProxyModel(&myPlayListProxyModel); 5781 DatabaseInterface myDatabaseContent; 5782 TracksListener myListener(&myDatabaseContent); 5783 5784 QSignalSpy rowsAboutToBeMovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsAboutToBeMoved); 5785 QSignalSpy rowsAboutToBeRemovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsAboutToBeRemoved); 5786 QSignalSpy rowsAboutToBeInsertedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsAboutToBeInserted); 5787 QSignalSpy rowsMovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsMoved); 5788 QSignalSpy rowsRemovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsRemoved); 5789 QSignalSpy rowsInsertedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsInserted); 5790 QSignalSpy persistentStateChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::persistentStateChanged); 5791 QSignalSpy dataChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::dataChanged); 5792 QSignalSpy newTrackByNameInListSpy(&myPlayList, &MediaPlayList::newTrackByNameInList); 5793 QSignalSpy newEntryInListSpy(&myPlayList, &MediaPlayList::newEntryInList); 5794 QSignalSpy newUrlInListSpy(&myPlayList, &MediaPlayList::newUrlInList); 5795 5796 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); 5797 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 5798 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 0); 5799 QCOMPARE(rowsRemovedSpy.count(), 0); 5800 QCOMPARE(rowsMovedSpy.count(), 0); 5801 QCOMPARE(rowsInsertedSpy.count(), 0); 5802 QCOMPARE(persistentStateChangedSpy.count(), 0); 5803 QCOMPARE(dataChangedSpy.count(), 0); 5804 QCOMPARE(newTrackByNameInListSpy.count(), 0); 5805 QCOMPARE(newEntryInListSpy.count(), 0); 5806 5807 myDatabaseContent.init(QStringLiteral("testDbDirectContent")); 5808 5809 connect(&myListener, &TracksListener::trackHasChanged, 5810 &myPlayList, &MediaPlayList::trackChanged, 5811 Qt::QueuedConnection); 5812 connect(&myListener, &TracksListener::tracksListAdded, 5813 &myPlayList, &MediaPlayList::tracksListAdded, 5814 Qt::QueuedConnection); 5815 connect(&myPlayList, &MediaPlayList::newTrackByNameInList, 5816 &myListener, &TracksListener::trackByNameInList, 5817 Qt::QueuedConnection); 5818 connect(&myPlayList, &MediaPlayList::newEntryInList, 5819 &myListener, &TracksListener::newEntryInList, 5820 Qt::QueuedConnection); 5821 connect(&myPlayList, &MediaPlayList::newUrlInList, 5822 &myListener, &TracksListener::newUrlInList, 5823 Qt::QueuedConnection); 5824 connect(&myDatabaseContent, &DatabaseInterface::tracksAdded, 5825 &myListener, &TracksListener::tracksAdded); 5826 5827 myDatabaseContent.insertTracksList(mNewTracks, mNewCovers); 5828 5829 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); 5830 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 5831 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 0); 5832 QCOMPARE(rowsRemovedSpy.count(), 0); 5833 QCOMPARE(rowsMovedSpy.count(), 0); 5834 QCOMPARE(rowsInsertedSpy.count(), 0); 5835 QCOMPARE(persistentStateChangedSpy.count(), 0); 5836 QCOMPARE(dataChangedSpy.count(), 0); 5837 QCOMPARE(newTrackByNameInListSpy.count(), 0); 5838 QCOMPARE(newEntryInListSpy.count(), 0); 5839 5840 auto firstTrackId = myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track1"), QStringLiteral("artist1"), QStringLiteral("album2"), 1, 1); 5841 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track}, 5842 {DataTypes::DatabaseIdRole, firstTrackId}}, {}, {}}}, {}, {}); 5843 5844 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); 5845 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 5846 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 1); 5847 QCOMPARE(rowsRemovedSpy.count(), 0); 5848 QCOMPARE(rowsMovedSpy.count(), 0); 5849 QCOMPARE(rowsInsertedSpy.count(), 1); 5850 QCOMPARE(persistentStateChangedSpy.count(), 1); 5851 QCOMPARE(dataChangedSpy.count(), 0); 5852 QCOMPARE(newTrackByNameInListSpy.count(), 0); 5853 QCOMPARE(newEntryInListSpy.count(), 1); 5854 5855 QCOMPARE(dataChangedSpy.wait(), true); 5856 5857 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); 5858 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 5859 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 1); 5860 QCOMPARE(rowsRemovedSpy.count(), 0); 5861 QCOMPARE(rowsMovedSpy.count(), 0); 5862 QCOMPARE(rowsInsertedSpy.count(), 1); 5863 QCOMPARE(persistentStateChangedSpy.count(), 1); 5864 QCOMPARE(dataChangedSpy.count(), 1); 5865 QCOMPARE(newTrackByNameInListSpy.count(), 0); 5866 QCOMPARE(newEntryInListSpy.count(), 1); 5867 5868 auto secondTrackId = myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track2"), QStringLiteral("artist1"), QStringLiteral("album2"), 2, 1); 5869 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track}, 5870 {DataTypes::DatabaseIdRole, secondTrackId}}, {}, {}}}, {}, {}); 5871 5872 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); 5873 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 5874 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 2); 5875 QCOMPARE(rowsRemovedSpy.count(), 0); 5876 QCOMPARE(rowsMovedSpy.count(), 0); 5877 QCOMPARE(rowsInsertedSpy.count(), 2); 5878 QCOMPARE(persistentStateChangedSpy.count(), 2); 5879 QCOMPARE(dataChangedSpy.count(), 1); 5880 QCOMPARE(newTrackByNameInListSpy.count(), 0); 5881 QCOMPARE(newEntryInListSpy.count(), 2); 5882 5883 QCOMPARE(dataChangedSpy.wait(), true); 5884 5885 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); 5886 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 5887 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 2); 5888 QCOMPARE(rowsRemovedSpy.count(), 0); 5889 QCOMPARE(rowsMovedSpy.count(), 0); 5890 QCOMPARE(rowsInsertedSpy.count(), 2); 5891 QCOMPARE(persistentStateChangedSpy.count(), 2); 5892 QCOMPARE(dataChangedSpy.count(), 2); 5893 QCOMPARE(newTrackByNameInListSpy.count(), 0); 5894 QCOMPARE(newEntryInListSpy.count(), 2); 5895 5896 auto thirdTrackId = myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track3"), QStringLiteral("artist1"), QStringLiteral("album2"), 3, 1); 5897 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track}, 5898 {DataTypes::DatabaseIdRole, thirdTrackId}}, {}, {}}}, {}, {}); 5899 5900 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); 5901 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 5902 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 3); 5903 QCOMPARE(rowsRemovedSpy.count(), 0); 5904 QCOMPARE(rowsMovedSpy.count(), 0); 5905 QCOMPARE(rowsInsertedSpy.count(), 3); 5906 QCOMPARE(persistentStateChangedSpy.count(), 3); 5907 QCOMPARE(dataChangedSpy.count(), 2); 5908 QCOMPARE(newTrackByNameInListSpy.count(), 0); 5909 QCOMPARE(newEntryInListSpy.count(), 3); 5910 5911 QCOMPARE(dataChangedSpy.wait(), true); 5912 5913 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); 5914 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 5915 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 3); 5916 QCOMPARE(rowsRemovedSpy.count(), 0); 5917 QCOMPARE(rowsMovedSpy.count(), 0); 5918 QCOMPARE(rowsInsertedSpy.count(), 3); 5919 QCOMPARE(persistentStateChangedSpy.count(), 3); 5920 QCOMPARE(dataChangedSpy.count(), 3); 5921 QCOMPARE(newTrackByNameInListSpy.count(), 0); 5922 QCOMPARE(newEntryInListSpy.count(), 3); 5923 5924 auto fourthTrackId = myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track4"), QStringLiteral("artist1"), QStringLiteral("album2"), 4, 1); 5925 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track}, 5926 {DataTypes::DatabaseIdRole, fourthTrackId}}, {}, {}}}, {}, {}); 5927 5928 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); 5929 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 5930 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 4); 5931 QCOMPARE(rowsRemovedSpy.count(), 0); 5932 QCOMPARE(rowsMovedSpy.count(), 0); 5933 QCOMPARE(rowsInsertedSpy.count(), 4); 5934 QCOMPARE(persistentStateChangedSpy.count(), 4); 5935 QCOMPARE(dataChangedSpy.count(), 3); 5936 QCOMPARE(newTrackByNameInListSpy.count(), 0); 5937 QCOMPARE(newEntryInListSpy.count(), 4); 5938 5939 QCOMPARE(dataChangedSpy.wait(), true); 5940 5941 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); 5942 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 5943 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 4); 5944 QCOMPARE(rowsRemovedSpy.count(), 0); 5945 QCOMPARE(rowsMovedSpy.count(), 0); 5946 QCOMPARE(rowsInsertedSpy.count(), 4); 5947 QCOMPARE(persistentStateChangedSpy.count(), 4); 5948 QCOMPARE(dataChangedSpy.count(), 4); 5949 QCOMPARE(newTrackByNameInListSpy.count(), 0); 5950 QCOMPARE(newEntryInListSpy.count(), 4); 5951 5952 myPlayListProxyModel.moveRow(3, 0); 5953 5954 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); 5955 QCOMPARE(rowsAboutToBeMovedSpy.count(), 1); 5956 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 4); 5957 QCOMPARE(rowsRemovedSpy.count(), 0); 5958 QCOMPARE(rowsMovedSpy.count(), 1); 5959 QCOMPARE(rowsInsertedSpy.count(), 4); 5960 QCOMPARE(persistentStateChangedSpy.count(), 5); 5961 QCOMPARE(dataChangedSpy.count(), 4); 5962 QCOMPARE(newTrackByNameInListSpy.count(), 0); 5963 QCOMPARE(newEntryInListSpy.count(), 4); 5964 } 5965 5966 void MediaPlayListProxyModelTest::testHasHeaderAlbumWithSameTitle() 5967 { 5968 MediaPlayList myPlayList; 5969 QAbstractItemModelTester testModel(&myPlayList); 5970 MediaPlayListProxyModel myPlayListProxyModel; 5971 myPlayListProxyModel.setPlayListModel(&myPlayList); 5972 QAbstractItemModelTester testProxyModel(&myPlayListProxyModel); 5973 DatabaseInterface myDatabaseContent; 5974 TracksListener myListener(&myDatabaseContent); 5975 5976 QSignalSpy rowsAboutToBeMovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsAboutToBeMoved); 5977 QSignalSpy rowsAboutToBeRemovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsAboutToBeRemoved); 5978 QSignalSpy rowsAboutToBeInsertedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsAboutToBeInserted); 5979 QSignalSpy rowsMovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsMoved); 5980 QSignalSpy rowsRemovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsRemoved); 5981 QSignalSpy rowsInsertedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsInserted); 5982 QSignalSpy persistentStateChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::persistentStateChanged); 5983 QSignalSpy dataChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::dataChanged); 5984 QSignalSpy newTrackByNameInListSpy(&myPlayList, &MediaPlayList::newTrackByNameInList); 5985 QSignalSpy newEntryInListSpy(&myPlayList, &MediaPlayList::newEntryInList); 5986 QSignalSpy newUrlInListSpy(&myPlayList, &MediaPlayList::newUrlInList); 5987 5988 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); 5989 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 5990 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 0); 5991 QCOMPARE(rowsRemovedSpy.count(), 0); 5992 QCOMPARE(rowsMovedSpy.count(), 0); 5993 QCOMPARE(rowsInsertedSpy.count(), 0); 5994 QCOMPARE(persistentStateChangedSpy.count(), 0); 5995 QCOMPARE(dataChangedSpy.count(), 0); 5996 QCOMPARE(newTrackByNameInListSpy.count(), 0); 5997 QCOMPARE(newEntryInListSpy.count(), 0); 5998 5999 myDatabaseContent.init(QStringLiteral("testDbDirectContent")); 6000 6001 connect(&myListener, &TracksListener::trackHasChanged, 6002 &myPlayList, &MediaPlayList::trackChanged, 6003 Qt::QueuedConnection); 6004 connect(&myListener, &TracksListener::tracksListAdded, 6005 &myPlayList, &MediaPlayList::tracksListAdded, 6006 Qt::QueuedConnection); 6007 connect(&myPlayList, &MediaPlayList::newTrackByNameInList, 6008 &myListener, &TracksListener::trackByNameInList, 6009 Qt::QueuedConnection); 6010 connect(&myPlayList, &MediaPlayList::newEntryInList, 6011 &myListener, &TracksListener::newEntryInList, 6012 Qt::QueuedConnection); 6013 connect(&myPlayList, &MediaPlayList::newUrlInList, 6014 &myListener, &TracksListener::newUrlInList, 6015 Qt::QueuedConnection); 6016 connect(&myDatabaseContent, &DatabaseInterface::tracksAdded, 6017 &myListener, &TracksListener::tracksAdded); 6018 6019 myDatabaseContent.insertTracksList(mNewTracks, mNewCovers); 6020 6021 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); 6022 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 6023 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 0); 6024 QCOMPARE(rowsRemovedSpy.count(), 0); 6025 QCOMPARE(rowsMovedSpy.count(), 0); 6026 QCOMPARE(rowsInsertedSpy.count(), 0); 6027 QCOMPARE(persistentStateChangedSpy.count(), 0); 6028 QCOMPARE(dataChangedSpy.count(), 0); 6029 QCOMPARE(newTrackByNameInListSpy.count(), 0); 6030 QCOMPARE(newEntryInListSpy.count(), 0); 6031 6032 auto firstTrackId = myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track1"), QStringLiteral("artist2"), 6033 QStringLiteral("album3"), 1, 1); 6034 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track}, 6035 {DataTypes::DatabaseIdRole, firstTrackId}}, {}, {}}}, {}, {}); 6036 6037 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); 6038 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 6039 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 1); 6040 QCOMPARE(rowsRemovedSpy.count(), 0); 6041 QCOMPARE(rowsMovedSpy.count(), 0); 6042 QCOMPARE(rowsInsertedSpy.count(), 1); 6043 QCOMPARE(persistentStateChangedSpy.count(), 1); 6044 QCOMPARE(dataChangedSpy.count(), 0); 6045 QCOMPARE(newTrackByNameInListSpy.count(), 0); 6046 QCOMPARE(newEntryInListSpy.count(), 1); 6047 6048 QCOMPARE(dataChangedSpy.wait(), true); 6049 6050 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); 6051 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 6052 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 1); 6053 QCOMPARE(rowsRemovedSpy.count(), 0); 6054 QCOMPARE(rowsMovedSpy.count(), 0); 6055 QCOMPARE(rowsInsertedSpy.count(), 1); 6056 QCOMPARE(persistentStateChangedSpy.count(), 1); 6057 QCOMPARE(dataChangedSpy.count(), 1); 6058 QCOMPARE(newTrackByNameInListSpy.count(), 0); 6059 QCOMPARE(newEntryInListSpy.count(), 1); 6060 6061 auto secondTrackId = myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track1"), QStringLiteral("artist1"), 6062 QStringLiteral("album1"), 1, 1); 6063 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track}, 6064 {DataTypes::DatabaseIdRole, secondTrackId}}, {}, {}}}, {}, {}); 6065 6066 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); 6067 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 6068 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 2); 6069 QCOMPARE(rowsRemovedSpy.count(), 0); 6070 QCOMPARE(rowsMovedSpy.count(), 0); 6071 QCOMPARE(rowsInsertedSpy.count(), 2); 6072 QCOMPARE(persistentStateChangedSpy.count(), 2); 6073 QCOMPARE(dataChangedSpy.count(), 1); 6074 QCOMPARE(newTrackByNameInListSpy.count(), 0); 6075 QCOMPARE(newEntryInListSpy.count(), 2); 6076 6077 QCOMPARE(dataChangedSpy.wait(), true); 6078 6079 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); 6080 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 6081 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 2); 6082 QCOMPARE(rowsRemovedSpy.count(), 0); 6083 QCOMPARE(rowsMovedSpy.count(), 0); 6084 QCOMPARE(rowsInsertedSpy.count(), 2); 6085 QCOMPARE(persistentStateChangedSpy.count(), 2); 6086 QCOMPARE(dataChangedSpy.count(), 2); 6087 QCOMPARE(newTrackByNameInListSpy.count(), 0); 6088 QCOMPARE(newEntryInListSpy.count(), 2); 6089 6090 auto thirdTrackId = myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track2"), QStringLiteral("artist2"), 6091 QStringLiteral("album3"), 2, 1); 6092 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track}, 6093 {DataTypes::DatabaseIdRole, thirdTrackId}}, {}, {}}}, {}, {}); 6094 6095 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); 6096 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 6097 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 3); 6098 QCOMPARE(rowsRemovedSpy.count(), 0); 6099 QCOMPARE(rowsMovedSpy.count(), 0); 6100 QCOMPARE(rowsInsertedSpy.count(), 3); 6101 QCOMPARE(persistentStateChangedSpy.count(), 3); 6102 QCOMPARE(dataChangedSpy.count(), 2); 6103 QCOMPARE(newTrackByNameInListSpy.count(), 0); 6104 QCOMPARE(newEntryInListSpy.count(), 3); 6105 6106 QCOMPARE(dataChangedSpy.wait(), true); 6107 6108 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); 6109 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 6110 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 3); 6111 QCOMPARE(rowsRemovedSpy.count(), 0); 6112 QCOMPARE(rowsMovedSpy.count(), 0); 6113 QCOMPARE(rowsInsertedSpy.count(), 3); 6114 QCOMPARE(persistentStateChangedSpy.count(), 3); 6115 QCOMPARE(dataChangedSpy.count(), 3); 6116 QCOMPARE(newTrackByNameInListSpy.count(), 0); 6117 QCOMPARE(newEntryInListSpy.count(), 3); 6118 6119 auto fourthTrackId = myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track3"), QStringLiteral("artist2"), 6120 QStringLiteral("album3"), 3, 1); 6121 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track}, 6122 {DataTypes::DatabaseIdRole, fourthTrackId}}, {}, {}}}, {}, {}); 6123 6124 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); 6125 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 6126 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 4); 6127 QCOMPARE(rowsRemovedSpy.count(), 0); 6128 QCOMPARE(rowsMovedSpy.count(), 0); 6129 QCOMPARE(rowsInsertedSpy.count(), 4); 6130 QCOMPARE(persistentStateChangedSpy.count(), 4); 6131 QCOMPARE(dataChangedSpy.count(), 3); 6132 QCOMPARE(newTrackByNameInListSpy.count(), 0); 6133 QCOMPARE(newEntryInListSpy.count(), 4); 6134 6135 QCOMPARE(dataChangedSpy.wait(), true); 6136 6137 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); 6138 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 6139 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 4); 6140 QCOMPARE(rowsRemovedSpy.count(), 0); 6141 QCOMPARE(rowsMovedSpy.count(), 0); 6142 QCOMPARE(rowsInsertedSpy.count(), 4); 6143 QCOMPARE(persistentStateChangedSpy.count(), 4); 6144 QCOMPARE(dataChangedSpy.count(), 4); 6145 QCOMPARE(newTrackByNameInListSpy.count(), 0); 6146 QCOMPARE(newEntryInListSpy.count(), 4); 6147 6148 auto fithTrackId = myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track9"), QStringLiteral("artist2"), 6149 QStringLiteral("album3"), 9, 1); 6150 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track}, 6151 {DataTypes::DatabaseIdRole, fithTrackId}}, {}, {}}}, {}, {}); 6152 6153 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); 6154 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 6155 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 5); 6156 QCOMPARE(rowsRemovedSpy.count(), 0); 6157 QCOMPARE(rowsMovedSpy.count(), 0); 6158 QCOMPARE(rowsInsertedSpy.count(), 5); 6159 QCOMPARE(persistentStateChangedSpy.count(), 5); 6160 QCOMPARE(dataChangedSpy.count(), 4); 6161 QCOMPARE(newTrackByNameInListSpy.count(), 0); 6162 QCOMPARE(newEntryInListSpy.count(), 5); 6163 6164 QCOMPARE(dataChangedSpy.wait(), true); 6165 6166 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); 6167 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 6168 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 5); 6169 QCOMPARE(rowsRemovedSpy.count(), 0); 6170 QCOMPARE(rowsMovedSpy.count(), 0); 6171 QCOMPARE(rowsInsertedSpy.count(), 5); 6172 QCOMPARE(persistentStateChangedSpy.count(), 5); 6173 QCOMPARE(dataChangedSpy.count(), 5); 6174 QCOMPARE(newTrackByNameInListSpy.count(), 0); 6175 QCOMPARE(newEntryInListSpy.count(), 5); 6176 6177 auto sixthTrackId = myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track1"), QStringLiteral("artist7"), 6178 QStringLiteral("album3"), 1, 1); 6179 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track}, 6180 {DataTypes::DatabaseIdRole, sixthTrackId}}, {}, {}}}, {}, {}); 6181 6182 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); 6183 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 6184 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 6); 6185 QCOMPARE(rowsRemovedSpy.count(), 0); 6186 QCOMPARE(rowsMovedSpy.count(), 0); 6187 QCOMPARE(rowsInsertedSpy.count(), 6); 6188 QCOMPARE(persistentStateChangedSpy.count(), 6); 6189 QCOMPARE(dataChangedSpy.count(), 5); 6190 QCOMPARE(newTrackByNameInListSpy.count(), 0); 6191 QCOMPARE(newEntryInListSpy.count(), 6); 6192 6193 QCOMPARE(dataChangedSpy.wait(), true); 6194 6195 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); 6196 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 6197 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 6); 6198 QCOMPARE(rowsRemovedSpy.count(), 0); 6199 QCOMPARE(rowsMovedSpy.count(), 0); 6200 QCOMPARE(rowsInsertedSpy.count(), 6); 6201 QCOMPARE(persistentStateChangedSpy.count(), 6); 6202 QCOMPARE(dataChangedSpy.count(), 6); 6203 QCOMPARE(newTrackByNameInListSpy.count(), 0); 6204 QCOMPARE(newEntryInListSpy.count(), 6); 6205 } 6206 6207 void MediaPlayListProxyModelTest::testHasHeaderMoveFirstLikeQml() 6208 { 6209 MediaPlayList myPlayList; 6210 QAbstractItemModelTester testModel(&myPlayList); 6211 MediaPlayListProxyModel myPlayListProxyModel; 6212 myPlayListProxyModel.setPlayListModel(&myPlayList); 6213 QAbstractItemModelTester testProxyModel(&myPlayListProxyModel); 6214 DatabaseInterface myDatabaseContent; 6215 TracksListener myListener(&myDatabaseContent); 6216 6217 QSignalSpy rowsAboutToBeMovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsAboutToBeMoved); 6218 QSignalSpy rowsAboutToBeRemovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsAboutToBeRemoved); 6219 QSignalSpy rowsAboutToBeInsertedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsAboutToBeInserted); 6220 QSignalSpy rowsMovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsMoved); 6221 QSignalSpy rowsRemovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsRemoved); 6222 QSignalSpy rowsInsertedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsInserted); 6223 QSignalSpy persistentStateChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::persistentStateChanged); 6224 QSignalSpy dataChangedSpy(&myPlayListProxyModel, &MediaPlayList::dataChanged); 6225 QSignalSpy newTrackByNameInListSpy(&myPlayList, &MediaPlayList::newTrackByNameInList); 6226 QSignalSpy newEntryInListSpy(&myPlayList, &MediaPlayList::newEntryInList); 6227 QSignalSpy newUrlInListSpy(&myPlayList, &MediaPlayList::newUrlInList); 6228 6229 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); 6230 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 6231 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 0); 6232 QCOMPARE(rowsRemovedSpy.count(), 0); 6233 QCOMPARE(rowsMovedSpy.count(), 0); 6234 QCOMPARE(rowsInsertedSpy.count(), 0); 6235 QCOMPARE(persistentStateChangedSpy.count(), 0); 6236 QCOMPARE(dataChangedSpy.count(), 0); 6237 QCOMPARE(newTrackByNameInListSpy.count(), 0); 6238 QCOMPARE(newEntryInListSpy.count(), 0); 6239 6240 myDatabaseContent.init(QStringLiteral("testDbDirectContent")); 6241 6242 connect(&myListener, &TracksListener::trackHasChanged, 6243 &myPlayList, &MediaPlayList::trackChanged, 6244 Qt::QueuedConnection); 6245 connect(&myListener, &TracksListener::tracksListAdded, 6246 &myPlayList, &MediaPlayList::tracksListAdded, 6247 Qt::QueuedConnection); 6248 connect(&myPlayList, &MediaPlayList::newTrackByNameInList, 6249 &myListener, &TracksListener::trackByNameInList, 6250 Qt::QueuedConnection); 6251 connect(&myPlayList, &MediaPlayList::newEntryInList, 6252 &myListener, &TracksListener::newEntryInList, 6253 Qt::QueuedConnection); 6254 connect(&myPlayList, &MediaPlayList::newUrlInList, 6255 &myListener, &TracksListener::newUrlInList, 6256 Qt::QueuedConnection); 6257 connect(&myDatabaseContent, &DatabaseInterface::tracksAdded, 6258 &myListener, &TracksListener::tracksAdded); 6259 6260 myDatabaseContent.insertTracksList(mNewTracks, mNewCovers); 6261 6262 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); 6263 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 6264 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 0); 6265 QCOMPARE(rowsRemovedSpy.count(), 0); 6266 QCOMPARE(rowsMovedSpy.count(), 0); 6267 QCOMPARE(rowsInsertedSpy.count(), 0); 6268 QCOMPARE(persistentStateChangedSpy.count(), 0); 6269 QCOMPARE(dataChangedSpy.count(), 0); 6270 QCOMPARE(newTrackByNameInListSpy.count(), 0); 6271 QCOMPARE(newEntryInListSpy.count(), 0); 6272 6273 auto firstTrackId = myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track1"), QStringLiteral("artist1"), QStringLiteral("album2"), 1, 1); 6274 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track}, 6275 {DataTypes::DatabaseIdRole, firstTrackId}}, {}, {}}}, {}, {}); 6276 6277 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); 6278 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 6279 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 1); 6280 QCOMPARE(rowsRemovedSpy.count(), 0); 6281 QCOMPARE(rowsMovedSpy.count(), 0); 6282 QCOMPARE(rowsInsertedSpy.count(), 1); 6283 QCOMPARE(persistentStateChangedSpy.count(), 1); 6284 QCOMPARE(dataChangedSpy.count(), 0); 6285 QCOMPARE(newTrackByNameInListSpy.count(), 0); 6286 QCOMPARE(newEntryInListSpy.count(), 1); 6287 6288 QCOMPARE(dataChangedSpy.wait(), true); 6289 6290 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); 6291 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 6292 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 1); 6293 QCOMPARE(rowsRemovedSpy.count(), 0); 6294 QCOMPARE(rowsMovedSpy.count(), 0); 6295 QCOMPARE(rowsInsertedSpy.count(), 1); 6296 QCOMPARE(persistentStateChangedSpy.count(), 1); 6297 QCOMPARE(dataChangedSpy.count(), 1); 6298 QCOMPARE(newTrackByNameInListSpy.count(), 0); 6299 QCOMPARE(newEntryInListSpy.count(), 1); 6300 6301 auto secondTrackId = myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track2"), QStringLiteral("artist1"), QStringLiteral("album2"), 2, 1); 6302 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track}, 6303 {DataTypes::DatabaseIdRole, secondTrackId}}, {}, {}}}, {}, {}); 6304 6305 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); 6306 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 6307 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 2); 6308 QCOMPARE(rowsRemovedSpy.count(), 0); 6309 QCOMPARE(rowsMovedSpy.count(), 0); 6310 QCOMPARE(rowsInsertedSpy.count(), 2); 6311 QCOMPARE(persistentStateChangedSpy.count(), 2); 6312 QCOMPARE(dataChangedSpy.count(), 1); 6313 QCOMPARE(newTrackByNameInListSpy.count(), 0); 6314 QCOMPARE(newEntryInListSpy.count(), 2); 6315 6316 QCOMPARE(dataChangedSpy.wait(), true); 6317 6318 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); 6319 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 6320 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 2); 6321 QCOMPARE(rowsRemovedSpy.count(), 0); 6322 QCOMPARE(rowsMovedSpy.count(), 0); 6323 QCOMPARE(rowsInsertedSpy.count(), 2); 6324 QCOMPARE(persistentStateChangedSpy.count(), 2); 6325 QCOMPARE(dataChangedSpy.count(), 2); 6326 QCOMPARE(newTrackByNameInListSpy.count(), 0); 6327 QCOMPARE(newEntryInListSpy.count(), 2); 6328 6329 auto thirdTrackId = myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track3"), QStringLiteral("artist1"), QStringLiteral("album2"), 3, 1); 6330 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track}, 6331 {DataTypes::DatabaseIdRole, thirdTrackId}}, {}, {}}}, {}, {}); 6332 6333 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); 6334 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 6335 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 3); 6336 QCOMPARE(rowsRemovedSpy.count(), 0); 6337 QCOMPARE(rowsMovedSpy.count(), 0); 6338 QCOMPARE(rowsInsertedSpy.count(), 3); 6339 QCOMPARE(persistentStateChangedSpy.count(), 3); 6340 QCOMPARE(dataChangedSpy.count(), 2); 6341 QCOMPARE(newTrackByNameInListSpy.count(), 0); 6342 QCOMPARE(newEntryInListSpy.count(), 3); 6343 6344 QCOMPARE(dataChangedSpy.wait(), true); 6345 6346 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); 6347 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 6348 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 3); 6349 QCOMPARE(rowsRemovedSpy.count(), 0); 6350 QCOMPARE(rowsMovedSpy.count(), 0); 6351 QCOMPARE(rowsInsertedSpy.count(), 3); 6352 QCOMPARE(persistentStateChangedSpy.count(), 3); 6353 QCOMPARE(dataChangedSpy.count(), 3); 6354 QCOMPARE(newTrackByNameInListSpy.count(), 0); 6355 QCOMPARE(newEntryInListSpy.count(), 3); 6356 6357 auto fourthTrackId = myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track4"), QStringLiteral("artist1"), QStringLiteral("album2"), 4, 1); 6358 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track}, 6359 {DataTypes::DatabaseIdRole, fourthTrackId}}, {}, {}}}, {}, {}); 6360 6361 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); 6362 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 6363 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 4); 6364 QCOMPARE(rowsRemovedSpy.count(), 0); 6365 QCOMPARE(rowsMovedSpy.count(), 0); 6366 QCOMPARE(rowsInsertedSpy.count(), 4); 6367 QCOMPARE(persistentStateChangedSpy.count(), 4); 6368 QCOMPARE(dataChangedSpy.count(), 3); 6369 QCOMPARE(newTrackByNameInListSpy.count(), 0); 6370 QCOMPARE(newEntryInListSpy.count(), 4); 6371 6372 QCOMPARE(dataChangedSpy.wait(), true); 6373 6374 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); 6375 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 6376 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 4); 6377 QCOMPARE(rowsRemovedSpy.count(), 0); 6378 QCOMPARE(rowsMovedSpy.count(), 0); 6379 QCOMPARE(rowsInsertedSpy.count(), 4); 6380 QCOMPARE(persistentStateChangedSpy.count(), 4); 6381 QCOMPARE(dataChangedSpy.count(), 4); 6382 QCOMPARE(newTrackByNameInListSpy.count(), 0); 6383 QCOMPARE(newEntryInListSpy.count(), 4); 6384 6385 myPlayListProxyModel.moveRow(0, 3); 6386 6387 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); 6388 QCOMPARE(rowsAboutToBeMovedSpy.count(), 1); 6389 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 4); 6390 QCOMPARE(rowsRemovedSpy.count(), 0); 6391 QCOMPARE(rowsMovedSpy.count(), 1); 6392 QCOMPARE(rowsInsertedSpy.count(), 4); 6393 QCOMPARE(persistentStateChangedSpy.count(), 5); 6394 QCOMPARE(dataChangedSpy.count(), 4); 6395 QCOMPARE(newTrackByNameInListSpy.count(), 0); 6396 QCOMPARE(newEntryInListSpy.count(), 4); 6397 } 6398 6399 void MediaPlayListProxyModelTest::testHasHeaderMoveAnotherLikeQml() 6400 { 6401 MediaPlayList myPlayList; 6402 QAbstractItemModelTester testModel(&myPlayList); 6403 MediaPlayListProxyModel myPlayListProxyModel; 6404 myPlayListProxyModel.setPlayListModel(&myPlayList); 6405 QAbstractItemModelTester testProxyModel(&myPlayListProxyModel); 6406 DatabaseInterface myDatabaseContent; 6407 TracksListener myListener(&myDatabaseContent); 6408 6409 QSignalSpy rowsAboutToBeMovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsAboutToBeMoved); 6410 QSignalSpy rowsAboutToBeRemovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsAboutToBeRemoved); 6411 QSignalSpy rowsAboutToBeInsertedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsAboutToBeInserted); 6412 QSignalSpy rowsMovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsMoved); 6413 QSignalSpy rowsRemovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsRemoved); 6414 QSignalSpy rowsInsertedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsInserted); 6415 QSignalSpy persistentStateChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::persistentStateChanged); 6416 QSignalSpy dataChangedSpy(&myPlayListProxyModel, &MediaPlayList::dataChanged); 6417 QSignalSpy newTrackByNameInListSpy(&myPlayList, &MediaPlayList::newTrackByNameInList); 6418 QSignalSpy newEntryInListSpy(&myPlayList, &MediaPlayList::newEntryInList); 6419 QSignalSpy newUrlInListSpy(&myPlayList, &MediaPlayList::newUrlInList); 6420 6421 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); 6422 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 6423 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 0); 6424 QCOMPARE(rowsRemovedSpy.count(), 0); 6425 QCOMPARE(rowsMovedSpy.count(), 0); 6426 QCOMPARE(rowsInsertedSpy.count(), 0); 6427 QCOMPARE(persistentStateChangedSpy.count(), 0); 6428 QCOMPARE(dataChangedSpy.count(), 0); 6429 QCOMPARE(newTrackByNameInListSpy.count(), 0); 6430 QCOMPARE(newEntryInListSpy.count(), 0); 6431 6432 myDatabaseContent.init(QStringLiteral("testDbDirectContent")); 6433 6434 connect(&myListener, &TracksListener::trackHasChanged, 6435 &myPlayList, &MediaPlayList::trackChanged, 6436 Qt::QueuedConnection); 6437 connect(&myListener, &TracksListener::tracksListAdded, 6438 &myPlayList, &MediaPlayList::tracksListAdded, 6439 Qt::QueuedConnection); 6440 connect(&myPlayList, &MediaPlayList::newTrackByNameInList, 6441 &myListener, &TracksListener::trackByNameInList, 6442 Qt::QueuedConnection); 6443 connect(&myPlayList, &MediaPlayList::newEntryInList, 6444 &myListener, &TracksListener::newEntryInList, 6445 Qt::QueuedConnection); 6446 connect(&myPlayList, &MediaPlayList::newUrlInList, 6447 &myListener, &TracksListener::newUrlInList, 6448 Qt::QueuedConnection); 6449 connect(&myDatabaseContent, &DatabaseInterface::tracksAdded, 6450 &myListener, &TracksListener::tracksAdded); 6451 6452 myDatabaseContent.insertTracksList(mNewTracks, mNewCovers); 6453 6454 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); 6455 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 6456 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 0); 6457 QCOMPARE(rowsRemovedSpy.count(), 0); 6458 QCOMPARE(rowsMovedSpy.count(), 0); 6459 QCOMPARE(rowsInsertedSpy.count(), 0); 6460 QCOMPARE(persistentStateChangedSpy.count(), 0); 6461 QCOMPARE(dataChangedSpy.count(), 0); 6462 QCOMPARE(newTrackByNameInListSpy.count(), 0); 6463 QCOMPARE(newEntryInListSpy.count(), 0); 6464 6465 auto firstTrackId = myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track1"), QStringLiteral("artist1"), QStringLiteral("album2"), 1, 1); 6466 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track}, 6467 {DataTypes::DatabaseIdRole, firstTrackId}}, {}, {}}}, {}, {}); 6468 6469 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); 6470 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 6471 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 1); 6472 QCOMPARE(rowsRemovedSpy.count(), 0); 6473 QCOMPARE(rowsMovedSpy.count(), 0); 6474 QCOMPARE(rowsInsertedSpy.count(), 1); 6475 QCOMPARE(persistentStateChangedSpy.count(), 1); 6476 QCOMPARE(dataChangedSpy.count(), 0); 6477 QCOMPARE(newTrackByNameInListSpy.count(), 0); 6478 QCOMPARE(newEntryInListSpy.count(), 1); 6479 6480 QCOMPARE(dataChangedSpy.wait(), true); 6481 6482 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); 6483 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 6484 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 1); 6485 QCOMPARE(rowsRemovedSpy.count(), 0); 6486 QCOMPARE(rowsMovedSpy.count(), 0); 6487 QCOMPARE(rowsInsertedSpy.count(), 1); 6488 QCOMPARE(persistentStateChangedSpy.count(), 1); 6489 QCOMPARE(dataChangedSpy.count(), 1); 6490 QCOMPARE(newTrackByNameInListSpy.count(), 0); 6491 QCOMPARE(newEntryInListSpy.count(), 1); 6492 6493 auto secondTrackId = myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track2"), QStringLiteral("artist1"), QStringLiteral("album2"), 2, 1); 6494 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track}, 6495 {DataTypes::DatabaseIdRole, secondTrackId}}, {}, {}}}, {}, {}); 6496 6497 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); 6498 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 6499 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 2); 6500 QCOMPARE(rowsRemovedSpy.count(), 0); 6501 QCOMPARE(rowsMovedSpy.count(), 0); 6502 QCOMPARE(rowsInsertedSpy.count(), 2); 6503 QCOMPARE(persistentStateChangedSpy.count(), 2); 6504 QCOMPARE(dataChangedSpy.count(), 1); 6505 QCOMPARE(newTrackByNameInListSpy.count(), 0); 6506 QCOMPARE(newEntryInListSpy.count(), 2); 6507 6508 QCOMPARE(dataChangedSpy.wait(), true); 6509 6510 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); 6511 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 6512 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 2); 6513 QCOMPARE(rowsRemovedSpy.count(), 0); 6514 QCOMPARE(rowsMovedSpy.count(), 0); 6515 QCOMPARE(rowsInsertedSpy.count(), 2); 6516 QCOMPARE(persistentStateChangedSpy.count(), 2); 6517 QCOMPARE(dataChangedSpy.count(), 2); 6518 QCOMPARE(newTrackByNameInListSpy.count(), 0); 6519 QCOMPARE(newEntryInListSpy.count(), 2); 6520 6521 auto thirdTrackId = myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track3"), QStringLiteral("artist1"), QStringLiteral("album2"), 3, 1); 6522 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track}, 6523 {DataTypes::DatabaseIdRole, thirdTrackId}}, {}, {}}}, {}, {}); 6524 6525 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); 6526 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 6527 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 3); 6528 QCOMPARE(rowsRemovedSpy.count(), 0); 6529 QCOMPARE(rowsMovedSpy.count(), 0); 6530 QCOMPARE(rowsInsertedSpy.count(), 3); 6531 QCOMPARE(persistentStateChangedSpy.count(), 3); 6532 QCOMPARE(dataChangedSpy.count(), 2); 6533 QCOMPARE(newTrackByNameInListSpy.count(), 0); 6534 QCOMPARE(newEntryInListSpy.count(), 3); 6535 6536 QCOMPARE(dataChangedSpy.wait(), true); 6537 6538 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); 6539 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 6540 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 3); 6541 QCOMPARE(rowsRemovedSpy.count(), 0); 6542 QCOMPARE(rowsMovedSpy.count(), 0); 6543 QCOMPARE(rowsInsertedSpy.count(), 3); 6544 QCOMPARE(persistentStateChangedSpy.count(), 3); 6545 QCOMPARE(dataChangedSpy.count(), 3); 6546 QCOMPARE(newTrackByNameInListSpy.count(), 0); 6547 QCOMPARE(newEntryInListSpy.count(), 3); 6548 6549 auto fourthTrackId = myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track4"), QStringLiteral("artist1"), QStringLiteral("album2"), 4, 1); 6550 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track}, 6551 {DataTypes::DatabaseIdRole, fourthTrackId}}, {}, {}}}, {}, {}); 6552 6553 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); 6554 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 6555 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 4); 6556 QCOMPARE(rowsRemovedSpy.count(), 0); 6557 QCOMPARE(rowsMovedSpy.count(), 0); 6558 QCOMPARE(rowsInsertedSpy.count(), 4); 6559 QCOMPARE(persistentStateChangedSpy.count(), 4); 6560 QCOMPARE(dataChangedSpy.count(), 3); 6561 QCOMPARE(newTrackByNameInListSpy.count(), 0); 6562 QCOMPARE(newEntryInListSpy.count(), 4); 6563 6564 QCOMPARE(dataChangedSpy.wait(), true); 6565 6566 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); 6567 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 6568 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 4); 6569 QCOMPARE(rowsRemovedSpy.count(), 0); 6570 QCOMPARE(rowsMovedSpy.count(), 0); 6571 QCOMPARE(rowsInsertedSpy.count(), 4); 6572 QCOMPARE(persistentStateChangedSpy.count(), 4); 6573 QCOMPARE(dataChangedSpy.count(), 4); 6574 QCOMPARE(newTrackByNameInListSpy.count(), 0); 6575 QCOMPARE(newEntryInListSpy.count(), 4); 6576 6577 myPlayListProxyModel.moveRow(3, 0); 6578 6579 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); 6580 QCOMPARE(rowsAboutToBeMovedSpy.count(), 1); 6581 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 4); 6582 QCOMPARE(rowsRemovedSpy.count(), 0); 6583 QCOMPARE(rowsMovedSpy.count(), 1); 6584 QCOMPARE(rowsInsertedSpy.count(), 4); 6585 QCOMPARE(persistentStateChangedSpy.count(), 5); 6586 QCOMPARE(dataChangedSpy.count(), 4); 6587 QCOMPARE(newTrackByNameInListSpy.count(), 0); 6588 QCOMPARE(newEntryInListSpy.count(), 4); 6589 } 6590 6591 void MediaPlayListProxyModelTest::testHasHeaderYetAnotherMoveLikeQml() 6592 { 6593 MediaPlayList myPlayList; 6594 QAbstractItemModelTester testModel(&myPlayList); 6595 MediaPlayListProxyModel myPlayListProxyModel; 6596 myPlayListProxyModel.setPlayListModel(&myPlayList); 6597 QAbstractItemModelTester testProxyModel(&myPlayListProxyModel); 6598 DatabaseInterface myDatabaseContent; 6599 TracksListener myListener(&myDatabaseContent); 6600 6601 QSignalSpy rowsAboutToBeMovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsAboutToBeMoved); 6602 QSignalSpy rowsAboutToBeRemovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsAboutToBeRemoved); 6603 QSignalSpy rowsAboutToBeInsertedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsAboutToBeInserted); 6604 QSignalSpy rowsMovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsMoved); 6605 QSignalSpy rowsRemovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsRemoved); 6606 QSignalSpy rowsInsertedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsInserted); 6607 QSignalSpy persistentStateChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::persistentStateChanged); 6608 QSignalSpy dataChangedSpy(&myPlayListProxyModel, &MediaPlayList::dataChanged); 6609 QSignalSpy newTrackByNameInListSpy(&myPlayList, &MediaPlayList::newTrackByNameInList); 6610 QSignalSpy newEntryInListSpy(&myPlayList, &MediaPlayList::newEntryInList); 6611 QSignalSpy newUrlInListSpy(&myPlayList, &MediaPlayList::newUrlInList); 6612 6613 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); 6614 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 6615 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 0); 6616 QCOMPARE(rowsRemovedSpy.count(), 0); 6617 QCOMPARE(rowsMovedSpy.count(), 0); 6618 QCOMPARE(rowsInsertedSpy.count(), 0); 6619 QCOMPARE(persistentStateChangedSpy.count(), 0); 6620 QCOMPARE(dataChangedSpy.count(), 0); 6621 QCOMPARE(newTrackByNameInListSpy.count(), 0); 6622 QCOMPARE(newEntryInListSpy.count(), 0); 6623 6624 myDatabaseContent.init(QStringLiteral("testDbDirectContent")); 6625 6626 connect(&myListener, &TracksListener::trackHasChanged, 6627 &myPlayList, &MediaPlayList::trackChanged, 6628 Qt::QueuedConnection); 6629 connect(&myListener, &TracksListener::tracksListAdded, 6630 &myPlayList, &MediaPlayList::tracksListAdded, 6631 Qt::QueuedConnection); 6632 connect(&myPlayList, &MediaPlayList::newTrackByNameInList, 6633 &myListener, &TracksListener::trackByNameInList, 6634 Qt::QueuedConnection); 6635 connect(&myPlayList, &MediaPlayList::newEntryInList, 6636 &myListener, &TracksListener::newEntryInList, 6637 Qt::QueuedConnection); 6638 connect(&myPlayList, &MediaPlayList::newUrlInList, 6639 &myListener, &TracksListener::newUrlInList, 6640 Qt::QueuedConnection); 6641 connect(&myDatabaseContent, &DatabaseInterface::tracksAdded, 6642 &myListener, &TracksListener::tracksAdded); 6643 6644 myDatabaseContent.insertTracksList(mNewTracks, mNewCovers); 6645 6646 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); 6647 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 6648 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 0); 6649 QCOMPARE(rowsRemovedSpy.count(), 0); 6650 QCOMPARE(rowsMovedSpy.count(), 0); 6651 QCOMPARE(rowsInsertedSpy.count(), 0); 6652 QCOMPARE(persistentStateChangedSpy.count(), 0); 6653 QCOMPARE(dataChangedSpy.count(), 0); 6654 QCOMPARE(newTrackByNameInListSpy.count(), 0); 6655 QCOMPARE(newEntryInListSpy.count(), 0); 6656 6657 auto firstTrackId = myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track1"), QStringLiteral("artist1"), QStringLiteral("album2"), 1, 1); 6658 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track}, 6659 {DataTypes::DatabaseIdRole, firstTrackId}}, {}, {}}}, {}, {}); 6660 6661 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); 6662 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 6663 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 1); 6664 QCOMPARE(rowsRemovedSpy.count(), 0); 6665 QCOMPARE(rowsMovedSpy.count(), 0); 6666 QCOMPARE(rowsInsertedSpy.count(), 1); 6667 QCOMPARE(persistentStateChangedSpy.count(), 1); 6668 QCOMPARE(dataChangedSpy.count(), 0); 6669 QCOMPARE(newTrackByNameInListSpy.count(), 0); 6670 QCOMPARE(newEntryInListSpy.count(), 1); 6671 6672 QCOMPARE(dataChangedSpy.wait(), true); 6673 6674 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); 6675 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 6676 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 1); 6677 QCOMPARE(rowsRemovedSpy.count(), 0); 6678 QCOMPARE(rowsMovedSpy.count(), 0); 6679 QCOMPARE(rowsInsertedSpy.count(), 1); 6680 QCOMPARE(persistentStateChangedSpy.count(), 1); 6681 QCOMPARE(dataChangedSpy.count(), 1); 6682 QCOMPARE(newTrackByNameInListSpy.count(), 0); 6683 QCOMPARE(newEntryInListSpy.count(), 1); 6684 6685 auto secondTrackId = myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track2"), QStringLiteral("artist1"), QStringLiteral("album2"), 2, 1); 6686 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track}, 6687 {DataTypes::DatabaseIdRole, secondTrackId}}, {}, {}}}, {}, {}); 6688 6689 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); 6690 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 6691 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 2); 6692 QCOMPARE(rowsRemovedSpy.count(), 0); 6693 QCOMPARE(rowsMovedSpy.count(), 0); 6694 QCOMPARE(rowsInsertedSpy.count(), 2); 6695 QCOMPARE(persistentStateChangedSpy.count(), 2); 6696 QCOMPARE(dataChangedSpy.count(), 1); 6697 QCOMPARE(newTrackByNameInListSpy.count(), 0); 6698 QCOMPARE(newEntryInListSpy.count(), 2); 6699 6700 QCOMPARE(dataChangedSpy.wait(), true); 6701 6702 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); 6703 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 6704 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 2); 6705 QCOMPARE(rowsRemovedSpy.count(), 0); 6706 QCOMPARE(rowsMovedSpy.count(), 0); 6707 QCOMPARE(rowsInsertedSpy.count(), 2); 6708 QCOMPARE(persistentStateChangedSpy.count(), 2); 6709 QCOMPARE(dataChangedSpy.count(), 2); 6710 QCOMPARE(newTrackByNameInListSpy.count(), 0); 6711 QCOMPARE(newEntryInListSpy.count(), 2); 6712 6713 auto thirdTrackId = myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track1"), QStringLiteral("artist1"), QStringLiteral("album1"), 1, 1); 6714 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track}, 6715 {DataTypes::DatabaseIdRole, thirdTrackId}}, {}, {}}}, {}, {}); 6716 6717 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); 6718 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 6719 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 3); 6720 QCOMPARE(rowsRemovedSpy.count(), 0); 6721 QCOMPARE(rowsMovedSpy.count(), 0); 6722 QCOMPARE(rowsInsertedSpy.count(), 3); 6723 QCOMPARE(persistentStateChangedSpy.count(), 3); 6724 QCOMPARE(dataChangedSpy.count(), 2); 6725 QCOMPARE(newTrackByNameInListSpy.count(), 0); 6726 QCOMPARE(newEntryInListSpy.count(), 3); 6727 6728 QCOMPARE(dataChangedSpy.wait(), true); 6729 6730 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); 6731 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 6732 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 3); 6733 QCOMPARE(rowsRemovedSpy.count(), 0); 6734 QCOMPARE(rowsMovedSpy.count(), 0); 6735 QCOMPARE(rowsInsertedSpy.count(), 3); 6736 QCOMPARE(persistentStateChangedSpy.count(), 3); 6737 QCOMPARE(dataChangedSpy.count(), 3); 6738 QCOMPARE(newTrackByNameInListSpy.count(), 0); 6739 QCOMPARE(newEntryInListSpy.count(), 3); 6740 6741 auto fourthTrackId = myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track4"), QStringLiteral("artist1"), QStringLiteral("album2"), 4, 1); 6742 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track}, 6743 {DataTypes::DatabaseIdRole, fourthTrackId}}, {}, {}}}, {}, {}); 6744 6745 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); 6746 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 6747 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 4); 6748 QCOMPARE(rowsRemovedSpy.count(), 0); 6749 QCOMPARE(rowsMovedSpy.count(), 0); 6750 QCOMPARE(rowsInsertedSpy.count(), 4); 6751 QCOMPARE(persistentStateChangedSpy.count(), 4); 6752 QCOMPARE(dataChangedSpy.count(), 3); 6753 QCOMPARE(newTrackByNameInListSpy.count(), 0); 6754 QCOMPARE(newEntryInListSpy.count(), 4); 6755 6756 QCOMPARE(dataChangedSpy.wait(), true); 6757 6758 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); 6759 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 6760 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 4); 6761 QCOMPARE(rowsRemovedSpy.count(), 0); 6762 QCOMPARE(rowsMovedSpy.count(), 0); 6763 QCOMPARE(rowsInsertedSpy.count(), 4); 6764 QCOMPARE(persistentStateChangedSpy.count(), 4); 6765 QCOMPARE(dataChangedSpy.count(), 4); 6766 QCOMPARE(newTrackByNameInListSpy.count(), 0); 6767 QCOMPARE(newEntryInListSpy.count(), 4); 6768 6769 myPlayListProxyModel.moveRow(0, 2); 6770 6771 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); 6772 QCOMPARE(rowsAboutToBeMovedSpy.count(), 1); 6773 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 4); 6774 QCOMPARE(rowsRemovedSpy.count(), 0); 6775 QCOMPARE(rowsMovedSpy.count(), 1); 6776 QCOMPARE(rowsInsertedSpy.count(), 4); 6777 QCOMPARE(persistentStateChangedSpy.count(), 5); 6778 QCOMPARE(dataChangedSpy.count(), 4); 6779 QCOMPARE(newTrackByNameInListSpy.count(), 0); 6780 QCOMPARE(newEntryInListSpy.count(), 4); 6781 6782 myPlayListProxyModel.moveRow(2, 0); 6783 6784 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); 6785 QCOMPARE(rowsAboutToBeMovedSpy.count(), 2); 6786 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 4); 6787 QCOMPARE(rowsRemovedSpy.count(), 0); 6788 QCOMPARE(rowsMovedSpy.count(), 2); 6789 QCOMPARE(rowsInsertedSpy.count(), 4); 6790 QCOMPARE(persistentStateChangedSpy.count(), 6); 6791 QCOMPARE(dataChangedSpy.count(), 4); 6792 QCOMPARE(newTrackByNameInListSpy.count(), 0); 6793 QCOMPARE(newEntryInListSpy.count(), 4); 6794 } 6795 6796 void MediaPlayListProxyModelTest::enqueueFiles() 6797 { 6798 MediaPlayList myPlayList; 6799 QAbstractItemModelTester testModel(&myPlayList); 6800 MediaPlayListProxyModel myPlayListProxyModel; 6801 myPlayListProxyModel.setPlayListModel(&myPlayList); 6802 QAbstractItemModelTester testProxyModel(&myPlayListProxyModel); 6803 DatabaseInterface myDatabaseContent; 6804 TracksListener myListener(&myDatabaseContent); 6805 6806 QSignalSpy rowsAboutToBeMovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsAboutToBeMoved); 6807 QSignalSpy rowsAboutToBeRemovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsAboutToBeRemoved); 6808 QSignalSpy rowsAboutToBeInsertedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsAboutToBeInserted); 6809 QSignalSpy rowsMovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsMoved); 6810 QSignalSpy rowsRemovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsRemoved); 6811 QSignalSpy rowsInsertedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsInserted); 6812 QSignalSpy persistentStateChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::persistentStateChanged); 6813 QSignalSpy dataChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::dataChanged); 6814 QSignalSpy newTrackByNameInListSpy(&myPlayList, &MediaPlayList::newTrackByNameInList); 6815 QSignalSpy newEntryInListSpy(&myPlayList, &MediaPlayList::newEntryInList); 6816 QSignalSpy newUrlInListSpy(&myPlayList, &MediaPlayList::newUrlInList); 6817 6818 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); 6819 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 6820 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 0); 6821 QCOMPARE(rowsRemovedSpy.count(), 0); 6822 QCOMPARE(rowsMovedSpy.count(), 0); 6823 QCOMPARE(rowsInsertedSpy.count(), 0); 6824 QCOMPARE(persistentStateChangedSpy.count(), 0); 6825 QCOMPARE(dataChangedSpy.count(), 0); 6826 QCOMPARE(newTrackByNameInListSpy.count(), 0); 6827 QCOMPARE(newEntryInListSpy.count(), 0); 6828 QCOMPARE(newUrlInListSpy.count(), 0); 6829 6830 myDatabaseContent.init(QStringLiteral("testDbDirectContent")); 6831 6832 connect(&myListener, &TracksListener::trackHasChanged, 6833 &myPlayList, &MediaPlayList::trackChanged, 6834 Qt::QueuedConnection); 6835 connect(&myListener, &TracksListener::tracksListAdded, 6836 &myPlayList, &MediaPlayList::tracksListAdded, 6837 Qt::QueuedConnection); 6838 connect(&myPlayList, &MediaPlayList::newTrackByNameInList, 6839 &myListener, &TracksListener::trackByNameInList, 6840 Qt::QueuedConnection); 6841 connect(&myPlayList, &MediaPlayList::newEntryInList, 6842 &myListener, &TracksListener::newEntryInList, 6843 Qt::QueuedConnection); 6844 connect(&myPlayList, &MediaPlayList::newUrlInList, 6845 &myListener, &TracksListener::newUrlInList, 6846 Qt::QueuedConnection); 6847 connect(&myDatabaseContent, &DatabaseInterface::tracksAdded, 6848 &myListener, &TracksListener::tracksAdded); 6849 6850 myDatabaseContent.insertTracksList(mNewTracks, mNewCovers); 6851 6852 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); 6853 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 6854 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 0); 6855 QCOMPARE(rowsRemovedSpy.count(), 0); 6856 QCOMPARE(rowsMovedSpy.count(), 0); 6857 QCOMPARE(rowsInsertedSpy.count(), 0); 6858 QCOMPARE(persistentStateChangedSpy.count(), 0); 6859 QCOMPARE(dataChangedSpy.count(), 0); 6860 QCOMPARE(newTrackByNameInListSpy.count(), 0); 6861 QCOMPARE(newEntryInListSpy.count(), 0); 6862 QCOMPARE(newUrlInListSpy.count(), 0); 6863 6864 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track}, 6865 {DataTypes::ResourceRole, QUrl::fromLocalFile(QStringLiteral("/$1"))}}, {}, {}}, 6866 {{{DataTypes::ElementTypeRole, ElisaUtils::Track}, 6867 {DataTypes::ResourceRole, QUrl::fromLocalFile(QStringLiteral("/$2"))}}, {}, {}}}, {}, {}); 6868 6869 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); 6870 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 6871 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 1); 6872 QCOMPARE(rowsRemovedSpy.count(), 0); 6873 QCOMPARE(rowsMovedSpy.count(), 0); 6874 QCOMPARE(rowsInsertedSpy.count(), 1); 6875 QCOMPARE(persistentStateChangedSpy.count(), 1); 6876 QCOMPARE(dataChangedSpy.count(), 0); 6877 QCOMPARE(newTrackByNameInListSpy.count(), 0); 6878 QCOMPARE(newEntryInListSpy.count(), 0); 6879 QCOMPARE(newUrlInListSpy.count(), 2); 6880 6881 QCOMPARE(myPlayListProxyModel.rowCount(), 2); 6882 6883 QCOMPARE(dataChangedSpy.wait(300), true); 6884 6885 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); 6886 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 6887 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 1); 6888 QCOMPARE(rowsRemovedSpy.count(), 0); 6889 QCOMPARE(rowsMovedSpy.count(), 0); 6890 QCOMPARE(rowsInsertedSpy.count(), 1); 6891 QCOMPARE(persistentStateChangedSpy.count(), 1); 6892 QCOMPARE(dataChangedSpy.count(), 2); 6893 QCOMPARE(newTrackByNameInListSpy.count(), 0); 6894 QCOMPARE(newEntryInListSpy.count(), 0); 6895 QCOMPARE(newUrlInListSpy.count(), 2); 6896 6897 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::TitleRole).toString(), QStringLiteral("track1")); 6898 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::AlbumRole).toString(), QStringLiteral("album1")); 6899 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ArtistRole).toString(), QStringLiteral("artist1")); 6900 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::TrackNumberRole).toInt(), 1); 6901 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::DiscNumberRole).toInt(), 1); 6902 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::DurationRole).toTime().msecsSinceStartOfDay(), 1); 6903 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::TitleRole).toString(), QStringLiteral("track2")); 6904 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::AlbumRole).toString(), QStringLiteral("album1")); 6905 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::ArtistRole).toString(), QStringLiteral("artist2")); 6906 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::TrackNumberRole).toInt(), 2); 6907 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::DiscNumberRole).toInt(), 2); 6908 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::DurationRole).toTime().msecsSinceStartOfDay(), 2); 6909 } 6910 6911 void MediaPlayListProxyModelTest::enqueueSampleFiles() 6912 { 6913 MediaPlayList myPlayList; 6914 QAbstractItemModelTester testModel(&myPlayList); 6915 MediaPlayListProxyModel myPlayListProxyModel; 6916 myPlayListProxyModel.setPlayListModel(&myPlayList); 6917 QAbstractItemModelTester testProxyModel(&myPlayListProxyModel); 6918 DatabaseInterface myDatabaseContent; 6919 TracksListener myListener(&myDatabaseContent); 6920 6921 QSignalSpy rowsAboutToBeMovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsAboutToBeMoved); 6922 QSignalSpy rowsAboutToBeRemovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsAboutToBeRemoved); 6923 QSignalSpy rowsAboutToBeInsertedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsAboutToBeInserted); 6924 QSignalSpy rowsMovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsMoved); 6925 QSignalSpy rowsRemovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsRemoved); 6926 QSignalSpy rowsInsertedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsInserted); 6927 QSignalSpy persistentStateChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::persistentStateChanged); 6928 QSignalSpy dataChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::dataChanged); 6929 QSignalSpy newTrackByNameInListSpy(&myPlayList, &MediaPlayList::newTrackByNameInList); 6930 QSignalSpy newEntryInListSpy(&myPlayList, &MediaPlayList::newEntryInList); 6931 QSignalSpy newUrlInListSpy(&myPlayList, &MediaPlayList::newUrlInList); 6932 6933 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); 6934 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 6935 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 0); 6936 QCOMPARE(rowsRemovedSpy.count(), 0); 6937 QCOMPARE(rowsMovedSpy.count(), 0); 6938 QCOMPARE(rowsInsertedSpy.count(), 0); 6939 QCOMPARE(persistentStateChangedSpy.count(), 0); 6940 QCOMPARE(dataChangedSpy.count(), 0); 6941 QCOMPARE(newTrackByNameInListSpy.count(), 0); 6942 QCOMPARE(newEntryInListSpy.count(), 0); 6943 QCOMPARE(newUrlInListSpy.count(), 0); 6944 6945 myDatabaseContent.init(QStringLiteral("testDbDirectContent")); 6946 6947 connect(&myListener, &TracksListener::trackHasChanged, 6948 &myPlayList, &MediaPlayList::trackChanged, 6949 Qt::QueuedConnection); 6950 connect(&myListener, &TracksListener::tracksListAdded, 6951 &myPlayList, &MediaPlayList::tracksListAdded, 6952 Qt::QueuedConnection); 6953 connect(&myPlayList, &MediaPlayList::newTrackByNameInList, 6954 &myListener, &TracksListener::trackByNameInList, 6955 Qt::QueuedConnection); 6956 connect(&myPlayList, &MediaPlayList::newEntryInList, 6957 &myListener, &TracksListener::newEntryInList, 6958 Qt::QueuedConnection); 6959 connect(&myPlayList, &MediaPlayList::newUrlInList, 6960 &myListener, &TracksListener::newUrlInList, 6961 Qt::QueuedConnection); 6962 connect(&myDatabaseContent, &DatabaseInterface::tracksAdded, 6963 &myListener, &TracksListener::tracksAdded); 6964 6965 myDatabaseContent.insertTracksList(mNewTracks, mNewCovers); 6966 6967 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); 6968 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 6969 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 0); 6970 QCOMPARE(rowsRemovedSpy.count(), 0); 6971 QCOMPARE(rowsMovedSpy.count(), 0); 6972 QCOMPARE(rowsInsertedSpy.count(), 0); 6973 QCOMPARE(persistentStateChangedSpy.count(), 0); 6974 QCOMPARE(dataChangedSpy.count(), 0); 6975 QCOMPARE(newTrackByNameInListSpy.count(), 0); 6976 QCOMPARE(newEntryInListSpy.count(), 0); 6977 QCOMPARE(newUrlInListSpy.count(), 0); 6978 6979 myPlayListProxyModel.enqueue({ 6980 {{{DataTypes::ElementTypeRole, ElisaUtils::Track}, 6981 {DataTypes::ResourceRole, QUrl::fromLocalFile(QStringLiteral(MEDIAPLAYLIST_TESTS_SAMPLE_FILES_PATH) + QStringLiteral("/test.ogg"))}}, {}, {}}, 6982 {{{DataTypes::ElementTypeRole, ElisaUtils::Track}, 6983 {DataTypes::ResourceRole, QUrl::fromLocalFile(QStringLiteral(MEDIAPLAYLIST_TESTS_SAMPLE_FILES_PATH) + QStringLiteral("/test2.ogg"))}}, {}, {}}}, 6984 {}, {}); 6985 6986 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); 6987 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 6988 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 1); 6989 QCOMPARE(rowsRemovedSpy.count(), 0); 6990 QCOMPARE(rowsMovedSpy.count(), 0); 6991 QCOMPARE(rowsInsertedSpy.count(), 1); 6992 QCOMPARE(persistentStateChangedSpy.count(), 1); 6993 QCOMPARE(dataChangedSpy.count(), 0); 6994 QCOMPARE(newTrackByNameInListSpy.count(), 0); 6995 QCOMPARE(newEntryInListSpy.count(), 0); 6996 QCOMPARE(newUrlInListSpy.count(), 2); 6997 6998 QCOMPARE(myPlayListProxyModel.rowCount(), 2); 6999 7000 while (dataChangedSpy.count() < 2) { 7001 QCOMPARE(dataChangedSpy.wait(), true); 7002 } 7003 7004 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); 7005 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 7006 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 1); 7007 QCOMPARE(rowsRemovedSpy.count(), 0); 7008 QCOMPARE(rowsMovedSpy.count(), 0); 7009 QCOMPARE(rowsInsertedSpy.count(), 1); 7010 QCOMPARE(persistentStateChangedSpy.count(), 1); 7011 QCOMPARE(dataChangedSpy.count(), 2); 7012 QCOMPARE(newTrackByNameInListSpy.count(), 0); 7013 QCOMPARE(newEntryInListSpy.count(), 0); 7014 QCOMPARE(newUrlInListSpy.count(), 2); 7015 7016 #if KFFileMetaData_FOUND 7017 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::TitleRole).toString(), QStringLiteral("Title")); 7018 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::AlbumRole).toString(), QStringLiteral("Test")); 7019 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ArtistRole).toString(), QStringLiteral("Artist")); 7020 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::TrackNumberRole).toInt(), 1); 7021 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::DiscNumberRole).toInt(), 1); 7022 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::DurationRole).toTime().msecsSinceStartOfDay(), 1000); 7023 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::TitleRole).toString(), QStringLiteral("Title2")); 7024 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::AlbumRole).toString(), QStringLiteral("Test2")); 7025 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::ArtistRole).toString(), QStringLiteral("Artist2")); 7026 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::TrackNumberRole).toInt(), 1); 7027 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::DiscNumberRole).toInt(), 1); 7028 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::DurationRole).toTime().msecsSinceStartOfDay(), 1000); 7029 #else 7030 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::TitleRole).toString(), QStringLiteral("test.ogg")); 7031 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::AlbumRole).toString(), QStringLiteral("")); 7032 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ArtistRole).toString(), QStringLiteral("")); 7033 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::TrackNumberRole).toInt(), -1); 7034 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::DiscNumberRole).toInt(), -1); 7035 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::DurationRole).toTime().msecsSinceStartOfDay(), 0); 7036 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::TitleRole).toString(), QStringLiteral("test2.ogg")); 7037 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::AlbumRole).toString(), QStringLiteral("")); 7038 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::ArtistRole).toString(), QStringLiteral("")); 7039 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::TrackNumberRole).toInt(), -1); 7040 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::DiscNumberRole).toInt(), -1); 7041 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::DurationRole).toTime().msecsSinceStartOfDay(), 0); 7042 #endif 7043 } 7044 7045 void MediaPlayListProxyModelTest::enqueueEmpty() 7046 { 7047 MediaPlayList myPlayList; 7048 QAbstractItemModelTester testModel(&myPlayList); 7049 MediaPlayListProxyModel myPlayListProxyModel; 7050 myPlayListProxyModel.setPlayListModel(&myPlayList); 7051 QAbstractItemModelTester testProxyModel(&myPlayListProxyModel); 7052 DatabaseInterface myDatabaseContent; 7053 TracksListener myListener(&myDatabaseContent); 7054 7055 QSignalSpy rowsAboutToBeMovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsAboutToBeMoved); 7056 QSignalSpy rowsAboutToBeRemovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsAboutToBeRemoved); 7057 QSignalSpy rowsAboutToBeInsertedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsAboutToBeInserted); 7058 QSignalSpy rowsMovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsMoved); 7059 QSignalSpy rowsRemovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsRemoved); 7060 QSignalSpy rowsInsertedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsInserted); 7061 QSignalSpy persistentStateChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::persistentStateChanged); 7062 QSignalSpy dataChangedSpy(&myPlayList, &MediaPlayListProxyModel::dataChanged); 7063 QSignalSpy newTrackByNameInListSpy(&myPlayList, &MediaPlayList::newTrackByNameInList); 7064 QSignalSpy newEntryInListSpy(&myPlayList, &MediaPlayList::newEntryInList); 7065 QSignalSpy newUrlInListSpy(&myPlayList, &MediaPlayList::newUrlInList); 7066 7067 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); 7068 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 7069 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 0); 7070 QCOMPARE(rowsRemovedSpy.count(), 0); 7071 QCOMPARE(rowsMovedSpy.count(), 0); 7072 QCOMPARE(rowsInsertedSpy.count(), 0); 7073 QCOMPARE(persistentStateChangedSpy.count(), 0); 7074 QCOMPARE(dataChangedSpy.count(), 0); 7075 QCOMPARE(newTrackByNameInListSpy.count(), 0); 7076 QCOMPARE(newEntryInListSpy.count(), 0); 7077 7078 myDatabaseContent.init(QStringLiteral("testDbDirectContent")); 7079 7080 connect(&myListener, &TracksListener::trackHasChanged, 7081 &myPlayList, &MediaPlayList::trackChanged, 7082 Qt::QueuedConnection); 7083 connect(&myListener, &TracksListener::tracksListAdded, 7084 &myPlayList, &MediaPlayList::tracksListAdded, 7085 Qt::QueuedConnection); 7086 connect(&myPlayList, &MediaPlayList::newTrackByNameInList, 7087 &myListener, &TracksListener::trackByNameInList, 7088 Qt::QueuedConnection); 7089 connect(&myPlayList, &MediaPlayList::newEntryInList, 7090 &myListener, &TracksListener::newEntryInList, 7091 Qt::QueuedConnection); 7092 connect(&myPlayList, &MediaPlayList::newUrlInList, 7093 &myListener, &TracksListener::newUrlInList, 7094 Qt::QueuedConnection); 7095 connect(&myDatabaseContent, &DatabaseInterface::tracksAdded, 7096 &myListener, &TracksListener::tracksAdded); 7097 7098 myDatabaseContent.insertTracksList(mNewTracks, mNewCovers); 7099 7100 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); 7101 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 7102 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 0); 7103 QCOMPARE(rowsRemovedSpy.count(), 0); 7104 QCOMPARE(rowsMovedSpy.count(), 0); 7105 QCOMPARE(rowsInsertedSpy.count(), 0); 7106 QCOMPARE(persistentStateChangedSpy.count(), 0); 7107 QCOMPARE(dataChangedSpy.count(), 0); 7108 QCOMPARE(newTrackByNameInListSpy.count(), 0); 7109 QCOMPARE(newEntryInListSpy.count(), 0); 7110 7111 myPlayListProxyModel.enqueue(DataTypes::EntryDataList{}, {}, {}); 7112 7113 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); 7114 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 7115 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 0); 7116 QCOMPARE(rowsRemovedSpy.count(), 0); 7117 QCOMPARE(rowsMovedSpy.count(), 0); 7118 QCOMPARE(rowsInsertedSpy.count(), 0); 7119 QCOMPARE(persistentStateChangedSpy.count(), 0); 7120 QCOMPARE(dataChangedSpy.count(), 0); 7121 QCOMPARE(newTrackByNameInListSpy.count(), 0); 7122 QCOMPARE(newEntryInListSpy.count(), 0); 7123 7124 myPlayListProxyModel.enqueue(DataTypes::EntryDataList{}, {}, {}); 7125 7126 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); 7127 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 7128 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 0); 7129 QCOMPARE(rowsRemovedSpy.count(), 0); 7130 QCOMPARE(rowsMovedSpy.count(), 0); 7131 QCOMPARE(rowsInsertedSpy.count(), 0); 7132 QCOMPARE(persistentStateChangedSpy.count(), 0); 7133 QCOMPARE(dataChangedSpy.count(), 0); 7134 QCOMPARE(newTrackByNameInListSpy.count(), 0); 7135 QCOMPARE(newEntryInListSpy.count(), 0); 7136 7137 myPlayListProxyModel.enqueue(DataTypes::EntryDataList{}, ElisaUtils::AppendPlayList, ElisaUtils::DoNotTriggerPlay); 7138 7139 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); 7140 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 7141 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 0); 7142 QCOMPARE(rowsRemovedSpy.count(), 0); 7143 QCOMPARE(rowsMovedSpy.count(), 0); 7144 QCOMPARE(rowsInsertedSpy.count(), 0); 7145 QCOMPARE(persistentStateChangedSpy.count(), 0); 7146 QCOMPARE(dataChangedSpy.count(), 0); 7147 QCOMPARE(newTrackByNameInListSpy.count(), 0); 7148 QCOMPARE(newEntryInListSpy.count(), 0); 7149 7150 myPlayListProxyModel.enqueue(DataTypes::EntryDataList{}, ElisaUtils::AppendPlayList, ElisaUtils::DoNotTriggerPlay); 7151 7152 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); 7153 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 7154 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 0); 7155 QCOMPARE(rowsRemovedSpy.count(), 0); 7156 QCOMPARE(rowsMovedSpy.count(), 0); 7157 QCOMPARE(rowsInsertedSpy.count(), 0); 7158 QCOMPARE(persistentStateChangedSpy.count(), 0); 7159 QCOMPARE(dataChangedSpy.count(), 0); 7160 QCOMPARE(newTrackByNameInListSpy.count(), 0); 7161 QCOMPARE(newEntryInListSpy.count(), 0); 7162 7163 myPlayListProxyModel.enqueue(DataTypes::EntryDataList{}, 7164 ElisaUtils::AppendPlayList, 7165 ElisaUtils::DoNotTriggerPlay); 7166 7167 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); 7168 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 7169 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 0); 7170 QCOMPARE(rowsRemovedSpy.count(), 0); 7171 QCOMPARE(rowsMovedSpy.count(), 0); 7172 QCOMPARE(rowsInsertedSpy.count(), 0); 7173 QCOMPARE(persistentStateChangedSpy.count(), 0); 7174 QCOMPARE(dataChangedSpy.count(), 0); 7175 QCOMPARE(newTrackByNameInListSpy.count(), 0); 7176 QCOMPARE(newEntryInListSpy.count(), 0); 7177 } 7178 7179 void MediaPlayListProxyModelTest::testMoveAndShuffle() 7180 { 7181 MediaPlayList myPlayList; 7182 QAbstractItemModelTester testModel(&myPlayList); 7183 MediaPlayListProxyModel myPlayListProxyModel; 7184 myPlayListProxyModel.setPlayListModel(&myPlayList); 7185 QAbstractItemModelTester testProxyModel(&myPlayListProxyModel); 7186 DatabaseInterface myDatabaseContent; 7187 TracksListener myListener(&myDatabaseContent); 7188 7189 QSignalSpy rowsAboutToBeMovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsAboutToBeMoved); 7190 QSignalSpy rowsAboutToBeRemovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsAboutToBeRemoved); 7191 QSignalSpy rowsAboutToBeInsertedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsAboutToBeInserted); 7192 QSignalSpy rowsMovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsMoved); 7193 QSignalSpy rowsRemovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsRemoved); 7194 QSignalSpy rowsInsertedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsInserted); 7195 QSignalSpy persistentStateChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::persistentStateChanged); 7196 QSignalSpy dataChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::dataChanged); 7197 QSignalSpy newTrackByNameInListSpy(&myPlayList, &MediaPlayList::newTrackByNameInList); 7198 QSignalSpy newEntryInListSpy(&myPlayList, &MediaPlayList::newEntryInList); 7199 QSignalSpy newUrlInListSpy(&myPlayList, &MediaPlayList::newUrlInList); 7200 7201 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); 7202 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 7203 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 0); 7204 QCOMPARE(rowsRemovedSpy.count(), 0); 7205 QCOMPARE(rowsMovedSpy.count(), 0); 7206 QCOMPARE(rowsInsertedSpy.count(), 0); 7207 QCOMPARE(persistentStateChangedSpy.count(), 0); 7208 QCOMPARE(dataChangedSpy.count(), 0); 7209 QCOMPARE(newTrackByNameInListSpy.count(), 0); 7210 QCOMPARE(newEntryInListSpy.count(), 0); 7211 7212 myDatabaseContent.init(QStringLiteral("testDbDirectContent")); 7213 7214 connect(&myListener, &TracksListener::trackHasChanged, 7215 &myPlayList, &MediaPlayList::trackChanged, 7216 Qt::QueuedConnection); 7217 connect(&myListener, &TracksListener::tracksListAdded, 7218 &myPlayList, &MediaPlayList::tracksListAdded, 7219 Qt::QueuedConnection); 7220 connect(&myPlayList, &MediaPlayList::newTrackByNameInList, 7221 &myListener, &TracksListener::trackByNameInList, 7222 Qt::QueuedConnection); 7223 connect(&myPlayList, &MediaPlayList::newEntryInList, 7224 &myListener, &TracksListener::newEntryInList, 7225 Qt::QueuedConnection); 7226 connect(&myPlayList, &MediaPlayList::newUrlInList, 7227 &myListener, &TracksListener::newUrlInList, 7228 Qt::QueuedConnection); 7229 connect(&myDatabaseContent, &DatabaseInterface::tracksAdded, 7230 &myListener, &TracksListener::tracksAdded); 7231 7232 myDatabaseContent.insertTracksList(mNewTracks, mNewCovers); 7233 7234 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); 7235 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 7236 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 0); 7237 QCOMPARE(rowsRemovedSpy.count(), 0); 7238 QCOMPARE(rowsMovedSpy.count(), 0); 7239 QCOMPARE(rowsInsertedSpy.count(), 0); 7240 QCOMPARE(persistentStateChangedSpy.count(), 0); 7241 QCOMPARE(dataChangedSpy.count(), 0); 7242 QCOMPARE(newTrackByNameInListSpy.count(), 0); 7243 QCOMPARE(newEntryInListSpy.count(), 0); 7244 7245 auto firstTrackId = myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track1"), QStringLiteral("artist1"), QStringLiteral("album2"), 1, 1); 7246 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track}, 7247 {DataTypes::DatabaseIdRole, firstTrackId}}, {}, {}}}, {}, {}); 7248 7249 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); 7250 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 7251 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 1); 7252 QCOMPARE(rowsRemovedSpy.count(), 0); 7253 QCOMPARE(rowsMovedSpy.count(), 0); 7254 QCOMPARE(rowsInsertedSpy.count(), 1); 7255 QCOMPARE(persistentStateChangedSpy.count(), 1); 7256 QCOMPARE(dataChangedSpy.count(), 0); 7257 QCOMPARE(newTrackByNameInListSpy.count(), 0); 7258 QCOMPARE(newEntryInListSpy.count(), 1); 7259 7260 QCOMPARE(dataChangedSpy.wait(), true); 7261 7262 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); 7263 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 7264 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 1); 7265 QCOMPARE(rowsRemovedSpy.count(), 0); 7266 QCOMPARE(rowsMovedSpy.count(), 0); 7267 QCOMPARE(rowsInsertedSpy.count(), 1); 7268 QCOMPARE(persistentStateChangedSpy.count(), 1); 7269 QCOMPARE(dataChangedSpy.count(), 1); 7270 QCOMPARE(newTrackByNameInListSpy.count(), 0); 7271 QCOMPARE(newEntryInListSpy.count(), 1); 7272 7273 auto secondTrackId = myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track2"), QStringLiteral("artist1"), QStringLiteral("album2"), 2, 1); 7274 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track}, 7275 {DataTypes::DatabaseIdRole, secondTrackId}}, {}, {}}}, {}, {}); 7276 7277 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); 7278 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 7279 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 2); 7280 QCOMPARE(rowsRemovedSpy.count(), 0); 7281 QCOMPARE(rowsMovedSpy.count(), 0); 7282 QCOMPARE(rowsInsertedSpy.count(), 2); 7283 QCOMPARE(persistentStateChangedSpy.count(), 2); 7284 QCOMPARE(dataChangedSpy.count(), 1); 7285 QCOMPARE(newTrackByNameInListSpy.count(), 0); 7286 QCOMPARE(newEntryInListSpy.count(), 2); 7287 7288 QCOMPARE(dataChangedSpy.wait(), true); 7289 7290 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); 7291 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 7292 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 2); 7293 QCOMPARE(rowsRemovedSpy.count(), 0); 7294 QCOMPARE(rowsMovedSpy.count(), 0); 7295 QCOMPARE(rowsInsertedSpy.count(), 2); 7296 QCOMPARE(persistentStateChangedSpy.count(), 2); 7297 QCOMPARE(dataChangedSpy.count(), 2); 7298 QCOMPARE(newTrackByNameInListSpy.count(), 0); 7299 QCOMPARE(newEntryInListSpy.count(), 2); 7300 7301 auto thirdTrackId = myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track3"), QStringLiteral("artist1"), QStringLiteral("album2"), 3, 1); 7302 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track}, 7303 {DataTypes::DatabaseIdRole, thirdTrackId}}, {}, {}}}, {}, {}); 7304 7305 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); 7306 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 7307 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 3); 7308 QCOMPARE(rowsRemovedSpy.count(), 0); 7309 QCOMPARE(rowsMovedSpy.count(), 0); 7310 QCOMPARE(rowsInsertedSpy.count(), 3); 7311 QCOMPARE(persistentStateChangedSpy.count(), 3); 7312 QCOMPARE(dataChangedSpy.count(), 2); 7313 QCOMPARE(newTrackByNameInListSpy.count(), 0); 7314 QCOMPARE(newEntryInListSpy.count(), 3); 7315 7316 QCOMPARE(dataChangedSpy.wait(), true); 7317 7318 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); 7319 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 7320 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 3); 7321 QCOMPARE(rowsRemovedSpy.count(), 0); 7322 QCOMPARE(rowsMovedSpy.count(), 0); 7323 QCOMPARE(rowsInsertedSpy.count(), 3); 7324 QCOMPARE(persistentStateChangedSpy.count(), 3); 7325 QCOMPARE(dataChangedSpy.count(), 3); 7326 QCOMPARE(newTrackByNameInListSpy.count(), 0); 7327 QCOMPARE(newEntryInListSpy.count(), 3); 7328 7329 myPlayListProxyModel.setShufflePlayList(true); 7330 7331 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); 7332 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 7333 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 3); 7334 QCOMPARE(rowsRemovedSpy.count(), 0); 7335 QCOMPARE(rowsMovedSpy.count(), 0); 7336 QCOMPARE(rowsInsertedSpy.count(), 3); 7337 QCOMPARE(persistentStateChangedSpy.count(), 4); 7338 QCOMPARE(dataChangedSpy.count(), 3); 7339 QCOMPARE(newTrackByNameInListSpy.count(), 0); 7340 QCOMPARE(newEntryInListSpy.count(), 3); 7341 7342 myPlayListProxyModel.moveRow(2, 0); 7343 7344 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); 7345 QCOMPARE(rowsAboutToBeMovedSpy.count(), 1); 7346 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 3); 7347 QCOMPARE(rowsRemovedSpy.count(), 0); 7348 QCOMPARE(rowsMovedSpy.count(), 1); 7349 QCOMPARE(rowsInsertedSpy.count(), 3); 7350 QCOMPARE(persistentStateChangedSpy.count(), 4); 7351 QCOMPARE(dataChangedSpy.count(), 3); 7352 QCOMPARE(newTrackByNameInListSpy.count(), 0); 7353 QCOMPARE(newEntryInListSpy.count(), 3); 7354 } 7355 7356 void MediaPlayListProxyModelTest::testMoveCurrentTrack() 7357 { 7358 MediaPlayList myPlayList; 7359 QAbstractItemModelTester testModel(&myPlayList); 7360 MediaPlayListProxyModel myPlayListProxyModel; 7361 myPlayListProxyModel.setPlayListModel(&myPlayList); 7362 QAbstractItemModelTester testProxyModel(&myPlayListProxyModel); 7363 DatabaseInterface myDatabaseContent; 7364 TracksListener myListener(&myDatabaseContent); 7365 7366 QSignalSpy rowsAboutToBeMovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsAboutToBeMoved); 7367 QSignalSpy rowsMovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsMoved); 7368 7369 myDatabaseContent.init(QStringLiteral("testDbDirectContent")); 7370 7371 connect(&myListener, &TracksListener::trackHasChanged, 7372 &myPlayList, &MediaPlayList::trackChanged, 7373 Qt::QueuedConnection); 7374 connect(&myListener, &TracksListener::tracksListAdded, 7375 &myPlayList, &MediaPlayList::tracksListAdded, 7376 Qt::QueuedConnection); 7377 connect(&myPlayList, &MediaPlayList::newTrackByNameInList, 7378 &myListener, &TracksListener::trackByNameInList, 7379 Qt::QueuedConnection); 7380 connect(&myPlayList, &MediaPlayList::newEntryInList, 7381 &myListener, &TracksListener::newEntryInList, 7382 Qt::QueuedConnection); 7383 connect(&myPlayList, &MediaPlayList::newUrlInList, 7384 &myListener, &TracksListener::newUrlInList, 7385 Qt::QueuedConnection); 7386 connect(&myDatabaseContent, &DatabaseInterface::tracksAdded, 7387 &myListener, &TracksListener::tracksAdded); 7388 7389 myDatabaseContent.insertTracksList(mNewTracks, mNewCovers); 7390 7391 const auto firstTrackId = myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track1"), QStringLiteral("artist1"), QStringLiteral("album2"), 1, 1); 7392 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track}, 7393 {DataTypes::DatabaseIdRole, firstTrackId}}, {}, {}}}, {}, {}); 7394 7395 const auto secondTrackId = myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track2"), QStringLiteral("artist1"), QStringLiteral("album2"), 2, 1); 7396 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track}, 7397 {DataTypes::DatabaseIdRole, secondTrackId}}, {}, {}}}, {}, {}); 7398 7399 const auto thirdTrackId = myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track3"), QStringLiteral("artist1"), QStringLiteral("album2"), 3, 1); 7400 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track}, 7401 {DataTypes::DatabaseIdRole, thirdTrackId}}, {}, {}}}, {}, {}); 7402 7403 const auto fourthTrackId = myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track4"), QStringLiteral("artist1"), QStringLiteral("album2"), 3, 1); 7404 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track}, 7405 {DataTypes::DatabaseIdRole, fourthTrackId}}, {}, {}}}, {}, {}); 7406 7407 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 7408 QCOMPARE(rowsMovedSpy.count(), 0); 7409 7410 // Set current track index 7411 myPlayListProxyModel.switchTo(1); 7412 7413 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); 7414 QCOMPARE(rowsMovedSpy.count(), 0); 7415 QCOMPARE(myPlayListProxyModel.previousTrack().row(), 0); 7416 QCOMPARE(myPlayListProxyModel.currentTrack().row(), 1); 7417 QCOMPARE(myPlayListProxyModel.nextTrack().row(), 2); 7418 7419 // Move current track 7420 myPlayListProxyModel.moveRow(1, 2); 7421 7422 QCOMPARE(rowsAboutToBeMovedSpy.count(), 1); 7423 QCOMPARE(rowsMovedSpy.count(), 1); 7424 QCOMPARE(myPlayListProxyModel.previousTrack().row(), 1); 7425 QCOMPARE(myPlayListProxyModel.currentTrack().row(), 2); 7426 QCOMPARE(myPlayListProxyModel.nextTrack().row(), 3); 7427 7428 // Move previous track to after current track 7429 myPlayListProxyModel.moveRow(1, 3); 7430 7431 QCOMPARE(rowsAboutToBeMovedSpy.count(), 2); 7432 QCOMPARE(rowsMovedSpy.count(), 2); 7433 QCOMPARE(myPlayListProxyModel.previousTrack().row(), 0); 7434 QCOMPARE(myPlayListProxyModel.currentTrack().row(), 1); 7435 QCOMPARE(myPlayListProxyModel.nextTrack().row(), 2); 7436 7437 // Move next track to before current track 7438 myPlayListProxyModel.moveRow(2, 0); 7439 7440 QCOMPARE(rowsAboutToBeMovedSpy.count(), 3); 7441 QCOMPARE(rowsMovedSpy.count(), 3); 7442 QCOMPARE(myPlayListProxyModel.previousTrack().row(), 1); 7443 QCOMPARE(myPlayListProxyModel.currentTrack().row(), 2); 7444 QCOMPARE(myPlayListProxyModel.nextTrack().row(), 3); 7445 7446 // Move into position of current track (from below) 7447 myPlayListProxyModel.moveRow(0, 2); 7448 7449 QCOMPARE(rowsAboutToBeMovedSpy.count(), 4); 7450 QCOMPARE(rowsMovedSpy.count(), 4); 7451 QCOMPARE(myPlayListProxyModel.previousTrack().row(), 0); 7452 QCOMPARE(myPlayListProxyModel.currentTrack().row(), 1); 7453 QCOMPARE(myPlayListProxyModel.nextTrack().row(), 2); 7454 7455 // Move into position of current track (from above) 7456 myPlayListProxyModel.moveRow(3, 1); 7457 7458 QCOMPARE(rowsAboutToBeMovedSpy.count(), 5); 7459 QCOMPARE(rowsMovedSpy.count(), 5); 7460 QCOMPARE(myPlayListProxyModel.previousTrack().row(), 1); 7461 QCOMPARE(myPlayListProxyModel.currentTrack().row(), 2); 7462 QCOMPARE(myPlayListProxyModel.nextTrack().row(), 3); 7463 7464 // Move current track to start 7465 myPlayListProxyModel.moveRow(2, 0); 7466 7467 QCOMPARE(rowsAboutToBeMovedSpy.count(), 6); 7468 QCOMPARE(rowsMovedSpy.count(), 6); 7469 QCOMPARE(myPlayListProxyModel.previousTrack().isValid(), false); 7470 QCOMPARE(myPlayListProxyModel.currentTrack().row(), 0); 7471 QCOMPARE(myPlayListProxyModel.nextTrack().row(), 1); 7472 7473 // Move current track to end 7474 myPlayListProxyModel.moveRow(0, 3); 7475 7476 QCOMPARE(rowsAboutToBeMovedSpy.count(), 7); 7477 QCOMPARE(rowsMovedSpy.count(), 7); 7478 QCOMPARE(myPlayListProxyModel.previousTrack().row(), 2); 7479 QCOMPARE(myPlayListProxyModel.currentTrack().row(), 3); 7480 QCOMPARE(myPlayListProxyModel.nextTrack().isValid(), false); 7481 } 7482 7483 QTEST_GUILESS_MAIN(MediaPlayListProxyModelTest) 7484 7485 7486 #include "moc_mediaplaylistproxymodeltest.cpp"