diff --git a/autotests/alltracksproxymodeltest.cpp b/autotests/alltracksproxymodeltest.cpp --- a/autotests/alltracksproxymodeltest.cpp +++ b/autotests/alltracksproxymodeltest.cpp @@ -91,7 +91,7 @@ QCOMPARE(endRemoveRowsSpy.count(), 0); QCOMPARE(dataChangedSpy.count(), 0); - musicDb.insertTracksList(mNewTracks, mNewCovers, QStringLiteral("autoTest")); + musicDb.insertTracksList(mNewTracks, mNewCovers); QCOMPARE(beginInsertRowsSpy.count(), 1); QCOMPARE(endInsertRowsSpy.count(), 1); @@ -155,7 +155,7 @@ QCOMPARE(endRemoveRowsSpy.count(), 0); QCOMPARE(dataChangedSpy.count(), 0); - musicDb.insertTracksList(mNewTracks, mNewCovers, QStringLiteral("autoTest")); + musicDb.insertTracksList(mNewTracks, mNewCovers); QCOMPARE(beginInsertRowsSpy.count(), 1); QCOMPARE(endInsertRowsSpy.count(), 1); @@ -227,7 +227,7 @@ QCOMPARE(endRemoveRowsSpy.count(), 0); QCOMPARE(dataChangedSpy.count(), 0); - musicDb.insertTracksList(mNewTracks, mNewCovers, QStringLiteral("autoTest")); + musicDb.insertTracksList(mNewTracks, mNewCovers); QCOMPARE(beginInsertRowsSpy.count(), 1); QCOMPARE(endInsertRowsSpy.count(), 1); @@ -246,7 +246,7 @@ auto newTracks = QList(); newTracks.push_back(newTrack); - musicDb.insertTracksList(newTracks, mNewCovers, QStringLiteral("autoTest")); + musicDb.insertTracksList(newTracks, mNewCovers); QCOMPARE(beginInsertRowsSpy.count(), 2); QCOMPARE(endInsertRowsSpy.count(), 2); @@ -301,7 +301,7 @@ newFiles.push_back(oneTrack.resourceURI()); } - musicDb.insertTracksList(mNewTracks, mNewCovers, QStringLiteral("autoTest")); + musicDb.insertTracksList(mNewTracks, mNewCovers); QCOMPARE(beginInsertRowsSpy.count(), 1); QCOMPARE(endInsertRowsSpy.count(), 1); @@ -329,7 +329,7 @@ newFiles2.push_back(oneTrack.resourceURI()); } - musicDb.insertTracksList(newTracks, newCovers, QStringLiteral("autoTest")); + musicDb.insertTracksList(newTracks, newCovers); QCOMPARE(beginInsertRowsSpy.count(), 2); QCOMPARE(endInsertRowsSpy.count(), 2); @@ -378,7 +378,7 @@ QCOMPARE(endRemoveRowsSpy.count(), 0); QCOMPARE(dataChangedSpy.count(), 0); - musicDb.insertTracksList(mNewTracks, mNewCovers, QStringLiteral("autoTest")); + musicDb.insertTracksList(mNewTracks, mNewCovers); QCOMPARE(beginInsertRowsSpy.count(), 1); QCOMPARE(endInsertRowsSpy.count(), 1); @@ -396,7 +396,7 @@ auto newTracks = QList(); newTracks.push_back(newTrack); - musicDb.insertTracksList(newTracks, mNewCovers, QStringLiteral("autoTest")); + musicDb.insertTracksList(newTracks, mNewCovers); QCOMPARE(beginInsertRowsSpy.count(), 1); QCOMPARE(endInsertRowsSpy.count(), 1); @@ -487,7 +487,7 @@ QCOMPARE(endRemoveRowsSpy.count(), 0); QCOMPARE(dataChangedSpy.count(), 0); - musicDb.insertTracksList(mNewTracks, mNewCovers, QStringLiteral("autoTest")); + musicDb.insertTracksList(mNewTracks, mNewCovers); QCOMPARE(beginInsertRowsSpy.count(), 1); QCOMPARE(endInsertRowsSpy.count(), 1); @@ -506,7 +506,7 @@ auto newTracks = QList(); newTracks.push_back(newTrack); - musicDb.insertTracksList(newTracks, mNewCovers, QStringLiteral("autoTest")); + musicDb.insertTracksList(newTracks, mNewCovers); QCOMPARE(beginInsertRowsSpy.count(), 2); QCOMPARE(endInsertRowsSpy.count(), 2); diff --git a/autotests/databaseinterfacetest.cpp b/autotests/databaseinterfacetest.cpp --- a/autotests/databaseinterfacetest.cpp +++ b/autotests/databaseinterfacetest.cpp @@ -128,7 +128,7 @@ auto newCovers = mNewCovers; newCovers[QStringLiteral("file:///$23")] = QUrl::fromLocalFile(QStringLiteral("album3")); - musicDb.insertTracksList(newTracks, newCovers, QStringLiteral("autoTest")); + musicDb.insertTracksList(newTracks, newCovers); musicDbTrackAddedSpy.wait(300); @@ -222,7 +222,7 @@ auto newCovers = mNewCovers; newCovers[QStringLiteral("file:///$24")] = QUrl::fromLocalFile(QStringLiteral("album4")); - musicDb.insertTracksList(newTracks, newCovers, QStringLiteral("autoTest")); + musicDb.insertTracksList(newTracks, newCovers); musicDbTrackAddedSpy.wait(300); @@ -315,7 +315,7 @@ auto newCovers = mNewCovers; newCovers[QStringLiteral("file:///$26")] = QUrl::fromLocalFile(QStringLiteral("album4")); - musicDb.insertTracksList(newTracks, newCovers, QStringLiteral("autoTest")); + musicDb.insertTracksList(newTracks, newCovers); musicDbTrackAddedSpy.wait(300); @@ -405,7 +405,7 @@ auto newCovers = mNewCovers; newCovers[QStringLiteral("file:///$26")] = QUrl::fromLocalFile(QStringLiteral("album4")); - musicDb.insertTracksList(newTracks, newCovers, QStringLiteral("autoTest")); + musicDb.insertTracksList(newTracks, newCovers); musicDbTrackAddedSpy.wait(300); @@ -495,7 +495,7 @@ auto newCovers = mNewCovers; newCovers[QStringLiteral("file:///$26")] = QUrl::fromLocalFile(QStringLiteral("album4")); - musicDb.insertTracksList(newTracks, newCovers, QStringLiteral("autoTest")); + musicDb.insertTracksList(newTracks, newCovers); musicDbTrackAddedSpy.wait(300); @@ -541,7 +541,7 @@ newCovers = mNewCovers; newCovers[QStringLiteral("file:///autre/$27")] = QUrl::fromLocalFile(QStringLiteral("album4")); - musicDb.insertTracksList(newTracks, newCovers, QStringLiteral("autoTest")); + musicDb.insertTracksList(newTracks, newCovers); musicDbTrackAddedSpy.wait(300); @@ -612,7 +612,7 @@ newCovers[QStringLiteral("file:///$23")] = QUrl::fromLocalFile(QStringLiteral("album3")); newCovers[QStringLiteral("file:///$20")] = QUrl::fromLocalFile(QStringLiteral("album3")); - musicDb.insertTracksList(newTracks, newCovers, QStringLiteral("autoTest")); + musicDb.insertTracksList(newTracks, newCovers); musicDbTrackAddedSpy.wait(300); @@ -734,7 +734,7 @@ newCovers[QStringLiteral("file:///$20")] = QUrl::fromLocalFile(QStringLiteral("album3")); newCovers[QStringLiteral("file:///$21")] = QUrl::fromLocalFile(QStringLiteral("album3")); - musicDb.insertTracksList(newTracks, newCovers, QStringLiteral("autoTest")); + musicDb.insertTracksList(newTracks, newCovers); musicDbTrackAddedSpy.wait(300); @@ -874,7 +874,7 @@ newCovers[QStringLiteral("file:///$19")] = QUrl::fromLocalFile(QStringLiteral("album3")); newCovers[QStringLiteral("file:///$20")] = QUrl::fromLocalFile(QStringLiteral("album3")); - musicDb.insertTracksList(newTracks, newCovers, QStringLiteral("autoTest")); + musicDb.insertTracksList(newTracks, newCovers); musicDbTrackAddedSpy.wait(300); @@ -958,28 +958,28 @@ musicDb.init(QStringLiteral("testDb"), databaseFile.fileName()); - musicDb.insertTracksList(mNewTracks, mNewCovers, QStringLiteral("autoTest")); + musicDb.insertTracksList(mNewTracks, mNewCovers); musicDbTrackAddedSpy.wait(300); QCOMPARE(musicDb.allAlbumsData().count(), 5); QCOMPARE(musicDbErrorSpy.count(), 0); - musicDb.insertTracksList(mNewTracks, mNewCovers, QStringLiteral("autoTest")); + musicDb.insertTracksList(mNewTracks, mNewCovers); musicDbTrackAddedSpy.wait(300); QCOMPARE(musicDb.allAlbumsData().count(), 5); QCOMPARE(musicDbErrorSpy.count(), 0); - musicDb.insertTracksList(mNewTracks, mNewCovers, QStringLiteral("autoTest")); + musicDb.insertTracksList(mNewTracks, mNewCovers); musicDbTrackAddedSpy.wait(300); QCOMPARE(musicDb.allAlbumsData().count(), 5); QCOMPARE(musicDbErrorSpy.count(), 0); - musicDb.insertTracksList(mNewTracks, mNewCovers, QStringLiteral("autoTest")); + musicDb.insertTracksList(mNewTracks, mNewCovers); musicDbTrackAddedSpy.wait(300); @@ -1010,7 +1010,7 @@ musicDb.init(QStringLiteral("testDb1"), myTempDatabase.fileName()); - musicDb.insertTracksList(mNewTracks, mNewCovers, QStringLiteral("autoTest")); + musicDb.insertTracksList(mNewTracks, mNewCovers); musicDbTrackAddedSpy.wait(300); @@ -1033,7 +1033,7 @@ musicDb.init(QStringLiteral("testDb2"), myTempDatabase.fileName()); - musicDb.insertTracksList(mNewTracks, mNewCovers, QStringLiteral("autoTest")); + musicDb.insertTracksList(mNewTracks, mNewCovers); musicDbTrackAddedSpy.wait(300); @@ -1109,7 +1109,7 @@ auto newCovers = mNewCovers; newCovers[QStringLiteral("file:///$23")] = QUrl::fromLocalFile(QStringLiteral("album3")); - musicDb.insertTracksList(allNewTracks, newCovers, QStringLiteral("autoTest")); + musicDb.insertTracksList(allNewTracks, newCovers); musicDbTrackAddedSpy.wait(300); @@ -1204,7 +1204,7 @@ auto newCovers = mNewCovers; newCovers[QStringLiteral("file:///$23")] = QUrl::fromLocalFile(QStringLiteral("album3")); - musicDb.insertTracksList(allNewTracks, newCovers, QStringLiteral("autoTest")); + musicDb.insertTracksList(allNewTracks, newCovers); musicDbTrackAddedSpy.wait(300); @@ -1258,10 +1258,10 @@ musicDb.init(QStringLiteral("testDb")); - musicDb.insertTracksList(mNewTracks, mNewCovers, QStringLiteral("autoTest")); - musicDb.insertTracksList(mNewTracks, mNewCovers, QStringLiteral("autoTest")); - musicDb.insertTracksList(mNewTracks, mNewCovers, QStringLiteral("autoTest")); - musicDb.insertTracksList(mNewTracks, mNewCovers, QStringLiteral("autoTest")); + musicDb.insertTracksList(mNewTracks, mNewCovers); + musicDb.insertTracksList(mNewTracks, mNewCovers); + musicDb.insertTracksList(mNewTracks, mNewCovers); + musicDb.insertTracksList(mNewTracks, mNewCovers); musicDbTrackAddedSpy.wait(300); @@ -1344,10 +1344,10 @@ QSignalSpy musicDbAlbumAddedSpy(&musicDb, &DatabaseInterface::albumsAdded); QSignalSpy musicDbTrackAddedSpy(&musicDb, &DatabaseInterface::tracksAdded); - musicDb.insertTracksList(mNewTracks, mNewCovers, QStringLiteral("autoTest")); - musicDb.insertTracksList(mNewTracks, mNewCovers, QStringLiteral("autoTest")); - musicDb.insertTracksList(mNewTracks, mNewCovers, QStringLiteral("autoTest")); - musicDb.insertTracksList(mNewTracks, mNewCovers, QStringLiteral("autoTest")); + musicDb.insertTracksList(mNewTracks, mNewCovers); + musicDb.insertTracksList(mNewTracks, mNewCovers); + musicDb.insertTracksList(mNewTracks, mNewCovers); + musicDb.insertTracksList(mNewTracks, mNewCovers); musicDbTrackAddedSpy.wait(300); @@ -1547,7 +1547,7 @@ QCOMPARE(musicDbAlbumAddedSpy.count(), 0); QCOMPARE(musicDbTrackAddedSpy.count(), 0); - musicDb.insertTracksList(mNewTracks, mNewCovers, QStringLiteral("autoTest")); + musicDb.insertTracksList(mNewTracks, mNewCovers); musicDbTrackAddedSpy.wait(300); @@ -1744,7 +1744,7 @@ QCOMPARE(musicDbAlbumAddedSpy.count(), 0); QCOMPARE(musicDbTrackAddedSpy.count(), 0); - musicDb.insertTracksList(mNewTracks, mNewCovers, QStringLiteral("autoTest")); + musicDb.insertTracksList(mNewTracks, mNewCovers); musicDbTrackAddedSpy.wait(300); @@ -1938,7 +1938,7 @@ auto newCovers = mNewCovers; newCovers[QStringLiteral("file:///$23")] = QUrl::fromLocalFile(QStringLiteral("image$19")); - musicDb.insertTracksList(newTracks, newCovers, QStringLiteral("autoTest")); + musicDb.insertTracksList(newTracks, newCovers); musicDbTrackAddedSpy.wait(300); @@ -1960,7 +1960,7 @@ QSignalSpy musicDbAlbumAddedSpy(&musicDb, &DatabaseInterface::albumsAdded); QSignalSpy musicDbTrackAddedSpy(&musicDb, &DatabaseInterface::tracksAdded); - musicDb.insertTracksList(mNewTracks, mNewCovers, QStringLiteral("autoTest")); + musicDb.insertTracksList(mNewTracks, mNewCovers); musicDbTrackAddedSpy.wait(300); @@ -2016,7 +2016,7 @@ QCOMPARE(musicDbTrackModifiedSpy.count(), 0); QCOMPARE(musicDbDatabaseErrorSpy.count(), 0); - musicDb.insertTracksList(mNewTracks, mNewCovers, QStringLiteral("autoTest")); + musicDb.insertTracksList(mNewTracks, mNewCovers); musicDbTrackAddedSpy.wait(300); @@ -2132,7 +2132,7 @@ QCOMPARE(musicDbTrackModifiedSpy.count(), 0); QCOMPARE(musicDbDatabaseErrorSpy.count(), 0); - musicDb.insertTracksList(mNewTracks, mNewCovers, QStringLiteral("autoTest")); + musicDb.insertTracksList(mNewTracks, mNewCovers); musicDbTrackAddedSpy.wait(300); @@ -2215,7 +2215,7 @@ firstTrack[DatabaseInterface::DatabaseIdRole] = 0; - musicDb.insertTracksList({MusicAudioTrack::trackFromData(firstTrack)}, mNewCovers, QStringLiteral("autoTest")); + musicDb.insertTracksList({MusicAudioTrack::trackFromData(firstTrack)}, mNewCovers); musicDbTrackAddedSpy.wait(300); @@ -2288,7 +2288,7 @@ QCOMPARE(musicDbTrackModifiedSpy.count(), 0); QCOMPARE(musicDbDatabaseErrorSpy.count(), 0); - musicDb.insertTracksList(mNewTracks, mNewCovers, QStringLiteral("autoTest")); + musicDb.insertTracksList(mNewTracks, mNewCovers); musicDbTrackAddedSpy.wait(300); @@ -2390,7 +2390,7 @@ QCOMPARE(musicDbTrackModifiedSpy.count(), 0); QCOMPARE(musicDbDatabaseErrorSpy.count(), 0); - musicDb.insertTracksList(mNewTracks, mNewCovers, QStringLiteral("autoTest")); + musicDb.insertTracksList(mNewTracks, mNewCovers); musicDbTrackAddedSpy.wait(300); @@ -2472,7 +2472,7 @@ QCOMPARE(musicDbTrackModifiedSpy.count(), 0); QCOMPARE(musicDbDatabaseErrorSpy.count(), 0); - musicDb.insertTracksList(mNewTracks, mNewCovers, QStringLiteral("autoTest")); + musicDb.insertTracksList(mNewTracks, mNewCovers); musicDbTrackAddedSpy.wait(300); @@ -2501,7 +2501,7 @@ auto newCovers = mNewCovers; newCovers[QStringLiteral("file:///$23")] = QUrl::fromLocalFile(QStringLiteral("album3")); - musicDb.insertTracksList(newTracks, newCovers, QStringLiteral("autoTest")); + musicDb.insertTracksList(newTracks, newCovers); musicDbTrackAddedSpy.wait(300); @@ -2565,7 +2565,7 @@ auto newCovers = mNewCovers; newCovers[QStringLiteral("file:///$23")] = QUrl::fromLocalFile(QStringLiteral("album3")); - musicDb.insertTracksList(newTracks, newCovers, QStringLiteral("autoTest")); + musicDb.insertTracksList(newTracks, newCovers); musicDbTrackAddedSpy.wait(300); @@ -2643,7 +2643,7 @@ auto newCovers2 = mNewCovers; newCovers2[QStringLiteral("file:///$23")] = QUrl::fromLocalFile(QStringLiteral("image$19")); - musicDb.insertTracksList(newTracks2, newCovers2, QStringLiteral("autoTest")); + musicDb.insertTracksList(newTracks2, newCovers2); musicDbTrackAddedSpy.wait(50); @@ -2756,7 +2756,7 @@ auto newCovers = mNewCovers; newCovers[QStringLiteral("file:///$23")] = QUrl::fromLocalFile(QStringLiteral("album3")); - musicDb.insertTracksList(newTracks, newCovers, QStringLiteral("autoTest")); + musicDb.insertTracksList(newTracks, newCovers); musicDbTrackAddedSpy.wait(300); @@ -2835,7 +2835,7 @@ auto newCovers2 = mNewCovers; newCovers2[QStringLiteral("file:///$23")] = QUrl::fromLocalFile(QStringLiteral("album3")); - musicDb.insertTracksList(newTracks2, newCovers2, QStringLiteral("autoTest")); + musicDb.insertTracksList(newTracks2, newCovers2); musicDbTrackAddedSpy.wait(300); @@ -2947,7 +2947,7 @@ auto newCovers = mNewCovers; newCovers[QStringLiteral("file:///$23")] = QUrl::fromLocalFile(QStringLiteral("album3")); - musicDb.insertTracksList(newTracks, newCovers, QStringLiteral("autoTest")); + musicDb.insertTracksList(newTracks, newCovers); musicDbTrackAddedSpy.wait(300); @@ -3027,7 +3027,7 @@ auto newCovers2 = mNewCovers; newCovers2[QStringLiteral("file:///$20")] = QUrl::fromLocalFile(QStringLiteral("album3")); - musicDb.insertTracksList(newTracks2, newCovers2, QStringLiteral("autoTest")); + musicDb.insertTracksList(newTracks2, newCovers2); musicDbTrackAddedSpy.wait(50); @@ -3137,7 +3137,7 @@ QCOMPARE(musicDbTrackModifiedSpy.count(), 0); QCOMPARE(musicDbDatabaseErrorSpy.count(), 0); - musicDb.insertTracksList(mNewTracks, mNewCovers, QStringLiteral("autoTest")); + musicDb.insertTracksList(mNewTracks, mNewCovers); musicDbTrackAddedSpy.wait(300); @@ -3166,7 +3166,7 @@ auto newCovers = mNewCovers; newCovers[QStringLiteral("file:///$23")] = QUrl(); - musicDb.insertTracksList(newTracks, newCovers, QStringLiteral("autoTest")); + musicDb.insertTracksList(newTracks, newCovers); musicDbTrackAddedSpy.wait(300); @@ -3202,7 +3202,7 @@ auto newCovers2 = mNewCovers; newCovers2[QStringLiteral("file:///$23")] = QUrl::fromLocalFile(QStringLiteral("album7")); - musicDb.insertTracksList(newTracks2, newCovers2, QStringLiteral("autoTest")); + musicDb.insertTracksList(newTracks2, newCovers2); musicDbTrackAddedSpy.wait(300); @@ -3261,7 +3261,7 @@ QCOMPARE(musicDbTrackModifiedSpy.count(), 0); QCOMPARE(musicDbDatabaseErrorSpy.count(), 0); - musicDb.insertTracksList(mNewTracks, mNewCovers, QStringLiteral("autoTest")); + musicDb.insertTracksList(mNewTracks, mNewCovers); musicDbTrackAddedSpy.wait(300); @@ -3285,7 +3285,7 @@ {QUrl::fromLocalFile(QStringLiteral("file://image$3"))}, 5, true, QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1"), false}; - musicDb.insertTracksList({modifiedTrack}, mNewCovers, QStringLiteral("autoTest")); + musicDb.insertTracksList({modifiedTrack}, mNewCovers); musicDbTrackAddedSpy.wait(300); @@ -3340,7 +3340,7 @@ QCOMPARE(musicDbTrackModifiedSpy.count(), 0); QCOMPARE(musicDbDatabaseErrorSpy.count(), 0); - musicDb.insertTracksList(mNewTracks, mNewCovers, QStringLiteral("autoTest")); + musicDb.insertTracksList(mNewTracks, mNewCovers); musicDbTrackAddedSpy.wait(300); @@ -3370,7 +3370,7 @@ auto newCovers = mNewCovers; newCovers[QStringLiteral("file:///$23")] = newCover; - musicDb.insertTracksList(newTracks, newCovers, QStringLiteral("autoTest")); + musicDb.insertTracksList(newTracks, newCovers); musicDbTrackAddedSpy.wait(300); @@ -3420,7 +3420,7 @@ QCOMPARE(musicDbTrackModifiedSpy.count(), 0); QCOMPARE(musicDbDatabaseErrorSpy.count(), 0); - musicDb.insertTracksList(mNewTracks, mNewCovers, QStringLiteral("autoTest")); + musicDb.insertTracksList(mNewTracks, mNewCovers); musicDbTrackAddedSpy.wait(300); @@ -3454,7 +3454,7 @@ auto newCovers = mNewCovers; newCovers[QStringLiteral("file:///$23")] = QUrl::fromLocalFile(QStringLiteral("album1")); - musicDb.insertTracksList(newTracks, newCovers, QStringLiteral("autoTest")); + musicDb.insertTracksList(newTracks, newCovers); musicDbTrackAddedSpy.wait(300); @@ -3487,7 +3487,7 @@ musicDb.init(QStringLiteral("testDb"), databaseFile.fileName()); - musicDb.insertTracksList(mNewTracks, mNewCovers, QStringLiteral("autoTest")); + musicDb.insertTracksList(mNewTracks, mNewCovers); musicDbTrackAddedSpy.wait(300); @@ -3536,7 +3536,7 @@ QCOMPARE(musicDbTrackModifiedSpy2.count(), 0); QCOMPARE(musicDbDatabaseErrorSpy2.count(), 0); - musicDb2.insertTracksList(mNewTracks, mNewCovers, QStringLiteral("autoTest")); + musicDb2.insertTracksList(mNewTracks, mNewCovers); musicDbTrackAddedSpy2.wait(300); @@ -3554,196 +3554,6 @@ QCOMPARE(musicDbDatabaseErrorSpy2.count(), 0); } - void testRemovalOfTracksFromInvalidSource() - { - DatabaseInterface musicDb; - - musicDb.init(QStringLiteral("testDb")); - - QSignalSpy musicDbArtistAddedSpy(&musicDb, &DatabaseInterface::artistsAdded); - QSignalSpy musicDbAlbumAddedSpy(&musicDb, &DatabaseInterface::albumsAdded); - QSignalSpy musicDbTrackAddedSpy(&musicDb, &DatabaseInterface::tracksAdded); - QSignalSpy musicDbArtistRemovedSpy(&musicDb, &DatabaseInterface::artistRemoved); - QSignalSpy musicDbAlbumRemovedSpy(&musicDb, &DatabaseInterface::albumRemoved); - QSignalSpy musicDbTrackRemovedSpy(&musicDb, &DatabaseInterface::trackRemoved); - QSignalSpy musicDbAlbumModifiedSpy(&musicDb, &DatabaseInterface::albumModified); - QSignalSpy musicDbTrackModifiedSpy(&musicDb, &DatabaseInterface::trackModified); - QSignalSpy musicDbDatabaseErrorSpy(&musicDb, &DatabaseInterface::databaseError); - - QCOMPARE(musicDb.allAlbumsData().count(), 0); - QCOMPARE(musicDb.allArtistsData().count(), 0); - QCOMPARE(musicDb.allTracksData().count(), 0); - QCOMPARE(musicDbArtistAddedSpy.count(), 0); - QCOMPARE(musicDbAlbumAddedSpy.count(), 0); - QCOMPARE(musicDbTrackAddedSpy.count(), 0); - QCOMPARE(musicDbArtistRemovedSpy.count(), 0); - QCOMPARE(musicDbAlbumRemovedSpy.count(), 0); - QCOMPARE(musicDbTrackRemovedSpy.count(), 0); - QCOMPARE(musicDbAlbumModifiedSpy.count(), 0); - QCOMPARE(musicDbTrackModifiedSpy.count(), 0); - QCOMPARE(musicDbDatabaseErrorSpy.count(), 0); - - musicDb.insertTracksList(mNewTracks, mNewCovers, QStringLiteral("autoTest")); - - musicDbTrackAddedSpy.wait(300); - - QCOMPARE(musicDb.allAlbumsData().count(), 5); - QCOMPARE(musicDb.allArtistsData().count(), 7); - QCOMPARE(musicDb.allTracksData().count(), 22); - QCOMPARE(musicDbArtistAddedSpy.count(), 1); - QCOMPARE(musicDbAlbumAddedSpy.count(), 1); - QCOMPARE(musicDbTrackAddedSpy.count(), 1); - QCOMPARE(musicDbArtistRemovedSpy.count(), 0); - QCOMPARE(musicDbAlbumRemovedSpy.count(), 0); - QCOMPARE(musicDbTrackRemovedSpy.count(), 0); - QCOMPARE(musicDbAlbumModifiedSpy.count(), 0); - QCOMPARE(musicDbTrackModifiedSpy.count(), 0); - QCOMPARE(musicDbDatabaseErrorSpy.count(), 0); - - musicDb.removeAllTracksFromSource(QStringLiteral("autoTestNotValid")); - - QCOMPARE(musicDb.allAlbumsData().count(), 5); - QCOMPARE(musicDb.allArtistsData().count(), 7); - QCOMPARE(musicDb.allTracksData().count(), 22); - QCOMPARE(musicDbArtistAddedSpy.count(), 1); - QCOMPARE(musicDbAlbumAddedSpy.count(), 1); - QCOMPARE(musicDbTrackAddedSpy.count(), 1); - QCOMPARE(musicDbArtistRemovedSpy.count(), 0); - QCOMPARE(musicDbAlbumRemovedSpy.count(), 0); - QCOMPARE(musicDbTrackRemovedSpy.count(), 0); - QCOMPARE(musicDbAlbumModifiedSpy.count(), 0); - QCOMPARE(musicDbTrackModifiedSpy.count(), 0); - QCOMPARE(musicDbDatabaseErrorSpy.count(), 0); - } - - void testRemovalOfTracksFromValidSource() - { - QTemporaryFile databaseFile; - databaseFile.open(); - - qDebug() << "testRemovalOfTracksFromValidSource" << databaseFile.fileName(); - - DatabaseInterface musicDb; - - musicDb.init(QStringLiteral("testDb"), databaseFile.fileName()); - - QSignalSpy musicDbArtistAddedSpy(&musicDb, &DatabaseInterface::artistsAdded); - QSignalSpy musicDbAlbumAddedSpy(&musicDb, &DatabaseInterface::albumsAdded); - QSignalSpy musicDbTrackAddedSpy(&musicDb, &DatabaseInterface::tracksAdded); - QSignalSpy musicDbArtistRemovedSpy(&musicDb, &DatabaseInterface::artistRemoved); - QSignalSpy musicDbAlbumRemovedSpy(&musicDb, &DatabaseInterface::albumRemoved); - QSignalSpy musicDbTrackRemovedSpy(&musicDb, &DatabaseInterface::trackRemoved); - QSignalSpy musicDbAlbumModifiedSpy(&musicDb, &DatabaseInterface::albumModified); - QSignalSpy musicDbTrackModifiedSpy(&musicDb, &DatabaseInterface::trackModified); - QSignalSpy musicDbDatabaseErrorSpy(&musicDb, &DatabaseInterface::databaseError); - - QCOMPARE(musicDb.allAlbumsData().count(), 0); - QCOMPARE(musicDb.allArtistsData().count(), 0); - QCOMPARE(musicDb.allTracksData().count(), 0); - QCOMPARE(musicDbArtistAddedSpy.count(), 0); - QCOMPARE(musicDbAlbumAddedSpy.count(), 0); - QCOMPARE(musicDbTrackAddedSpy.count(), 0); - QCOMPARE(musicDbArtistRemovedSpy.count(), 0); - QCOMPARE(musicDbAlbumRemovedSpy.count(), 0); - QCOMPARE(musicDbTrackRemovedSpy.count(), 0); - QCOMPARE(musicDbAlbumModifiedSpy.count(), 0); - QCOMPARE(musicDbTrackModifiedSpy.count(), 0); - QCOMPARE(musicDbDatabaseErrorSpy.count(), 0); - - musicDb.insertTracksList(mNewTracks, mNewCovers, QStringLiteral("autoTest")); - - musicDbTrackAddedSpy.wait(300); - - QCOMPARE(musicDb.allAlbumsData().count(), 5); - QCOMPARE(musicDb.allArtistsData().count(), 7); - QCOMPARE(musicDb.allTracksData().count(), 22); - QCOMPARE(musicDbArtistAddedSpy.count(), 1); - QCOMPARE(musicDbAlbumAddedSpy.count(), 1); - QCOMPARE(musicDbTrackAddedSpy.count(), 1); - QCOMPARE(musicDbArtistRemovedSpy.count(), 0); - QCOMPARE(musicDbAlbumRemovedSpy.count(), 0); - QCOMPARE(musicDbTrackRemovedSpy.count(), 0); - QCOMPARE(musicDbAlbumModifiedSpy.count(), 0); - QCOMPARE(musicDbTrackModifiedSpy.count(), 0); - QCOMPARE(musicDbDatabaseErrorSpy.count(), 0); - - QList secondNewTracks = { - {true, QStringLiteral("$23"), QStringLiteral("0"), QStringLiteral("track1"), - QStringLiteral("artist6"), QStringLiteral("album7"), QStringLiteral("artist6"), - 1, 1, QTime::fromMSecsSinceStartOfDay(23), {QUrl::fromLocalFile(QStringLiteral("/$23"))}, - QDateTime::fromMSecsSinceEpoch(23), - {QUrl::fromLocalFile(QStringLiteral("file://image$6"))}, 1, false, - QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1"), false}, - {true, QStringLiteral("$24"), QStringLiteral("0"), QStringLiteral("track2"), - QStringLiteral("artist6"), QStringLiteral("album7"), QStringLiteral("artist6"), - 2, 1, QTime::fromMSecsSinceStartOfDay(24), {QUrl::fromLocalFile(QStringLiteral("/$24"))}, - QDateTime::fromMSecsSinceEpoch(24), - {QUrl::fromLocalFile(QStringLiteral("file://image$6"))}, 2, false, - QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1"), false}, - {true, QStringLiteral("$25"), QStringLiteral("0"), QStringLiteral("track3"), - QStringLiteral("artist6"), QStringLiteral("album7"), QStringLiteral("artist6"), - 3, 1, QTime::fromMSecsSinceStartOfDay(25), {QUrl::fromLocalFile(QStringLiteral("/$25"))}, - QDateTime::fromMSecsSinceEpoch(25), - {QUrl::fromLocalFile(QStringLiteral("file://image$6"))}, 3, false, - QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1"), false}, - {true, QStringLiteral("$26"), QStringLiteral("0"), QStringLiteral("track4"), - QStringLiteral("artist6"), QStringLiteral("album7"), QStringLiteral("artist6"), - 4, 1, QTime::fromMSecsSinceStartOfDay(26), {QUrl::fromLocalFile(QStringLiteral("/$26"))}, - QDateTime::fromMSecsSinceEpoch(26), - {QUrl::fromLocalFile(QStringLiteral("file://image$6"))}, 4, false, - QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1"), false}, - {true, QStringLiteral("$27"), QStringLiteral("0"), QStringLiteral("track5"), - QStringLiteral("artist6"), QStringLiteral("album7"), QStringLiteral("artist6"), - 5, 1, QTime::fromMSecsSinceStartOfDay(27), {QUrl::fromLocalFile(QStringLiteral("/$27"))}, - QDateTime::fromMSecsSinceEpoch(27), - {QUrl::fromLocalFile(QStringLiteral("file://image$6"))}, 5, false, - QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1"), false}, - {true, QStringLiteral("$28"), QStringLiteral("0"), QStringLiteral("track6"), - QStringLiteral("artist6"), QStringLiteral("album7"), QStringLiteral("artist6"), - 6, 1, QTime::fromMSecsSinceStartOfDay(28), {QUrl::fromLocalFile(QStringLiteral("/$28"))}, - QDateTime::fromMSecsSinceEpoch(28), - {QUrl::fromLocalFile(QStringLiteral("file://image$6"))}, 6, true, - QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1"), false}, - {true, QStringLiteral("$29"), QStringLiteral("0"), QStringLiteral("track2"), - QStringLiteral("artist2"), QStringLiteral("album1"), QStringLiteral("Various Artists"), - 2, 2, QTime::fromMSecsSinceStartOfDay(29), {QUrl::fromLocalFile(QStringLiteral("/$29"))}, - QDateTime::fromMSecsSinceEpoch(29), - {QUrl::fromLocalFile(QStringLiteral("file://image$2"))}, 2, false, - QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1"), false}, - }; - - musicDb.insertTracksList(secondNewTracks, mNewCovers, QStringLiteral("autoTestSource2")); - - musicDbTrackAddedSpy.wait(300); - - QCOMPARE(musicDb.allAlbumsData().count(), 6); - QCOMPARE(musicDb.allArtistsData().count(), 8); - QCOMPARE(musicDb.allTracksData().count(), 28); - QCOMPARE(musicDbArtistAddedSpy.count(), 2); - QCOMPARE(musicDbAlbumAddedSpy.count(), 2); - QCOMPARE(musicDbTrackAddedSpy.count(), 2); - QCOMPARE(musicDbArtistRemovedSpy.count(), 0); - QCOMPARE(musicDbAlbumRemovedSpy.count(), 0); - QCOMPARE(musicDbTrackRemovedSpy.count(), 0); - QCOMPARE(musicDbAlbumModifiedSpy.count(), 1); - QCOMPARE(musicDbTrackModifiedSpy.count(), 4); - QCOMPARE(musicDbDatabaseErrorSpy.count(), 0); - - musicDb.removeAllTracksFromSource(QStringLiteral("autoTest")); - - QCOMPARE(musicDb.allAlbumsData().count(), 2); - QCOMPARE(musicDb.allArtistsData().count(), 3); - QCOMPARE(musicDb.allTracksData().count(), 7); - QCOMPARE(musicDbArtistAddedSpy.count(), 2); - QCOMPARE(musicDbAlbumAddedSpy.count(), 2); - QCOMPARE(musicDbTrackAddedSpy.count(), 2); - QCOMPARE(musicDbArtistRemovedSpy.count(), 5); - QCOMPARE(musicDbAlbumRemovedSpy.count(), 4); - QCOMPARE(musicDbTrackRemovedSpy.count(), 23); - QCOMPARE(musicDbAlbumModifiedSpy.count(), 2); - QCOMPARE(musicDbTrackModifiedSpy.count(), 4); - QCOMPARE(musicDbDatabaseErrorSpy.count(), 0); - } void testAddAlbumsSameName() { @@ -3824,7 +3634,7 @@ QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1"), false}, }; - musicDb.insertTracksList(newTracks, mNewCovers, QStringLiteral("autoTestSource2")); + musicDb.insertTracksList(newTracks, mNewCovers); musicDbTrackAddedSpy.wait(100); @@ -3890,7 +3700,7 @@ auto newCovers = mNewCovers; newCovers[QStringLiteral("file:///$23")] = QUrl::fromLocalFile(QStringLiteral("album3")); - musicDb.insertTracksList(newTracks, newCovers, QStringLiteral("autoTest")); + musicDb.insertTracksList(newTracks, newCovers); musicDbTrackAddedSpy.wait(300); @@ -3938,7 +3748,7 @@ auto newCovers2 = mNewCovers; newCovers2[QStringLiteral("file:///$23")] = QUrl::fromLocalFile(QStringLiteral("album3")); - musicDb.insertTracksList(newTracks2, newCovers2, QStringLiteral("autoTest")); + musicDb.insertTracksList(newTracks2, newCovers2); musicDbTrackAddedSpy.wait(300); @@ -4003,7 +3813,7 @@ newCovers[QStringLiteral("file:///$23")] = QUrl::fromLocalFile(QStringLiteral("album3")); newCovers[QStringLiteral("file:///$20")] = QUrl::fromLocalFile(QStringLiteral("album3")); - musicDb.insertTracksList(newTracks, newCovers, QStringLiteral("autoTest")); + musicDb.insertTracksList(newTracks, newCovers); musicDbTrackAddedSpy.wait(300); @@ -4029,7 +3839,7 @@ {QUrl::fromLocalFile(QStringLiteral("album3"))}, 5, true, QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1"), true}}; - musicDb.insertTracksList(newTracks2, newCovers, QStringLiteral("autoTest")); + musicDb.insertTracksList(newTracks2, newCovers); musicDbTrackAddedSpy.wait(300); @@ -4164,7 +3974,7 @@ newCovers[QStringLiteral("file:///album8/$22")] = QUrl::fromLocalFile(QStringLiteral("album8")); newCovers[QStringLiteral("file:///album8/$23")] = QUrl::fromLocalFile(QStringLiteral("album8")); - musicDb.insertTracksList(newTracks, newCovers, QStringLiteral("autoTest")); + musicDb.insertTracksList(newTracks, newCovers); musicDbTrackAddedSpy.wait(300); @@ -4275,7 +4085,7 @@ newCovers[QStringLiteral("file:///album8/$21")] = QUrl::fromLocalFile(QStringLiteral("album8")); newCovers[QStringLiteral("file:///album8/$22")] = QUrl::fromLocalFile(QStringLiteral("album8")); - musicDb.insertTracksList(newTracks, newCovers, QStringLiteral("autoTest")); + musicDb.insertTracksList(newTracks, newCovers); musicDbTrackAddedSpy.wait(300); @@ -4347,7 +4157,7 @@ auto newCovers = mNewCovers; newCovers[QStringLiteral("file:///$23")] = QUrl::fromLocalFile(QStringLiteral("album3")); - musicDb.insertTracksList(newTracks, newCovers, QStringLiteral("autoTest")); + musicDb.insertTracksList(newTracks, newCovers); musicDbTrackAddedSpy.wait(300); @@ -4427,7 +4237,7 @@ auto newCovers2 = mNewCovers; newCovers2[QStringLiteral("file:///$25")] = QUrl::fromLocalFile(QStringLiteral("album3")); - musicDb.insertTracksList(newTracks2, newCovers2, QStringLiteral("autoTest")); + musicDb.insertTracksList(newTracks2, newCovers2); musicDbTrackAddedSpy.wait(50); @@ -4556,7 +4366,7 @@ QCOMPARE(musicDbTrackModifiedSpy.count(), 0); QCOMPARE(musicDbDatabaseErrorSpy.count(), 0); - musicDb.insertTracksList(mNewTracks, mNewCovers, QStringLiteral("autoTest")); + musicDb.insertTracksList(mNewTracks, mNewCovers); musicDbTrackAddedSpy.wait(300); @@ -4583,7 +4393,7 @@ auto newCovers = mNewCovers; newCovers[QStringLiteral("file:///$23")] = QUrl::fromLocalFile(QStringLiteral("album3")); - musicDb.insertTracksList(newTracks, newCovers, QStringLiteral("autoTest")); + musicDb.insertTracksList(newTracks, newCovers); musicDbTrackAddedSpy.wait(300); @@ -4633,7 +4443,7 @@ QCOMPARE(musicDbDatabaseErrorSpy.count(), 0); QCOMPARE(musicDbRestoredTracksSpy.count(), 0); - musicDb.insertTracksList(mNewTracks, mNewCovers, QStringLiteral("autoTest")); + musicDb.insertTracksList(mNewTracks, mNewCovers); musicDbTrackAddedSpy.wait(300); @@ -4651,7 +4461,7 @@ QCOMPARE(musicDbDatabaseErrorSpy.count(), 0); QCOMPARE(musicDbRestoredTracksSpy.count(), 0); - musicDb.askRestoredTracks(QStringLiteral("autoTest")); + musicDb.askRestoredTracks(); QCOMPARE(musicDb.allAlbumsData().count(), 5); QCOMPARE(musicDb.allArtistsData().count(), 7); @@ -4668,12 +4478,9 @@ QCOMPARE(musicDbRestoredTracksSpy.count(), 1); const auto &firstSignal = musicDbRestoredTracksSpy.at(0); - QCOMPARE(firstSignal.count(), 2); - - const auto &restoredSource = firstSignal.at(0).toString(); - QCOMPARE(restoredSource, QStringLiteral("autoTest")); + QCOMPARE(firstSignal.count(), 1); - const auto &restoredTracks = firstSignal.at(1).value>(); + const auto &restoredTracks = firstSignal.at(0).value>(); QCOMPARE(restoredTracks.count(), 23); } @@ -4718,7 +4525,7 @@ auto newCovers = mNewCovers; newCovers[QStringLiteral("/test{{test}}/$23")] = QUrl::fromLocalFile(QStringLiteral("album3")); - musicDb.insertTracksList(newTracks, newCovers, QStringLiteral("autoTest")); + musicDb.insertTracksList(newTracks, newCovers); musicDbTrackAddedSpy.wait(300); diff --git a/autotests/datamodeltest.cpp b/autotests/datamodeltest.cpp --- a/autotests/datamodeltest.cpp +++ b/autotests/datamodeltest.cpp @@ -79,7 +79,7 @@ QCOMPARE(endRemoveRowsSpy.count(), 0); QCOMPARE(dataChangedSpy.count(), 0); - musicDb.insertTracksList(mNewTracks, mNewCovers, QStringLiteral("autoTest")); + musicDb.insertTracksList(mNewTracks, mNewCovers); QCOMPARE(beginInsertRowsSpy.count(), 0); QCOMPARE(endInsertRowsSpy.count(), 0); @@ -146,7 +146,7 @@ QCOMPARE(endRemoveRowsSpy.count(), 0); QCOMPARE(dataChangedSpy.count(), 0); - musicDb.insertTracksList(mNewTracks, mNewCovers, QStringLiteral("autoTest")); + musicDb.insertTracksList(mNewTracks, mNewCovers); QCOMPARE(beginInsertRowsSpy.count(), 0); QCOMPARE(endInsertRowsSpy.count(), 0); @@ -227,7 +227,7 @@ newFiles.push_back(oneTrack.resourceURI()); } - musicDb.insertTracksList(mNewTracks, mNewCovers, QStringLiteral("autoTest")); + musicDb.insertTracksList(mNewTracks, mNewCovers); QCOMPARE(beginInsertRowsSpy.count(), 0); QCOMPARE(endInsertRowsSpy.count(), 0); @@ -267,7 +267,7 @@ newFiles2.push_back(oneTrack.resourceURI()); } - musicDb.insertTracksList(newTracks, mNewCovers, QStringLiteral("autoTest")); + musicDb.insertTracksList(newTracks, mNewCovers); QCOMPARE(albumsModel.rowCount(), 5); QCOMPARE(beginInsertRowsSpy.count(), 2); @@ -295,7 +295,7 @@ newFiles3.push_back(oneTrack.resourceURI()); } - musicDb.insertTracksList(secondNewTracks, mNewCovers, QStringLiteral("autoTest")); + musicDb.insertTracksList(secondNewTracks, mNewCovers); QCOMPARE(albumsModel.rowCount(), 6); QCOMPARE(beginInsertRowsSpy.count(), 3); @@ -343,7 +343,7 @@ newFiles.push_back(oneTrack.resourceURI()); } - musicDb.insertTracksList(mNewTracks, mNewCovers, QStringLiteral("autoTest")); + musicDb.insertTracksList(mNewTracks, mNewCovers); QCOMPARE(beginInsertRowsSpy.count(), 0); QCOMPARE(endInsertRowsSpy.count(), 0); @@ -377,7 +377,7 @@ QUrl::fromLocalFile(QStringLiteral("album1")), 5, true, {}, QStringLiteral("composer1"), QStringLiteral("lyricist1"), false}; - musicDb.insertTracksList({modifiedTrack}, mNewCovers, QStringLiteral("autoTest")); + musicDb.insertTracksList({modifiedTrack}, mNewCovers); QCOMPARE(albumsModel.rowCount(), 4); QCOMPARE(beginInsertRowsSpy.count(), 1); @@ -428,7 +428,7 @@ QCOMPARE(endRemoveRowsSpy.count(), 0); QCOMPARE(dataChangedSpy.count(), 0); - musicDb.insertTracksList(mNewTracks, mNewCovers, QStringLiteral("autoTest")); + musicDb.insertTracksList(mNewTracks, mNewCovers); QCOMPARE(beginInsertRowsSpy.count(), 1); QCOMPARE(endInsertRowsSpy.count(), 1); @@ -489,7 +489,7 @@ QCOMPARE(endRemoveRowsSpy.count(), 0); QCOMPARE(dataChangedSpy.count(), 0); - musicDb.insertTracksList(mNewTracks, mNewCovers, QStringLiteral("autoTest")); + musicDb.insertTracksList(mNewTracks, mNewCovers); QCOMPARE(beginInsertRowsSpy.count(), 1); QCOMPARE(endInsertRowsSpy.count(), 1); @@ -557,7 +557,7 @@ QCOMPARE(endRemoveRowsSpy.count(), 0); QCOMPARE(dataChangedSpy.count(), 0); - musicDb.insertTracksList(mNewTracks, mNewCovers, QStringLiteral("autoTest")); + musicDb.insertTracksList(mNewTracks, mNewCovers); QCOMPARE(beginInsertRowsSpy.count(), 1); QCOMPARE(endInsertRowsSpy.count(), 1); @@ -576,7 +576,7 @@ auto newTracks = QList(); newTracks.push_back(newTrack); - musicDb.insertTracksList(newTracks, mNewCovers, QStringLiteral("autoTest")); + musicDb.insertTracksList(newTracks, mNewCovers); QCOMPARE(beginInsertRowsSpy.count(), 2); QCOMPARE(endInsertRowsSpy.count(), 2); @@ -628,7 +628,7 @@ newFiles.push_back(oneTrack.resourceURI()); } - musicDb.insertTracksList(mNewTracks, mNewCovers, QStringLiteral("autoTest")); + musicDb.insertTracksList(mNewTracks, mNewCovers); QCOMPARE(beginInsertRowsSpy.count(), 1); QCOMPARE(endInsertRowsSpy.count(), 1); @@ -656,7 +656,7 @@ newFiles2.push_back(oneTrack.resourceURI()); } - musicDb.insertTracksList(newTracks, newCovers, QStringLiteral("autoTest")); + musicDb.insertTracksList(newTracks, newCovers); QCOMPARE(beginInsertRowsSpy.count(), 2); QCOMPARE(endInsertRowsSpy.count(), 2); @@ -702,7 +702,7 @@ QCOMPARE(endRemoveRowsSpy.count(), 0); QCOMPARE(dataChangedSpy.count(), 0); - musicDb.insertTracksList(mNewTracks, mNewCovers, QStringLiteral("autoTest")); + musicDb.insertTracksList(mNewTracks, mNewCovers); QCOMPARE(beginInsertRowsSpy.count(), 1); QCOMPARE(endInsertRowsSpy.count(), 1); @@ -721,7 +721,7 @@ auto newTracks = QList(); newTracks.push_back(newTrack); - musicDb.insertTracksList(newTracks, mNewCovers, QStringLiteral("autoTest")); + musicDb.insertTracksList(newTracks, mNewCovers); QCOMPARE(beginInsertRowsSpy.count(), 1); QCOMPARE(endInsertRowsSpy.count(), 1); @@ -806,7 +806,7 @@ QCOMPARE(endRemoveRowsSpy.count(), 0); QCOMPARE(dataChangedSpy.count(), 0); - musicDb.insertTracksList(mNewTracks, mNewCovers, QStringLiteral("autoTest")); + musicDb.insertTracksList(mNewTracks, mNewCovers); QCOMPARE(beginInsertRowsSpy.count(), 1); QCOMPARE(endInsertRowsSpy.count(), 1); @@ -826,7 +826,7 @@ auto newTracks = QList(); newTracks.push_back(newTrack); - musicDb.insertTracksList(newTracks, mNewCovers, QStringLiteral("autoTest")); + musicDb.insertTracksList(newTracks, mNewCovers); QCOMPARE(beginInsertRowsSpy.count(), 2); QCOMPARE(endInsertRowsSpy.count(), 2); @@ -872,7 +872,7 @@ QCOMPARE(endRemoveRowsSpy.count(), 0); QCOMPARE(dataChangedSpy.count(), 0); - musicDb.insertTracksList(mNewTracks, mNewCovers, QStringLiteral("autoTest")); + musicDb.insertTracksList(mNewTracks, mNewCovers); QCOMPARE(albumsModel.rowCount(), 5); QCOMPARE(beginInsertRowsSpy.count(), 1); @@ -933,7 +933,7 @@ QCOMPARE(endRemoveRowsSpy.count(), 0); QCOMPARE(dataChangedSpy.count(), 0); - musicDb.insertTracksList(mNewTracks, mNewCovers, QStringLiteral("autoTest")); + musicDb.insertTracksList(mNewTracks, mNewCovers); QCOMPARE(albumsModel.rowCount(), 5); QCOMPARE(beginInsertRowsSpy.count(), 1); @@ -999,7 +999,7 @@ QCOMPARE(endRemoveRowsSpy.count(), 0); QCOMPARE(dataChangedSpy.count(), 0); - musicDb.insertTracksList(mNewTracks, mNewCovers, QStringLiteral("autoTest")); + musicDb.insertTracksList(mNewTracks, mNewCovers); QCOMPARE(beginInsertRowsSpy.count(), 1); QCOMPARE(endInsertRowsSpy.count(), 1); @@ -1016,7 +1016,7 @@ auto newTracks = QList(); newTracks.push_back(newTrack); - musicDb.insertTracksList(newTracks, mNewCovers, QStringLiteral("autoTest")); + musicDb.insertTracksList(newTracks, mNewCovers); QCOMPARE(beginInsertRowsSpy.count(), 1); QCOMPARE(endInsertRowsSpy.count(), 1); @@ -1066,7 +1066,7 @@ newFiles.push_back(oneTrack.resourceURI()); } - musicDb.insertTracksList(mNewTracks, mNewCovers, QStringLiteral("autoTest")); + musicDb.insertTracksList(mNewTracks, mNewCovers); QCOMPARE(beginInsertRowsSpy.count(), 1); QCOMPARE(endInsertRowsSpy.count(), 1); @@ -1087,7 +1087,7 @@ auto newCovers = QHash(); newCovers[QStringLiteral("album5")] = newCover; - musicDb.insertTracksList(newTracks, newCovers, QStringLiteral("autoTest")); + musicDb.insertTracksList(newTracks, newCovers); QCOMPARE(beginInsertRowsSpy.count(), 2); QCOMPARE(endInsertRowsSpy.count(), 2); @@ -1132,7 +1132,7 @@ newFiles.push_back(oneTrack.resourceURI()); } - musicDb.insertTracksList(mNewTracks, mNewCovers, QStringLiteral("autoTest")); + musicDb.insertTracksList(mNewTracks, mNewCovers); QCOMPARE(artistsModel.rowCount(), 7); QCOMPARE(beginInsertRowsSpy.count(), 1); @@ -1191,7 +1191,7 @@ newFiles.push_back(oneTrack.resourceURI()); } - musicDb.insertTracksList(mNewTracks, mNewCovers, QStringLiteral("autoTest")); + musicDb.insertTracksList(mNewTracks, mNewCovers); QCOMPARE(artistsModel.rowCount(), 7); QCOMPARE(beginInsertRowsSpy.count(), 1); @@ -1214,7 +1214,7 @@ newFiles2.push_back(oneTrack.resourceURI()); } - musicDb.insertTracksList(newTracks, mNewCovers, QStringLiteral("autoTest")); + musicDb.insertTracksList(newTracks, mNewCovers); QCOMPARE(artistsModel.rowCount(), 8); QCOMPARE(beginInsertRowsSpy.count(), 2); @@ -1271,7 +1271,7 @@ newFiles.push_back(oneTrack.resourceURI()); } - musicDb.insertTracksList(mNewTracks, mNewCovers, QStringLiteral("AutomaticTests")); + musicDb.insertTracksList(mNewTracks, mNewCovers); QCOMPARE(artistsModel.rowCount(), 1); QCOMPARE(beginInsertRowsSpy.count(), 1); @@ -1330,7 +1330,7 @@ newFiles.push_back(oneTrack.resourceURI()); } - musicDb.insertTracksList(mNewTracks, mNewCovers, QStringLiteral("AutomaticTests")); + musicDb.insertTracksList(mNewTracks, mNewCovers); QCOMPARE(artistsModel.rowCount(), 4); QCOMPARE(beginInsertRowsSpy.count(), 1); @@ -1389,7 +1389,7 @@ newFiles.push_back(oneTrack.resourceURI()); } - musicDb.insertTracksList(mNewTracks, mNewCovers, QStringLiteral("AutomaticTests")); + musicDb.insertTracksList(mNewTracks, mNewCovers); QCOMPARE(artistsModel.rowCount(), 2); QCOMPARE(beginInsertRowsSpy.count(), 1); @@ -1431,7 +1431,7 @@ QCOMPARE(modelResetSpy.count(), 0); QCOMPARE(dataChangedSpy.count(), 0); - musicDb.insertTracksList(mNewTracks, mNewCovers, QStringLiteral("AutomaticTests")); + musicDb.insertTracksList(mNewTracks, mNewCovers); QCOMPARE(artistsModel.rowCount(), 0); QCOMPARE(beginInsertRowsSpy.count(), 0); @@ -1479,7 +1479,7 @@ newCovers[QStringLiteral("file:///$31")] = QUrl::fromLocalFile(QStringLiteral("album1")); newCovers[QStringLiteral("file:///$32")] = QUrl::fromLocalFile(QStringLiteral("album3")); - musicDb.insertTracksList(newTracks, newCovers, QStringLiteral("autoTest")); + musicDb.insertTracksList(newTracks, newCovers); QCOMPARE(artistsModel.rowCount(), 5); QCOMPARE(beginInsertRowsSpy.count(), 2); diff --git a/autotests/localfilelistingtest.cpp b/autotests/localfilelistingtest.cpp --- a/autotests/localfilelistingtest.cpp +++ b/autotests/localfilelistingtest.cpp @@ -25,6 +25,7 @@ #include #include #include +#include #include #include #include @@ -69,40 +70,26 @@ QSignalSpy tracksListSpy(&myListing, &LocalFileListing::tracksList); QSignalSpy removedTracksListSpy(&myListing, &LocalFileListing::removedTracksList); - QSignalSpy rootPathChangedSpy(&myListing, &LocalFileListing::rootPathChanged); - QSignalSpy errorWatchingFilesSpy(&myListing, &LocalFileListing::errorWatchingFiles); QCOMPARE(tracksListSpy.count(), 0); QCOMPARE(removedTracksListSpy.count(), 0); - QCOMPARE(rootPathChangedSpy.count(), 0); - QCOMPARE(errorWatchingFilesSpy.count(), 0); myListing.init(); QCOMPARE(tracksListSpy.count(), 0); QCOMPARE(removedTracksListSpy.count(), 0); - QCOMPARE(rootPathChangedSpy.count(), 0); - QCOMPARE(errorWatchingFilesSpy.count(), 0); - myListing.setRootPath(QStringLiteral("/directoryNotExist")); + myListing.setAllRootPaths({QStringLiteral("/directoryNotExist")}); QCOMPARE(tracksListSpy.count(), 0); QCOMPARE(removedTracksListSpy.count(), 0); - QCOMPARE(rootPathChangedSpy.count(), 1); - QCOMPARE(errorWatchingFilesSpy.count(), 0); - QCOMPARE(myListing.rootPath(), QStringLiteral("/directoryNotExist")); + QCOMPARE(myListing.allRootPaths(), QStringList{QStringLiteral("/directoryNotExist")}); myListing.refreshContent(); - if (errorWatchingFilesSpy.count()) { - QEXPECT_FAIL("", "watching files for change is not working", Abort); - } - QCOMPARE(tracksListSpy.count(), 0); QCOMPARE(removedTracksListSpy.count(), 0); - QCOMPARE(rootPathChangedSpy.count(), 1); - QCOMPARE(errorWatchingFilesSpy.count(), 0); } void initialTestWithTracks() @@ -113,40 +100,26 @@ QSignalSpy tracksListSpy(&myListing, &LocalFileListing::tracksList); QSignalSpy removedTracksListSpy(&myListing, &LocalFileListing::removedTracksList); - QSignalSpy rootPathChangedSpy(&myListing, &LocalFileListing::rootPathChanged); - QSignalSpy errorWatchingFilesSpy(&myListing, &LocalFileListing::errorWatchingFiles); QCOMPARE(tracksListSpy.count(), 0); QCOMPARE(removedTracksListSpy.count(), 0); - QCOMPARE(rootPathChangedSpy.count(), 0); - QCOMPARE(errorWatchingFilesSpy.count(), 0); myListing.init(); QCOMPARE(tracksListSpy.count(), 0); QCOMPARE(removedTracksListSpy.count(), 0); - QCOMPARE(rootPathChangedSpy.count(), 0); - QCOMPARE(errorWatchingFilesSpy.count(), 0); - myListing.setRootPath(musicPath); + myListing.setAllRootPaths({musicPath}); QCOMPARE(tracksListSpy.count(), 0); QCOMPARE(removedTracksListSpy.count(), 0); - QCOMPARE(rootPathChangedSpy.count(), 1); - QCOMPARE(errorWatchingFilesSpy.count(), 0); - QCOMPARE(myListing.rootPath(), musicPath); + //QCOMPARE(myListing.rootPath(), musicPath); myListing.refreshContent(); QCOMPARE(tracksListSpy.count(), 2); QCOMPARE(removedTracksListSpy.count(), 0); - QCOMPARE(rootPathChangedSpy.count(), 1); - - if (errorWatchingFilesSpy.count()) { - QEXPECT_FAIL("", "watching files for change is not working", Abort); - } - QCOMPARE(errorWatchingFilesSpy.count(), 0); const auto &firstNewTracksSignal = tracksListSpy.at(0); auto firstNewTracks = firstNewTracksSignal.at(0).value>(); @@ -175,40 +148,26 @@ QSignalSpy tracksListSpy(&myListing, &LocalFileListing::tracksList); QSignalSpy removedTracksListSpy(&myListing, &LocalFileListing::removedTracksList); - QSignalSpy rootPathChangedSpy(&myListing, &LocalFileListing::rootPathChanged); - QSignalSpy errorWatchingFilesSpy(&myListing, &LocalFileListing::errorWatchingFiles); QCOMPARE(tracksListSpy.count(), 0); QCOMPARE(removedTracksListSpy.count(), 0); - QCOMPARE(rootPathChangedSpy.count(), 0); - QCOMPARE(errorWatchingFilesSpy.count(), 0); myListing.init(); QCOMPARE(tracksListSpy.count(), 0); QCOMPARE(removedTracksListSpy.count(), 0); - QCOMPARE(rootPathChangedSpy.count(), 0); - QCOMPARE(errorWatchingFilesSpy.count(), 0); - myListing.setRootPath(musicParentPath); + myListing.setAllRootPaths({musicParentPath}); QCOMPARE(tracksListSpy.count(), 0); QCOMPARE(removedTracksListSpy.count(), 0); - QCOMPARE(rootPathChangedSpy.count(), 1); - QCOMPARE(errorWatchingFilesSpy.count(), 0); - QCOMPARE(myListing.rootPath(), musicParentPath); + QCOMPARE(myListing.allRootPaths(), QStringList{musicParentPath}); myListing.refreshContent(); QCOMPARE(tracksListSpy.count(), 0); QCOMPARE(removedTracksListSpy.count(), 0); - QCOMPARE(rootPathChangedSpy.count(), 1); - - if (errorWatchingFilesSpy.count()) { - QEXPECT_FAIL("", "watching files for change is not working", Abort); - } - QCOMPARE(errorWatchingFilesSpy.count(), 0); QFile myTrack(musicOriginPath + QStringLiteral("/test.ogg")); myTrack.copy(musicPath + QStringLiteral("/test.ogg")); @@ -219,12 +178,6 @@ QCOMPARE(tracksListSpy.count(), 1); QCOMPARE(removedTracksListSpy.count(), 0); - QCOMPARE(rootPathChangedSpy.count(), 1); - - if (errorWatchingFilesSpy.count()) { - QEXPECT_FAIL("", "watching files for change is not working", Abort); - } - QCOMPARE(errorWatchingFilesSpy.count(), 0); auto newTracksSignal = tracksListSpy.at(0); auto newTracks = newTracksSignal.at(0).value>(); @@ -240,8 +193,6 @@ QCOMPARE(tracksListSpy.count(), 1); QCOMPARE(removedTracksListSpy.count(), 1); - QCOMPARE(rootPathChangedSpy.count(), 1); - QCOMPARE(errorWatchingFilesSpy.count(), 0); auto removeSignal = removedTracksListSpy.at(0); auto removedTracks = removeSignal.at(0).value>(); @@ -257,8 +208,6 @@ QCOMPARE(tracksListSpy.count(), 2); QCOMPARE(removedTracksListSpy.count(), 1); - QCOMPARE(rootPathChangedSpy.count(), 1); - QCOMPARE(errorWatchingFilesSpy.count(), 0); auto newTracksSignalLast = tracksListSpy.at(1); auto newTracksLast = newTracksSignalLast.at(0).value>(); @@ -287,40 +236,26 @@ QSignalSpy tracksListSpy(&myListing, &LocalFileListing::tracksList); QSignalSpy removedTracksListSpy(&myListing, &LocalFileListing::removedTracksList); - QSignalSpy rootPathChangedSpy(&myListing, &LocalFileListing::rootPathChanged); - QSignalSpy errorWatchingFilesSpy(&myListing, &LocalFileListing::errorWatchingFiles); QCOMPARE(tracksListSpy.count(), 0); QCOMPARE(removedTracksListSpy.count(), 0); - QCOMPARE(rootPathChangedSpy.count(), 0); - QCOMPARE(errorWatchingFilesSpy.count(), 0); myListing.init(); QCOMPARE(tracksListSpy.count(), 0); QCOMPARE(removedTracksListSpy.count(), 0); - QCOMPARE(rootPathChangedSpy.count(), 0); - QCOMPARE(errorWatchingFilesSpy.count(), 0); - myListing.setRootPath(musicParentPath); + myListing.setAllRootPaths({musicParentPath}); QCOMPARE(tracksListSpy.count(), 0); QCOMPARE(removedTracksListSpy.count(), 0); - QCOMPARE(rootPathChangedSpy.count(), 1); - QCOMPARE(errorWatchingFilesSpy.count(), 0); - QCOMPARE(myListing.rootPath(), musicParentPath); + QCOMPARE(myListing.allRootPaths(), QStringList{musicParentPath}); myListing.refreshContent(); QCOMPARE(tracksListSpy.count(), 0); QCOMPARE(removedTracksListSpy.count(), 0); - QCOMPARE(rootPathChangedSpy.count(), 1); - - if (errorWatchingFilesSpy.count()) { - QEXPECT_FAIL("", "watching files for change is not working", Abort); - } - QCOMPARE(errorWatchingFilesSpy.count(), 0); QFile myTrack(musicOriginPath + QStringLiteral("/test.ogg")); myTrack.copy(musicPath + QStringLiteral("/test.ogg")); @@ -331,12 +266,6 @@ QCOMPARE(tracksListSpy.count(), 1); QCOMPARE(removedTracksListSpy.count(), 0); - QCOMPARE(rootPathChangedSpy.count(), 1); - - if (errorWatchingFilesSpy.count()) { - QEXPECT_FAIL("", "watching files for change is not working", Abort); - } - QCOMPARE(errorWatchingFilesSpy.count(), 0); auto newTracksSignal = tracksListSpy.at(0); auto newTracks = newTracksSignal.at(0).value>(); @@ -352,8 +281,6 @@ QCOMPARE(tracksListSpy.count(), 1); QCOMPARE(removedTracksListSpy.count(), 1); - QCOMPARE(rootPathChangedSpy.count(), 1); - QCOMPARE(errorWatchingFilesSpy.count(), 0); auto removeSignal = removedTracksListSpy.at(0); auto removedTracks = removeSignal.at(0).value>(); @@ -369,8 +296,6 @@ QCOMPARE(tracksListSpy.count(), 2); QCOMPARE(removedTracksListSpy.count(), 1); - QCOMPARE(rootPathChangedSpy.count(), 1); - QCOMPARE(errorWatchingFilesSpy.count(), 0); auto newTracksSignalLast = tracksListSpy.at(1); auto newTracksLast = newTracksSignalLast.at(0).value>(); @@ -404,44 +329,30 @@ QSignalSpy tracksListSpy(&myListing, &LocalFileListing::tracksList); QSignalSpy removedTracksListSpy(&myListing, &LocalFileListing::removedTracksList); QSignalSpy modifiedTracksListSpy(&myListing, &LocalFileListing::modifyTracksList); - QSignalSpy rootPathChangedSpy(&myListing, &LocalFileListing::rootPathChanged); - QSignalSpy errorWatchingFilesSpy(&myListing, &LocalFileListing::errorWatchingFiles); QCOMPARE(tracksListSpy.count(), 0); QCOMPARE(removedTracksListSpy.count(), 0); QCOMPARE(modifiedTracksListSpy.count(), 0); - QCOMPARE(rootPathChangedSpy.count(), 0); - QCOMPARE(errorWatchingFilesSpy.count(), 0); myListing.init(); QCOMPARE(tracksListSpy.count(), 0); QCOMPARE(removedTracksListSpy.count(), 0); QCOMPARE(modifiedTracksListSpy.count(), 0); - QCOMPARE(rootPathChangedSpy.count(), 0); - QCOMPARE(errorWatchingFilesSpy.count(), 0); - myListing.setRootPath(musicParentPath); + myListing.setAllRootPaths({musicParentPath}); QCOMPARE(tracksListSpy.count(), 0); QCOMPARE(removedTracksListSpy.count(), 0); QCOMPARE(modifiedTracksListSpy.count(), 0); - QCOMPARE(rootPathChangedSpy.count(), 1); - QCOMPARE(errorWatchingFilesSpy.count(), 0); - QCOMPARE(myListing.rootPath(), musicParentPath); + QCOMPARE(myListing.allRootPaths(), QStringList{musicParentPath}); myListing.refreshContent(); QCOMPARE(tracksListSpy.count(), 0); QCOMPARE(removedTracksListSpy.count(), 0); QCOMPARE(modifiedTracksListSpy.count(), 0); - QCOMPARE(rootPathChangedSpy.count(), 1); - - if (errorWatchingFilesSpy.count()) { - QEXPECT_FAIL("", "watching files for change is not working", Abort); - } - QCOMPARE(errorWatchingFilesSpy.count(), 0); QFile myTrack(musicOriginPath + QStringLiteral("/test.ogg")); myTrack.copy(musicPath + QStringLiteral("/test.ogg")); @@ -453,12 +364,6 @@ QCOMPARE(tracksListSpy.count(), 1); QCOMPARE(removedTracksListSpy.count(), 0); QCOMPARE(modifiedTracksListSpy.count(), 0); - QCOMPARE(rootPathChangedSpy.count(), 1); - - if (errorWatchingFilesSpy.count()) { - QEXPECT_FAIL("", "watching files for change is not working", Abort); - } - QCOMPARE(errorWatchingFilesSpy.count(), 0); auto newTracksSignal = tracksListSpy.at(0); auto newTracks = newTracksSignal.at(0).value>(); @@ -475,8 +380,6 @@ QCOMPARE(tracksListSpy.count(), 1); QCOMPARE(removedTracksListSpy.count(), 1); QCOMPARE(modifiedTracksListSpy.count(), 0); - QCOMPARE(rootPathChangedSpy.count(), 1); - QCOMPARE(errorWatchingFilesSpy.count(), 0); auto removeSignal = removedTracksListSpy.at(0); auto removedTracks = removeSignal.at(0).value>(); @@ -494,8 +397,6 @@ QCOMPARE(tracksListSpy.count(), 2); QCOMPARE(removedTracksListSpy.count(), 1); QCOMPARE(modifiedTracksListSpy.count(), 0); - QCOMPARE(rootPathChangedSpy.count(), 1); - QCOMPARE(errorWatchingFilesSpy.count(), 0); auto newTracksSignalLast = tracksListSpy.at(1); auto newTracksLast = newTracksSignalLast.at(0).value>(); @@ -512,65 +413,54 @@ QSignalSpy tracksListSpy(&myListing, &LocalFileListing::tracksList); QSignalSpy removedTracksListSpy(&myListing, &LocalFileListing::removedTracksList); QSignalSpy modifiedTracksListSpy(&myListing, &LocalFileListing::modifyTracksList); - QSignalSpy rootPathChangedSpy(&myListing, &LocalFileListing::rootPathChanged); QSignalSpy indexingStartedSpy(&myListing, &LocalFileListing::indexingStarted); QSignalSpy indexingFinishedSpy(&myListing, &LocalFileListing::indexingFinished); QSignalSpy newNotificationSpy(&myListing, &LocalFileListing::newNotification); QSignalSpy closeNotificationSpy(&myListing, &LocalFileListing::closeNotification); QSignalSpy askRestoredTracksSpy(&myListing, &LocalFileListing::askRestoredTracks); - QSignalSpy errorWatchingFilesSpy(&myListing, &LocalFileListing::errorWatchingFiles); QCOMPARE(tracksListSpy.count(), 0); QCOMPARE(removedTracksListSpy.count(), 0); QCOMPARE(modifiedTracksListSpy.count(), 0); - QCOMPARE(rootPathChangedSpy.count(), 0); QCOMPARE(indexingStartedSpy.count(), 0); QCOMPARE(indexingFinishedSpy.count(), 0); QCOMPARE(newNotificationSpy.count(), 0); QCOMPARE(closeNotificationSpy.count(), 0); QCOMPARE(askRestoredTracksSpy.count(), 0); - QCOMPARE(errorWatchingFilesSpy.count(), 0); - myListing.setRootPath(QStringLiteral("/does/not/exists")); + myListing.setAllRootPaths({QStringLiteral("/does/not/exists")}); QCOMPARE(tracksListSpy.count(), 0); QCOMPARE(removedTracksListSpy.count(), 0); QCOMPARE(modifiedTracksListSpy.count(), 0); - QCOMPARE(rootPathChangedSpy.count(), 1); QCOMPARE(indexingStartedSpy.count(), 0); QCOMPARE(indexingFinishedSpy.count(), 0); QCOMPARE(newNotificationSpy.count(), 0); QCOMPARE(closeNotificationSpy.count(), 0); QCOMPARE(askRestoredTracksSpy.count(), 0); - QCOMPARE(errorWatchingFilesSpy.count(), 0); myListing.init(); QCOMPARE(tracksListSpy.count(), 0); QCOMPARE(removedTracksListSpy.count(), 0); QCOMPARE(modifiedTracksListSpy.count(), 0); - QCOMPARE(rootPathChangedSpy.count(), 1); QCOMPARE(indexingStartedSpy.count(), 0); QCOMPARE(indexingFinishedSpy.count(), 0); QCOMPARE(newNotificationSpy.count(), 0); QCOMPARE(closeNotificationSpy.count(), 0); QCOMPARE(askRestoredTracksSpy.count(), 1); - QCOMPARE(errorWatchingFilesSpy.count(), 0); - myListing.restoredTracks(QStringLiteral("/does/not/exists"), - {{QUrl::fromLocalFile(QStringLiteral("/removed/files1")), QDateTime::fromMSecsSinceEpoch(1)}, - {QUrl::fromLocalFile(QStringLiteral("/removed/files2")), QDateTime::fromMSecsSinceEpoch(2)}}); + myListing.restoredTracks({{QUrl::fromLocalFile(QStringLiteral("/removed/files1")), QDateTime::fromMSecsSinceEpoch(1)}, + {QUrl::fromLocalFile(QStringLiteral("/removed/files2")), QDateTime::fromMSecsSinceEpoch(2)}}); QCOMPARE(tracksListSpy.count(), 0); QCOMPARE(removedTracksListSpy.count(), 1); QCOMPARE(modifiedTracksListSpy.count(), 0); - QCOMPARE(rootPathChangedSpy.count(), 1); QCOMPARE(indexingStartedSpy.count(), 1); - QCOMPARE(indexingFinishedSpy.count(), 1); + QCOMPARE(indexingFinishedSpy.count(), 0); QCOMPARE(newNotificationSpy.count(), 0); QCOMPARE(closeNotificationSpy.count(), 0); QCOMPARE(askRestoredTracksSpy.count(), 1); - QCOMPARE(errorWatchingFilesSpy.count(), 0); auto removedTracksSignal = removedTracksListSpy.at(0); diff --git a/autotests/manageheaderbartest.cpp b/autotests/manageheaderbartest.cpp --- a/autotests/manageheaderbartest.cpp +++ b/autotests/manageheaderbartest.cpp @@ -2060,7 +2060,7 @@ QCOMPARE(myControl.playListModel(), &myPlayList); - myDatabaseContent.insertTracksList(mNewTracks, mNewCovers, QStringLiteral("autoTest")); + myDatabaseContent.insertTracksList(mNewTracks, mNewCovers); myPlayList.enqueue({myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track1"), QStringLiteral("artist1"), QStringLiteral("album2"), 1, 1), QStringLiteral("track1")}, @@ -2329,7 +2329,7 @@ newFiles.push_back(oneTrack.resourceURI()); } - myDatabaseContent.insertTracksList(mNewTracks, mNewCovers, QStringLiteral("autoTest")); + myDatabaseContent.insertTracksList(mNewTracks, mNewCovers); myPlayList.enqueue({myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track1"), QStringLiteral("artist1"), QStringLiteral("album2"), 1, 1), QStringLiteral("track1")}, @@ -2598,7 +2598,7 @@ newFiles.push_back(oneTrack.resourceURI()); } - myDatabaseContent.insertTracksList(mNewTracks, mNewCovers, QStringLiteral("autoTest")); + myDatabaseContent.insertTracksList(mNewTracks, mNewCovers); myPlayList.enqueue({myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track1"), QStringLiteral("artist1"), QStringLiteral("album2"), 1, 1), QStringLiteral("track1")}, diff --git a/autotests/managemediaplayercontroltest.cpp b/autotests/managemediaplayercontroltest.cpp --- a/autotests/managemediaplayercontroltest.cpp +++ b/autotests/managemediaplayercontroltest.cpp @@ -460,7 +460,7 @@ QCOMPARE(myControl.playListModel(), &myPlayList); - myDatabaseContent.insertTracksList(mNewTracks, mNewCovers, QStringLiteral("autoTest")); + myDatabaseContent.insertTracksList(mNewTracks, mNewCovers); myPlayList.enqueue(ElisaUtils::EntryData{myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track1"), QStringLiteral("artist2"), QStringLiteral("album2"), 1, 1), QStringLiteral("track1")}, @@ -563,7 +563,7 @@ QCOMPARE(myControl.playListModel(), &myPlayList); - myDatabaseContent.insertTracksList(mNewTracks, mNewCovers, QStringLiteral("autoTest")); + myDatabaseContent.insertTracksList(mNewTracks, mNewCovers); myPlayList.enqueue(ElisaUtils::EntryData{myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track1"), QStringLiteral("artist2"), QStringLiteral("album2"), 1, 1), QStringLiteral("track1")}, @@ -666,7 +666,7 @@ QCOMPARE(myControl.playListModel(), &myPlayList); - myDatabaseContent.insertTracksList(mNewTracks, mNewCovers, QStringLiteral("autoTest")); + myDatabaseContent.insertTracksList(mNewTracks, mNewCovers); myPlayList.enqueue(ElisaUtils::EntryData{myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track1"), QStringLiteral("artist2"), QStringLiteral("album2"), 1, 1), QStringLiteral("track1")}, diff --git a/autotests/mediaplaylisttest.cpp b/autotests/mediaplaylisttest.cpp --- a/autotests/mediaplaylisttest.cpp +++ b/autotests/mediaplaylisttest.cpp @@ -90,7 +90,7 @@ connect(&myDatabaseContent, &DatabaseInterface::tracksAdded, &myListener, &TracksListener::tracksAdded); - myDatabaseContent.insertTracksList(mNewTracks, mNewCovers, QStringLiteral("autoTest")); + myDatabaseContent.insertTracksList(mNewTracks, mNewCovers); QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); @@ -176,7 +176,7 @@ connect(&myDatabaseContent, &DatabaseInterface::tracksAdded, &myListener, &TracksListener::tracksAdded); - myDatabaseContent.insertTracksList(mNewTracks, mNewCovers, QStringLiteral("autoTest")); + myDatabaseContent.insertTracksList(mNewTracks, mNewCovers); QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); @@ -301,7 +301,7 @@ connect(&myDatabaseContent, &DatabaseInterface::tracksAdded, &myListener, &TracksListener::tracksAdded); - myDatabaseContent.insertTracksList(mNewTracks, mNewCovers, QStringLiteral("autoTest")); + myDatabaseContent.insertTracksList(mNewTracks, mNewCovers); QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); @@ -442,7 +442,7 @@ connect(&myDatabaseContent, &DatabaseInterface::tracksAdded, &myListener, &TracksListener::tracksAdded); - myDatabaseContent.insertTracksList(mNewTracks, mNewCovers, QStringLiteral("autoTest")); + myDatabaseContent.insertTracksList(mNewTracks, mNewCovers); QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); @@ -575,7 +575,7 @@ connect(&myDatabaseContent, &DatabaseInterface::tracksAdded, &myListener, &TracksListener::tracksAdded); - myDatabaseContent.insertTracksList(mNewTracks, mNewCovers, QStringLiteral("autoTest")); + myDatabaseContent.insertTracksList(mNewTracks, mNewCovers); QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); @@ -665,7 +665,7 @@ connect(&myDatabaseContent, &DatabaseInterface::tracksAdded, &myListener, &TracksListener::tracksAdded); - myDatabaseContent.insertTracksList(mNewTracks, mNewCovers, QStringLiteral("autoTest")); + myDatabaseContent.insertTracksList(mNewTracks, mNewCovers); QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); @@ -915,7 +915,7 @@ QCOMPARE(newTrackByNameInListSpy.count(), 4); QCOMPARE(newEntryInListSpy.count(), 0); - myDatabaseContent.insertTracksList(mNewTracks, mNewCovers, QStringLiteral("autoTest")); + myDatabaseContent.insertTracksList(mNewTracks, mNewCovers); while (dataChangedSpy.count() < 8) { QCOMPARE(dataChangedSpy.wait(), true); @@ -1004,7 +1004,7 @@ connect(&myDatabaseContent, &DatabaseInterface::tracksAdded, &myListener, &TracksListener::tracksAdded); - myDatabaseContent.insertTracksList(mNewTracks, mNewCovers, QStringLiteral("autoTest")); + myDatabaseContent.insertTracksList(mNewTracks, mNewCovers); QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); @@ -1198,7 +1198,7 @@ connect(&myDatabaseContent, &DatabaseInterface::tracksAdded, &myListener, &TracksListener::tracksAdded); - myDatabaseContent.insertTracksList(mNewTracks, mNewCovers, QStringLiteral("autoTest")); + myDatabaseContent.insertTracksList(mNewTracks, mNewCovers); QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); @@ -1379,7 +1379,7 @@ connect(&myDatabaseContent, &DatabaseInterface::tracksAdded, &myListener, &TracksListener::tracksAdded); - myDatabaseContent.insertTracksList(mNewTracks, mNewCovers, QStringLiteral("autoTest")); + myDatabaseContent.insertTracksList(mNewTracks, mNewCovers); QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); @@ -1560,7 +1560,7 @@ connect(&myDatabaseContent, &DatabaseInterface::tracksAdded, &myListener, &TracksListener::tracksAdded); - myDatabaseContent.insertTracksList(mNewTracks, mNewCovers, QStringLiteral("autoTest")); + myDatabaseContent.insertTracksList(mNewTracks, mNewCovers); QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); @@ -1741,7 +1741,7 @@ connect(&myDatabaseContent, &DatabaseInterface::tracksAdded, &myListener, &TracksListener::tracksAdded); - myDatabaseContent.insertTracksList(mNewTracks, mNewCovers, QStringLiteral("autoTest")); + myDatabaseContent.insertTracksList(mNewTracks, mNewCovers); QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); @@ -1922,7 +1922,7 @@ connect(&myDatabaseContent, &DatabaseInterface::tracksAdded, &myListener, &TracksListener::tracksAdded); - myDatabaseContent.insertTracksList(mNewTracks, mNewCovers, QStringLiteral("autoTest")); + myDatabaseContent.insertTracksList(mNewTracks, mNewCovers); QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); @@ -2116,7 +2116,7 @@ connect(&myDatabaseContent, &DatabaseInterface::tracksAdded, &myListener, &TracksListener::tracksAdded); - myDatabaseContent.insertTracksList(mNewTracks, mNewCovers, QStringLiteral("autoTest")); + myDatabaseContent.insertTracksList(mNewTracks, mNewCovers); QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); @@ -2291,7 +2291,7 @@ connect(&myDatabaseContent, &DatabaseInterface::tracksAdded, &myListener, &TracksListener::tracksAdded); - myDatabaseContent.insertTracksList(mNewTracks, mNewCovers, QStringLiteral("autoTest")); + myDatabaseContent.insertTracksList(mNewTracks, mNewCovers); QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); @@ -2431,7 +2431,7 @@ QCOMPARE(newTrackByNameInListSpy.count(), 4); QCOMPARE(newEntryInListSpy.count(), 0); - myDatabaseContent.insertTracksList(mNewTracks, mNewCovers, QStringLiteral("autoTest")); + myDatabaseContent.insertTracksList(mNewTracks, mNewCovers); QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); @@ -2529,7 +2529,7 @@ connect(&myDatabaseContent, &DatabaseInterface::tracksAdded, &myListener, &TracksListener::tracksAdded); - myDatabaseContent.insertTracksList(mNewTracks, mNewCovers, QStringLiteral("autoTest")); + myDatabaseContent.insertTracksList(mNewTracks, mNewCovers); QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); @@ -2794,7 +2794,7 @@ connect(&myDatabaseContent, &DatabaseInterface::tracksAdded, &myListenerRead, &TracksListener::tracksAdded); - myDatabaseContent.insertTracksList(mNewTracks, mNewCovers, QStringLiteral("autoTest")); + myDatabaseContent.insertTracksList(mNewTracks, mNewCovers); QCOMPARE(rowsAboutToBeRemovedSpySave.count(), 0); QCOMPARE(rowsAboutToBeMovedSpySave.count(), 0); @@ -3109,7 +3109,7 @@ connect(&myDatabaseContent, &DatabaseInterface::tracksAdded, &myListener, &TracksListener::tracksAdded); - myDatabaseContent.insertTracksList(mNewTracks, mNewCovers, QStringLiteral("autoTest")); + myDatabaseContent.insertTracksList(mNewTracks, mNewCovers); QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); @@ -3251,7 +3251,7 @@ connect(&myDatabaseContent, &DatabaseInterface::tracksAdded, &myListener, &TracksListener::tracksAdded); - myDatabaseContent.insertTracksList(mNewTracks, mNewCovers, QStringLiteral("autoTest")); + myDatabaseContent.insertTracksList(mNewTracks, mNewCovers); QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); @@ -3403,7 +3403,7 @@ connect(&myDatabaseContent, &DatabaseInterface::tracksAdded, &myListener, &TracksListener::tracksAdded); - myDatabaseContent.insertTracksList(mNewTracks, mNewCovers, QStringLiteral("autoTest")); + myDatabaseContent.insertTracksList(mNewTracks, mNewCovers); QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); @@ -3612,7 +3612,7 @@ connect(&myDatabaseContent, &DatabaseInterface::tracksAdded, &myListener, &TracksListener::tracksAdded); - myDatabaseContent.insertTracksList(mNewTracks, mNewCovers, QStringLiteral("autoTest")); + myDatabaseContent.insertTracksList(mNewTracks, mNewCovers); QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); @@ -3780,7 +3780,7 @@ connect(&myDatabaseContent, &DatabaseInterface::tracksAdded, &myListener, &TracksListener::tracksAdded); - myDatabaseContent.insertTracksList(mNewTracks, mNewCovers, QStringLiteral("autoTest")); + myDatabaseContent.insertTracksList(mNewTracks, mNewCovers); QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); @@ -3975,7 +3975,7 @@ QCOMPARE(repeatPlayChangedSpy.count(), 0); QCOMPARE(playListFinishedSpy.count(), 0); - myDatabaseContent.insertTracksList(mNewTracks, mNewCovers, QStringLiteral("autoTest")); + myDatabaseContent.insertTracksList(mNewTracks, mNewCovers); QCOMPARE(currentTrackChangedSpy.count(), 0); QCOMPARE(randomPlayChangedSpy.count(), 0); @@ -4035,7 +4035,7 @@ QCOMPARE(repeatPlayChangedSpy.count(), 0); QCOMPARE(playListFinishedSpy.count(), 0); - myDatabaseContent.insertTracksList(mNewTracks, mNewCovers, QStringLiteral("autoTest")); + myDatabaseContent.insertTracksList(mNewTracks, mNewCovers); QCOMPARE(currentTrackChangedSpy.count(), 0); QCOMPARE(randomPlayChangedSpy.count(), 0); @@ -4093,7 +4093,7 @@ QCOMPARE(repeatPlayChangedSpy.count(), 0); QCOMPARE(playListFinishedSpy.count(), 0); - myDatabaseContent.insertTracksList(mNewTracks, mNewCovers, QStringLiteral("autoTest")); + myDatabaseContent.insertTracksList(mNewTracks, mNewCovers); QCOMPARE(currentTrackChangedSpy.count(), 0); QCOMPARE(randomPlayChangedSpy.count(), 0); @@ -4157,7 +4157,7 @@ connect(&myDatabaseContent, &DatabaseInterface::tracksAdded, &myListener, &TracksListener::tracksAdded); - myDatabaseContent.insertTracksList(mNewTracks, mNewCovers, QStringLiteral("autoTest")); + myDatabaseContent.insertTracksList(mNewTracks, mNewCovers); QCOMPARE(currentTrackChangedSpy.count(), 0); QCOMPARE(randomPlayChangedSpy.count(), 0); @@ -4221,7 +4221,7 @@ connect(&myDatabaseContent, &DatabaseInterface::tracksAdded, &myListener, &TracksListener::tracksAdded); - myDatabaseContent.insertTracksList(mNewTracks, mNewCovers, QStringLiteral("autoTest")); + myDatabaseContent.insertTracksList(mNewTracks, mNewCovers); QCOMPARE(currentTrackChangedSpy.count(), 0); QCOMPARE(randomPlayChangedSpy.count(), 0); @@ -4294,7 +4294,7 @@ connect(&myDatabaseContent, &DatabaseInterface::tracksAdded, &myListener, &TracksListener::tracksAdded); - myDatabaseContent.insertTracksList(mNewTracks, mNewCovers, QStringLiteral("autoTest")); + myDatabaseContent.insertTracksList(mNewTracks, mNewCovers); QCOMPARE(currentTrackChangedSpy.count(), 0); QCOMPARE(randomPlayChangedSpy.count(), 0); @@ -4385,7 +4385,7 @@ connect(&myDatabaseContent, &DatabaseInterface::tracksAdded, &myListener, &TracksListener::tracksAdded); - myDatabaseContent.insertTracksList(mNewTracks, mNewCovers, QStringLiteral("autoTest")); + myDatabaseContent.insertTracksList(mNewTracks, mNewCovers); QCOMPARE(currentTrackChangedSpy.count(), 0); QCOMPARE(randomPlayChangedSpy.count(), 0); @@ -4452,7 +4452,7 @@ connect(&myDatabaseContent, &DatabaseInterface::tracksAdded, &myListener, &TracksListener::tracksAdded); - myDatabaseContent.insertTracksList(mNewTracks, mNewCovers, QStringLiteral("autoTest")); + myDatabaseContent.insertTracksList(mNewTracks, mNewCovers); QCOMPARE(currentTrackChangedSpy.count(), 0); QCOMPARE(randomPlayChangedSpy.count(), 0); @@ -4519,7 +4519,7 @@ connect(&myDatabaseContent, &DatabaseInterface::tracksAdded, &myListener, &TracksListener::tracksAdded); - myDatabaseContent.insertTracksList(mNewTracks, mNewCovers, QStringLiteral("autoTest")); + myDatabaseContent.insertTracksList(mNewTracks, mNewCovers); QCOMPARE(currentTrackChangedSpy.count(), 0); QCOMPARE(randomPlayChangedSpy.count(), 0); @@ -4607,7 +4607,7 @@ QCOMPARE(repeatPlayChangedSpy.count(), 1); QCOMPARE(playListFinishedSpy.count(), 0); - myDatabaseContent.insertTracksList(mNewTracks, mNewCovers, QStringLiteral("autoTest")); + myDatabaseContent.insertTracksList(mNewTracks, mNewCovers); QCOMPARE(currentTrackChangedSpy.count(), 0); QCOMPARE(randomPlayChangedSpy.count(), 0); @@ -4776,7 +4776,7 @@ connect(&myDatabaseContent, &DatabaseInterface::tracksAdded, &myListener, &TracksListener::tracksAdded); - myDatabaseContent.insertTracksList(mNewTracks, mNewCovers, QStringLiteral("autoTest")); + myDatabaseContent.insertTracksList(mNewTracks, mNewCovers); QCOMPARE(currentTrackChangedSpy.count(), 0); QCOMPARE(randomPlayChangedSpy.count(), 0); @@ -4852,7 +4852,7 @@ connect(&myDatabaseContent, &DatabaseInterface::tracksAdded, &myListener, &TracksListener::tracksAdded); - myDatabaseContent.insertTracksList(mNewTracks, mNewCovers, QStringLiteral("autoTest")); + myDatabaseContent.insertTracksList(mNewTracks, mNewCovers); QCOMPARE(currentTrackChangedSpy.count(), 0); QCOMPARE(randomPlayChangedSpy.count(), 0); @@ -4960,7 +4960,7 @@ connect(&myDatabaseContent, &DatabaseInterface::tracksAdded, &myListener, &TracksListener::tracksAdded); - myDatabaseContent.insertTracksList(mNewTracks, mNewCovers, QStringLiteral("autoTest")); + myDatabaseContent.insertTracksList(mNewTracks, mNewCovers); QCOMPARE(currentTrackChangedSpy.count(), 0); QCOMPARE(randomPlayChangedSpy.count(), 0); @@ -5079,7 +5079,7 @@ connect(&myDatabaseContent, &DatabaseInterface::tracksAdded, &myListener, &TracksListener::tracksAdded); - myDatabaseContent.insertTracksList(mNewTracks, mNewCovers, QStringLiteral("autoTest")); + myDatabaseContent.insertTracksList(mNewTracks, mNewCovers); QCOMPARE(currentTrackChangedSpy.count(), 0); QCOMPARE(randomPlayChangedSpy.count(), 0); @@ -5214,7 +5214,7 @@ QCOMPARE(repeatPlayChangedSpy.count(), 1); QCOMPARE(playListFinishedSpy.count(), 0); - myDatabaseContent.insertTracksList(mNewTracks, mNewCovers, QStringLiteral("autoTest")); + myDatabaseContent.insertTracksList(mNewTracks, mNewCovers); myPlayList.enqueue({myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track1"), QStringLiteral("artist1"), QStringLiteral("album2"), 1, 1), QStringLiteral("track1")}, @@ -5310,7 +5310,7 @@ QCOMPARE(repeatPlayChangedRestoreSpy.count(), 0); QCOMPARE(playListFinishedRestoreSpy.count(), 0); - myDatabaseContent.insertTracksList(mNewTracks, mNewCovers, QStringLiteral("autoTest")); + myDatabaseContent.insertTracksList(mNewTracks, mNewCovers); QCOMPARE(currentTrackChangedSaveSpy.count(), 0); QCOMPARE(randomPlayChangedSaveSpy.count(), 0); @@ -5448,7 +5448,7 @@ connect(&myDatabaseContent, &DatabaseInterface::tracksAdded, &myListener, &TracksListener::tracksAdded); - myDatabaseContent.insertTracksList(mNewTracks, mNewCovers, QStringLiteral("autoTest")); + myDatabaseContent.insertTracksList(mNewTracks, mNewCovers); QCOMPARE(currentTrackChangedSpy.count(), 0); QCOMPARE(randomPlayChangedSpy.count(), 0); @@ -5546,7 +5546,7 @@ connect(&myDatabaseContent, &DatabaseInterface::tracksAdded, &myListener, &TracksListener::tracksAdded); - myDatabaseContent.insertTracksList(mNewTracks, mNewCovers, QStringLiteral("autoTest")); + myDatabaseContent.insertTracksList(mNewTracks, mNewCovers); QCOMPARE(currentTrackChangedSpy.count(), 0); QCOMPARE(randomPlayChangedSpy.count(), 0); @@ -5627,7 +5627,7 @@ QCOMPARE(repeatPlayChangedSpy.count(), 0); QCOMPARE(playListFinishedSpy.count(), 0); - myDatabaseContent.insertTracksList(mNewTracks, mNewCovers, QStringLiteral("autoTest")); + myDatabaseContent.insertTracksList(mNewTracks, mNewCovers); QCOMPARE(currentTrackChangedSpy.count(), 0); QCOMPARE(randomPlayChangedSpy.count(), 0); @@ -5696,7 +5696,7 @@ QCOMPARE(repeatPlayChangedSpy.count(), 0); QCOMPARE(playListFinishedSpy.count(), 0); - myDatabaseContent.insertTracksList(mNewTracks, mNewCovers, QStringLiteral("autoTest")); + myDatabaseContent.insertTracksList(mNewTracks, mNewCovers); QCOMPARE(currentTrackChangedSpy.count(), 0); QCOMPARE(randomPlayChangedSpy.count(), 0); @@ -5838,7 +5838,7 @@ QCOMPARE(playListLoadedRestoreSpy.count(), 0); QCOMPARE(playListLoadFailedRestoreSpy.count(), 0); - myDatabaseContent.insertTracksList(mNewTracks, mNewCovers, QStringLiteral("autoTest")); + myDatabaseContent.insertTracksList(mNewTracks, mNewCovers); QCOMPARE(currentTrackChangedSaveSpy.count(), 0); QCOMPARE(randomPlayChangedSaveSpy.count(), 0); @@ -5993,7 +5993,7 @@ connect(&myDatabaseContent, &DatabaseInterface::tracksAdded, &myListener, &TracksListener::tracksAdded); - myDatabaseContent.insertTracksList(mNewTracks, mNewCovers, QStringLiteral("autoTest")); + myDatabaseContent.insertTracksList(mNewTracks, mNewCovers); QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); @@ -6094,7 +6094,7 @@ connect(&myDatabaseContent, &DatabaseInterface::tracksAdded, &myListener, &TracksListener::tracksAdded); - myDatabaseContent.insertTracksList(mNewTracks, mNewCovers, QStringLiteral("autoTest")); + myDatabaseContent.insertTracksList(mNewTracks, mNewCovers); QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); @@ -6199,7 +6199,7 @@ connect(&myDatabaseContent, &DatabaseInterface::tracksAdded, &myListener, &TracksListener::tracksAdded); - myDatabaseContent.insertTracksList(mNewTracks, mNewCovers, QStringLiteral("autoTest")); + myDatabaseContent.insertTracksList(mNewTracks, mNewCovers); QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); diff --git a/autotests/trackslistenertest.cpp b/autotests/trackslistenertest.cpp --- a/autotests/trackslistenertest.cpp +++ b/autotests/trackslistenertest.cpp @@ -94,7 +94,7 @@ QCOMPARE(trackHasBeenRemovedSpy.count(), 0); QCOMPARE(tracksListAddedSpy.count(), 0); - myDatabaseContent.insertTracksList(mNewTracks, mNewCovers, QStringLiteral("autoTest")); + myDatabaseContent.insertTracksList(mNewTracks, mNewCovers); QCOMPARE(trackHasChangedSpy.count(), 0); QCOMPARE(trackHasBeenRemovedSpy.count(), 0); @@ -216,7 +216,7 @@ QCOMPARE(trackHasBeenRemovedSpy.count(), 0); QCOMPARE(tracksListAddedSpy.count(), 0); - myDatabaseContent.insertTracksList(mNewTracks, mNewCovers, QStringLiteral("autoTest")); + myDatabaseContent.insertTracksList(mNewTracks, mNewCovers); QCOMPARE(trackHasChangedSpy.count(), 0); QCOMPARE(trackHasBeenRemovedSpy.count(), 0); @@ -283,7 +283,7 @@ QCOMPARE(trackHasBeenRemovedSpy.count(), 0); QCOMPARE(tracksListAddedSpy.count(), 0); - myDatabaseContent.insertTracksList(mNewTracks, mNewCovers, QStringLiteral("autoTest")); + myDatabaseContent.insertTracksList(mNewTracks, mNewCovers); QCOMPARE(trackHasChangedSpy.count(), 0); QCOMPARE(trackHasBeenRemovedSpy.count(), 0); @@ -362,7 +362,7 @@ QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::ColumnsRoles::TrackNumberRole).toInt(), -1); QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::ColumnsRoles::DiscNumberRole).toInt(), 0); - myDatabaseContent.insertTracksList(mNewTracks, mNewCovers, QStringLiteral("autoTest")); + myDatabaseContent.insertTracksList(mNewTracks, mNewCovers); QCOMPARE(trackHasChangedSpy.count(), 1); QCOMPARE(trackHasBeenRemovedSpy.count(), 0); @@ -416,7 +416,7 @@ QCOMPARE(trackHasBeenRemovedSpy.count(), 0); QCOMPARE(tracksListAddedSpy.count(), 0); - myDatabaseContent.insertTracksList(mNewTracks, mNewCovers, QStringLiteral("autoTest")); + myDatabaseContent.insertTracksList(mNewTracks, mNewCovers); QCOMPARE(trackHasChangedSpy.count(), 0); QCOMPARE(trackHasBeenRemovedSpy.count(), 0); @@ -446,7 +446,7 @@ QDateTime::fromMSecsSinceEpoch(1), {QUrl::fromLocalFile(QStringLiteral("file://image$1"))}, 1, false, {}, {}, QStringLiteral("lyricist1"), false} - }, mNewCovers, QStringLiteral("autoTest")); + }, mNewCovers); QCOMPARE(trackHasChangedSpy.count(), 2); QCOMPARE(trackHasBeenRemovedSpy.count(), 0); diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -31,6 +31,20 @@ models/viewsmodel.cpp ) +ecm_qt_declare_logging_category(elisaLib_SOURCES + HEADER "indexersManager.h" + IDENTIFIER "orgKdeElisaIndexersManager" + CATEGORY_NAME "org.kde.elisa.indexers.manager" + DEFAULT_SEVERITY Info + ) + +ecm_qt_declare_logging_category(elisaLib_SOURCES + HEADER "abstractfile/indexercommon.h" + IDENTIFIER "orgKdeElisaIndexer" + CATEGORY_NAME "org.kde.elisa.indexer" + DEFAULT_SEVERITY Info + ) + if (LIBVLC_FOUND) set(elisaLib_SOURCES ${elisaLib_SOURCES} @@ -60,10 +74,18 @@ if (KF5Baloo_FOUND) if (Qt5DBus_FOUND) + ecm_qt_declare_logging_category(elisaLib_SOURCES + HEADER "baloo/baloocommon.h" + IDENTIFIER "orgKdeElisaBaloo" + CATEGORY_NAME "org.kde.elisa.baloo" + DEFAULT_SEVERITY Info + ) + set(elisaLib_SOURCES ${elisaLib_SOURCES} baloo/localbaloofilelisting.cpp baloo/baloolistener.cpp + baloo/baloodetector.cpp ) qt5_add_dbus_interface(elisaLib_SOURCES diff --git a/src/abstractfile/abstractfilelistener.h b/src/abstractfile/abstractfilelistener.h --- a/src/abstractfile/abstractfilelistener.h +++ b/src/abstractfile/abstractfilelistener.h @@ -61,7 +61,7 @@ void configurationChanged(); - void clearDatabase(const QString &listenerName); + void clearDatabase(); void newNotification(NotificationItem notification); @@ -75,6 +75,8 @@ void quitListener(); + void setAllRootPaths(const QStringList &allRootPaths); + protected: void setFileListing(AbstractFileListing *fileIndexer); diff --git a/src/abstractfile/abstractfilelistener.cpp b/src/abstractfile/abstractfilelistener.cpp --- a/src/abstractfile/abstractfilelistener.cpp +++ b/src/abstractfile/abstractfilelistener.cpp @@ -62,8 +62,10 @@ d->mFileListing, &AbstractFileListing::restoredTracks); connect(model, &DatabaseInterface::cleanedDatabase, d->mFileListing, &AbstractFileListing::refreshContent); - - QMetaObject::invokeMethod(d->mFileListing, "init", Qt::QueuedConnection); + connect(model, &DatabaseInterface::finishRemovingTracksList, + d->mFileListing, &AbstractFileListing::databaseFinishedRemovingTracksList); + connect(model, &DatabaseInterface::finishInsertingTracksList, + d->mFileListing, &AbstractFileListing::databaseFinishedInsertingTracksList); } Q_EMIT databaseInterfaceChanged(); @@ -81,7 +83,12 @@ { applicationAboutToQuit(); - Q_EMIT clearDatabase(d->mFileListing->sourceName()); + Q_EMIT clearDatabase(); +} + +void AbstractFileListener::setAllRootPaths(const QStringList &allRootPaths) +{ + d->mFileListing->setAllRootPaths(allRootPaths); } void AbstractFileListener::setFileListing(AbstractFileListing *fileIndexer) diff --git a/src/abstractfile/abstractfilelisting.h b/src/abstractfile/abstractfilelisting.h --- a/src/abstractfile/abstractfilelisting.h +++ b/src/abstractfile/abstractfilelisting.h @@ -44,21 +44,21 @@ public: - explicit AbstractFileListing(const QString &sourceName, QObject *parent = nullptr); + explicit AbstractFileListing(QObject *parent = nullptr); ~AbstractFileListing() override; virtual void applicationAboutToQuit(); - const QString &sourceName() const; + const QStringList& allRootPaths() const; Q_SIGNALS: - void tracksList(const QList &tracks, const QHash &covers, const QString &musicSource); + void tracksList(const QList &tracks, const QHash &covers); void removedTracksList(const QList &removedTracks); - void modifyTracksList(const QList &modifiedTracks, const QHash &covers, const QString &musicSource); + void modifyTracksList(const QList &modifiedTracks, const QHash &covers); void indexingStarted(); @@ -68,9 +68,7 @@ void closeNotification(QString notificationId); - void askRestoredTracks(const QString &musicSource); - - void errorWatchingFiles(); + void askRestoredTracks(); public Q_SLOTS: @@ -80,7 +78,13 @@ void newTrackFile(const MusicAudioTrack &partialTrack); - void restoredTracks(const QString &musicSource, QHash allFiles); + void restoredTracks(QHash allFiles); + + void setAllRootPaths(const QStringList &allRootPaths); + + void databaseFinishedInsertingTracksList(); + + void databaseFinishedRemovingTracksList(); protected Q_SLOTS: @@ -114,16 +118,18 @@ void removeFile(const QUrl &oneRemovedTrack, QList &allRemovedFiles); - void setSourceName(const QString &name); - QHash& allFiles(); void checkFilesToRemove(); FileScanner& fileScanner(); bool checkEmbeddedCoverImage(const QString &localFileName); + bool waitEndTrackRemoval() const; + + void setWaitEndTrackRemoval(bool wait); + private: std::unique_ptr d; diff --git a/src/abstractfile/abstractfilelisting.cpp b/src/abstractfile/abstractfilelisting.cpp --- a/src/abstractfile/abstractfilelisting.cpp +++ b/src/abstractfile/abstractfilelisting.cpp @@ -19,6 +19,8 @@ #include "config-upnp-qt.h" +#include "abstractfile/indexercommon.h" + #include "musicaudiotrack.h" #include "notificationitem.h" #include "filescanner.h" @@ -48,18 +50,14 @@ { public: - explicit AbstractFileListingPrivate(QString sourceName) : mSourceName(std::move(sourceName)) - { - } + QStringList mAllRootPaths; QFileSystemWatcher mFileSystemWatcher; QHash mAllAlbumCover; QHash>> mDiscoveredFiles; - QString mSourceName; - FileScanner mFileScanner; QMimeDatabase mMimeDb; @@ -80,9 +78,11 @@ bool mHandleNewFiles = true; + bool mWaitEndTrackRemoval = false; + }; -AbstractFileListing::AbstractFileListing(const QString &sourceName, QObject *parent) : QObject(parent), d(std::make_unique(sourceName)) +AbstractFileListing::AbstractFileListing(QObject *parent) : QObject(parent), d(std::make_unique()) { connect(&d->mFileSystemWatcher, &QFileSystemWatcher::directoryChanged, this, &AbstractFileListing::directoryChanged); @@ -95,33 +95,57 @@ void AbstractFileListing::init() { - Q_EMIT askRestoredTracks(sourceName()); + Q_EMIT askRestoredTracks(); } void AbstractFileListing::newTrackFile(const MusicAudioTrack &partialTrack) { auto scanFileInfo = QFileInfo(partialTrack.resourceURI().toLocalFile()); const auto &newTrack = scanOneFile(partialTrack.resourceURI(), scanFileInfo); if (newTrack.isValid() && newTrack != partialTrack) { - Q_EMIT modifyTracksList({newTrack}, d->mAllAlbumCover, d->mSourceName); + Q_EMIT modifyTracksList({newTrack}, d->mAllAlbumCover); } } -void AbstractFileListing::restoredTracks(const QString &musicSource, QHash allFiles) +void AbstractFileListing::restoredTracks(QHash allFiles) { - if (musicSource == sourceName()) { - executeInit(std::move(allFiles)); + executeInit(std::move(allFiles)); - refreshContent(); + refreshContent(); +} + +void AbstractFileListing::setAllRootPaths(const QStringList &allRootPaths) +{ + if (d->mAllRootPaths == allRootPaths) { + return; + } + + d->mAllRootPaths = allRootPaths; +} + +void AbstractFileListing::databaseFinishedInsertingTracksList() +{ +} + +void AbstractFileListing::databaseFinishedRemovingTracksList() +{ + if (waitEndTrackRemoval()) { + Q_EMIT indexingFinished(); + setWaitEndTrackRemoval(false); } } void AbstractFileListing::applicationAboutToQuit() { d->mStopRequest = 1; } +const QStringList &AbstractFileListing::allRootPaths() const +{ + return d->mAllRootPaths; +} + void AbstractFileListing::scanDirectory(QList &newFiles, const QUrl &path) { if (d->mStopRequest == 1) { @@ -230,11 +254,6 @@ } } -const QString &AbstractFileListing::sourceName() const -{ - return d->mSourceName; -} - void AbstractFileListing::directoryChanged(const QString &path) { const auto directoryEntry = d->mDiscoveredFiles.find(QUrl::fromLocalFile(path)); @@ -257,7 +276,7 @@ auto modifiedTrack = scanOneFile(modifiedFile, modifiedFileInfo); if (modifiedTrack.isValid()) { - Q_EMIT modifyTracksList({modifiedTrack}, d->mAllAlbumCover, d->mSourceName); + Q_EMIT modifyTracksList({modifiedTrack}, d->mAllAlbumCover); } } @@ -280,6 +299,8 @@ { MusicAudioTrack newTrack; + qCDebug(orgKdeElisaIndexer) << "AbstractFileListing::scanOneFile" << scanFile; + auto localFileName = scanFile.toLocalFile(); const auto &fileMimeType = d->mMimeDb.mimeTypeForFile(localFileName); @@ -314,9 +335,7 @@ void AbstractFileListing::watchPath(const QString &pathName) { if (!d->mFileSystemWatcher.addPath(pathName)) { - Q_EMIT errorWatchingFiles(); - - qDebug() << "AbstractFileListing::watchPath" << "fail for" << pathName; + qCDebug(orgKdeElisaIndexer) << "AbstractFileListing::watchPath" << "fail for" << pathName; } } @@ -364,7 +383,7 @@ void AbstractFileListing::emitNewFiles(const QList &tracks) { - Q_EMIT tracksList(tracks, d->mAllAlbumCover, d->mSourceName); + Q_EMIT tracksList(tracks, d->mAllAlbumCover); } void AbstractFileListing::addCover(const MusicAudioTrack &newTrack) @@ -424,11 +443,6 @@ } } -void AbstractFileListing::setSourceName(const QString &name) -{ - d->mSourceName = name; -} - QHash &AbstractFileListing::allFiles() { return d->mAllFiles; @@ -443,6 +457,7 @@ } if (!allRemovedFiles.isEmpty()) { + setWaitEndTrackRemoval(true); Q_EMIT removedTracksList(allRemovedFiles); } } @@ -467,5 +482,15 @@ return false; } +bool AbstractFileListing::waitEndTrackRemoval() const +{ + return d->mWaitEndTrackRemoval; +} + +void AbstractFileListing::setWaitEndTrackRemoval(bool wait) +{ + d->mWaitEndTrackRemoval = wait; +} + #include "moc_abstractfilelisting.cpp" diff --git a/src/baloo/baloodetector.h b/src/baloo/baloodetector.h new file mode 100644 --- /dev/null +++ b/src/baloo/baloodetector.h @@ -0,0 +1,67 @@ +/* + * Copyright 2016-2019 Matthieu Gallien + * + * This program is free software: you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + */ + +#ifndef BALOODETECTOR_H +#define BALOODETECTOR_H + +#include +#include + +class BalooDetector : public QObject +{ + + Q_OBJECT + + Q_PROPERTY(bool balooAvailability + READ balooAvailability + NOTIFY balooAvailabilityChanged) + +public: + + explicit BalooDetector(QObject *parent = nullptr); + + bool balooAvailability() const; + +Q_SIGNALS: + + void balooAvailabilityChanged(); + +public Q_SLOTS: + + void checkBalooAvailability(); + +private Q_SLOTS: + + void serviceRegistered(const QString &service); + + void serviceUnregistered(const QString &service); + +private: + + bool checkBalooConfiguration(); + + bool checkBalooServiceIsRunning(); + + void signalBalooAvailability(bool isAvailable); + + QDBusServiceWatcher mBalooWatcher; + + bool mBalooAvailability = false; + +}; + +#endif // BALOODETECTOR_H diff --git a/src/baloo/baloodetector.cpp b/src/baloo/baloodetector.cpp new file mode 100644 --- /dev/null +++ b/src/baloo/baloodetector.cpp @@ -0,0 +1,117 @@ +/* + * Copyright 2016-2019 Matthieu Gallien + * + * This program is free software: you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + */ + +#include "baloodetector.h" + +#include "baloo/baloocommon.h" + +#include + +#include +#include + +BalooDetector::BalooDetector(QObject *parent) : QObject(parent) +{ + connect(&mBalooWatcher, &QDBusServiceWatcher::serviceRegistered, + this, &BalooDetector::serviceRegistered); + connect(&mBalooWatcher, &QDBusServiceWatcher::serviceUnregistered, + this, &BalooDetector::serviceUnregistered); +} + +bool BalooDetector::balooAvailability() const +{ + return mBalooAvailability; +} + +void BalooDetector::checkBalooAvailability() +{ + bool problemDetected = false; + + problemDetected = problemDetected || checkBalooConfiguration(); + + mBalooWatcher.setWatchedServices({QStringLiteral("org.kde.baloo")}); + + problemDetected = problemDetected || checkBalooServiceIsRunning(); + + signalBalooAvailability(problemDetected); +} + +void BalooDetector::serviceRegistered(const QString &service) +{ + Q_UNUSED(service); + + bool problemDetected = false; + + problemDetected = problemDetected || checkBalooConfiguration(); + problemDetected = problemDetected || checkBalooServiceIsRunning(); + + signalBalooAvailability(problemDetected); +} + +void BalooDetector::serviceUnregistered(const QString &service) +{ + Q_UNUSED(service); + + if (mBalooAvailability) { + qCInfo(orgKdeElisaBaloo) << "Baloo service is no longer detected and seems not be running. Disabling Elisa support for using Baloo indexer."; + + mBalooAvailability = false; + Q_EMIT balooAvailabilityChanged(); + } +} + +bool BalooDetector::checkBalooConfiguration() +{ + Baloo::IndexerConfig balooConfiguration; + + auto problemDetected = !balooConfiguration.fileIndexingEnabled(); + + if (problemDetected) { + qCInfo(orgKdeElisaBaloo) << "Baloo indexer has been configured to be deactivated. Disabling Elisa support for using Baloo indexer."; + } + + return problemDetected; +} + +bool BalooDetector::checkBalooServiceIsRunning() +{ + auto problemDetected = !QDBusConnection::sessionBus().interface()->isServiceRegistered(QStringLiteral("org.kde.baloo")); + + if (problemDetected) { + qCInfo(orgKdeElisaBaloo) << "Baloo service is not detected and seems not be running. Disabling Elisa support for using Baloo indexer."; + } + + return problemDetected; +} + +void BalooDetector::signalBalooAvailability(bool isAvailable) +{ + if (!isAvailable) { + if (!mBalooAvailability) { + mBalooAvailability = true; + Q_EMIT balooAvailabilityChanged(); + } + } else { + if (mBalooAvailability) { + mBalooAvailability = false; + Q_EMIT balooAvailabilityChanged(); + } + } +} + + +#include "moc_baloodetector.cpp" diff --git a/src/baloo/localbaloofilelisting.h b/src/baloo/localbaloofilelisting.h --- a/src/baloo/localbaloofilelisting.h +++ b/src/baloo/localbaloofilelisting.h @@ -57,10 +57,6 @@ void serviceUnregistered(const QString &serviceName); - void fixBalooConfiguration(); - - void disableBalooIndexer(); - private Q_SLOTS: void newBalooFile(const QString &fileName); @@ -79,8 +75,6 @@ MusicAudioTrack scanOneFile(const QUrl &scanFile, const QFileInfo &scanFileInfo) override; - bool checkBalooConfiguration(); - std::unique_ptr d; }; diff --git a/src/baloo/localbaloofilelisting.cpp b/src/baloo/localbaloofilelisting.cpp --- a/src/baloo/localbaloofilelisting.cpp +++ b/src/baloo/localbaloofilelisting.cpp @@ -17,6 +17,8 @@ #include "localbaloofilelisting.h" +#include "baloo/baloocommon.h" + #include "musicaudiotrack.h" #include "notificationitem.h" #include "elisa_settings.h" @@ -87,7 +89,7 @@ }; LocalBalooFileListing::LocalBalooFileListing(QObject *parent) - : AbstractFileListing(QStringLiteral("baloo"), parent), d(std::make_unique()) + : AbstractFileListing(parent), d(std::make_unique()) { d->mQuery.addType(QStringLiteral("Audio")); setHandleNewFiles(false); @@ -126,6 +128,8 @@ void LocalBalooFileListing::newBalooFile(const QString &fileName) { + Q_EMIT indexingStarted(); + auto scanFileInfo = QFileInfo(fileName); if (!scanFileInfo.exists()) { @@ -143,19 +147,21 @@ emitNewFiles({newTrack}); } + + Q_EMIT indexingFinished(); } void LocalBalooFileListing::registeredToBaloo(QDBusPendingCallWatcher *watcher) { - qDebug() << "LocalBalooFileListing::registeredToBaloo"; + qCDebug(orgKdeElisaBaloo) << "LocalBalooFileListing::registeredToBaloo"; if (!watcher) { return; } QDBusPendingReply<> reply = *watcher; if (reply.isError()) { - qDebug() << "LocalBalooFileListing::registeredToBaloo" << reply.error().name() << reply.error().message(); + qCDebug(orgKdeElisaBaloo) << "LocalBalooFileListing::registeredToBaloo" << reply.error().name() << reply.error().message(); d->mIsRegisteredToBaloo = false; } else { d->mIsRegisteredToBaloo = true; @@ -168,15 +174,15 @@ void LocalBalooFileListing::registeredToBalooWatcher(QDBusPendingCallWatcher *watcher) { - qDebug() << "LocalBalooFileListing::registeredToBalooWatcher"; + qCDebug(orgKdeElisaBaloo) << "LocalBalooFileListing::registeredToBalooWatcher"; if (!watcher) { return; } QDBusPendingReply<> reply = *watcher; if (reply.isError()) { - qDebug() << "LocalBalooFileListing::registeredToBalooWatcher" << reply.error().name() << reply.error().message(); + qCDebug(orgKdeElisaBaloo) << "LocalBalooFileListing::registeredToBalooWatcher" << reply.error().name() << reply.error().message(); d->mIsRegisteredToBalooWatcher = false; } else { d->mIsRegisteredToBalooWatcher = true; @@ -190,11 +196,11 @@ void LocalBalooFileListing::registerToBaloo() { if (d->mIsRegisteringToBaloo || d->mIsRegisteringToBalooWatcher) { - qDebug() << "LocalBalooFileListing::registerToBaloo" << "already registering"; + qCDebug(orgKdeElisaBaloo) << "LocalBalooFileListing::registerToBaloo" << "already registering"; return; } - qDebug() << "LocalBalooFileListing::registerToBaloo"; + qCDebug(orgKdeElisaBaloo) << "LocalBalooFileListing::registerToBaloo"; d->mIsRegisteringToBaloo = true; d->mIsRegisteringToBalooWatcher = true; @@ -205,15 +211,15 @@ sessionBus, this)); if (!d->mBalooMainInterface->isValid()) { - qDebug() << "LocalBalooFileListing::registerToBaloo" << "invalid org.kde.baloo/main interface"; + qCDebug(orgKdeElisaBaloo) << "LocalBalooFileListing::registerToBaloo" << "invalid org.kde.baloo/main interface"; return; } d->mBalooIndexer.reset(new org::kde::baloo::fileindexer(QStringLiteral("org.kde.baloo"), QStringLiteral("/fileindexer"), sessionBus, this)); if (!d->mBalooIndexer->isValid()) { - qDebug() << "LocalBalooFileListing::registerToBaloo" << "invalid org.kde.baloo/fileindexer interface"; + qCDebug(orgKdeElisaBaloo) << "LocalBalooFileListing::registerToBaloo" << "invalid org.kde.baloo/fileindexer interface"; return; } @@ -224,15 +230,15 @@ sessionBus, this)); if (!d->mBalooScheduler->isValid()) { - qDebug() << "LocalBalooFileListing::registerToBaloo" << "invalid org.kde.baloo/scheduler interface"; + qCDebug(orgKdeElisaBaloo) << "LocalBalooFileListing::registerToBaloo" << "invalid org.kde.baloo/scheduler interface"; return; } - qDebug() << "LocalBalooFileListing::registerToBaloo" << "call registerMonitor"; + qCDebug(orgKdeElisaBaloo) << "LocalBalooFileListing::registerToBaloo" << "call registerMonitor"; auto answer = d->mBalooIndexer->registerMonitor(); if (answer.isError()) { - qDebug() << "LocalBalooFileListing::executeInit" << answer.error().name() << answer.error().message(); + qCDebug(orgKdeElisaBaloo) << "LocalBalooFileListing::executeInit" << answer.error().name() << answer.error().message(); } auto pendingCallWatcher = new QDBusPendingCallWatcher(answer); @@ -243,7 +249,7 @@ } auto pendingCall = d->mBalooMainInterface->registerBalooWatcher(QStringLiteral("org.mpris.MediaPlayer2.elisa/org/kde/BalooWatcherApplication")); - qDebug() << "LocalBalooFileListing::registerToBaloo" << "call registerBalooWatcher"; + qCDebug(orgKdeElisaBaloo) << "LocalBalooFileListing::registerToBaloo" << "call registerBalooWatcher"; auto pendingCallWatcher2 = new QDBusPendingCallWatcher(pendingCall); connect(pendingCallWatcher2, &QDBusPendingCallWatcher::finished, this, &LocalBalooFileListing::registeredToBalooWatcher); @@ -254,15 +260,15 @@ void LocalBalooFileListing::renamedFiles(const QString &from, const QString &to, const QStringList &listFiles) { - qDebug() << "LocalBalooFileListing::renamedFiles" << from << to << listFiles; + qCDebug(orgKdeElisaBaloo) << "LocalBalooFileListing::renamedFiles" << from << to << listFiles; } void LocalBalooFileListing::serviceOwnerChanged(const QString &serviceName, const QString &oldOwner, const QString &newOwner) { Q_UNUSED(oldOwner); Q_UNUSED(newOwner); - qDebug() << "LocalBalooFileListing::serviceOwnerChanged" << serviceName << oldOwner << newOwner; + qCDebug(orgKdeElisaBaloo) << "LocalBalooFileListing::serviceOwnerChanged" << serviceName << oldOwner << newOwner; if (serviceName == QStringLiteral("org.kde.baloo") && !newOwner.isEmpty()) { d->mIsRegisteredToBaloo = false; @@ -273,16 +279,16 @@ void LocalBalooFileListing::serviceRegistered(const QString &serviceName) { - qDebug() << "LocalBalooFileListing::serviceRegistered" << serviceName; + qCDebug(orgKdeElisaBaloo) << "LocalBalooFileListing::serviceRegistered" << serviceName; if (serviceName == QStringLiteral("org.kde.baloo")) { registerToBaloo(); } } void LocalBalooFileListing::serviceUnregistered(const QString &serviceName) { - qDebug() << "LocalBalooFileListing::serviceUnregistered" << serviceName; + qCDebug(orgKdeElisaBaloo) << "LocalBalooFileListing::serviceUnregistered" << serviceName; if (serviceName == QStringLiteral("org.kde.baloo")) { d->mIsRegisteredToBaloo = false; @@ -297,19 +303,37 @@ void LocalBalooFileListing::triggerRefreshOfContent() { - if (!checkBalooConfiguration()) { - return; - } - Q_EMIT indexingStarted(); AbstractFileListing::triggerRefreshOfContent(); + const auto &rootPaths = allRootPaths(); + bool hasSingleRootPath = (rootPaths.size() == 1); + auto singleRootPath = rootPaths.at(0); + auto resultIterator = d->mQuery.exec(); auto newFiles = QList(); while(resultIterator.next() && d->mStopRequest == 0) { const auto &fileName = resultIterator.filePath(); + + if (hasSingleRootPath) { + if (!fileName.startsWith(singleRootPath)) { + continue; + } + } else { + bool isIncluded = false; + for (const auto &oneRootPath : rootPaths) { + if (fileName.startsWith(oneRootPath)) { + isIncluded = true; + break; + } + } + if (!isIncluded) { + continue; + } + } + const auto &newFileUrl = QUrl::fromLocalFile(resultIterator.filePath()); auto scanFileInfo = QFileInfo(fileName); @@ -345,15 +369,21 @@ emitNewFiles(newFiles); } + setWaitEndTrackRemoval(false); + checkFilesToRemove(); - Q_EMIT indexingFinished(); + if (!waitEndTrackRemoval()) { + Q_EMIT indexingFinished(); + } } MusicAudioTrack LocalBalooFileListing::scanOneFile(const QUrl &scanFile, const QFileInfo &scanFileInfo) { auto newTrack = MusicAudioTrack(); + qCDebug(orgKdeElisaBaloo) << "LocalBalooFileListing::scanOneFile" << scanFile; + auto localFileName = scanFile.toLocalFile(); Baloo::File match(localFileName); @@ -366,6 +396,7 @@ fileScanner().scanProperties(match, newTrack); if (!newTrack.isValid()) { + qCDebug(orgKdeElisaBaloo) << "LocalBalooFileListing::scanOneFile" << scanFile << "falling back to plain file metadata analysis"; newTrack = AbstractFileListing::scanOneFile(scanFile, scanFileInfo); } @@ -378,65 +409,5 @@ return newTrack; } -bool LocalBalooFileListing::checkBalooConfiguration() -{ - bool problemDetected = false; - Baloo::IndexerConfig balooConfiguration; - - problemDetected = problemDetected || !balooConfiguration.fileIndexingEnabled(); - problemDetected = problemDetected || balooConfiguration.onlyBasicIndexing(); - - if (problemDetected) { - NotificationItem balooInvalidConfiguration; - - balooInvalidConfiguration.setNotificationId(QStringLiteral("balooInvalidConfiguration")); - - balooInvalidConfiguration.setTargetObject(this); - - balooInvalidConfiguration.setMessage(i18nc("Notification about unusable Baloo Configuration", "Cannot discover music with the current file search settings")); - - balooInvalidConfiguration.setMainButtonText(i18nc("Text of button to modify Baloo Configuration", "Modify it")); - balooInvalidConfiguration.setMainButtonIconName(QStringLiteral("configure")); - balooInvalidConfiguration.setMainButtonMethodName(QStringLiteral("fixBalooConfiguration")); - - balooInvalidConfiguration.setSecondaryButtonText(i18nc("Text of button to disable Baloo indexer", "Disable Baloo support")); - balooInvalidConfiguration.setSecondaryButtonIconName(QStringLiteral("configure")); - balooInvalidConfiguration.setSecondaryButtonMethodName(QStringLiteral("disableBalooIndexer")); - - Q_EMIT newNotification(balooInvalidConfiguration); - } else { - Q_EMIT closeNotification(QStringLiteral("balooInvalidConfiguration")); - } - - return !problemDetected; -} - -void LocalBalooFileListing::fixBalooConfiguration() -{ - qDebug() << "LocalBalooFileListing::fixBalooConfiguration"; - - Baloo::IndexerConfig balooConfiguration; - - if (!balooConfiguration.fileIndexingEnabled()) { - balooConfiguration.setFileIndexingEnabled(true); - } - - if (balooConfiguration.onlyBasicIndexing()) { - balooConfiguration.setOnlyBasicIndexing(false); - } - - balooConfiguration.refresh(); - - if (checkBalooConfiguration()) { - triggerRefreshOfContent(); - } -} - -void LocalBalooFileListing::disableBalooIndexer() -{ - Elisa::ElisaConfiguration::self()->setBalooIndexer(false); - Elisa::ElisaConfiguration::self()->save(); -} - #include "moc_localbaloofilelisting.cpp" diff --git a/src/databaseinterface.h b/src/databaseinterface.h --- a/src/databaseinterface.h +++ b/src/databaseinterface.h @@ -368,19 +368,21 @@ void databaseError(); - void restoredTracks(const QString &musicSource, QHash allFiles); + void restoredTracks(QHash allFiles); void cleanedDatabase(); + void finishInsertingTracksList(); + + void finishRemovingTracksList(); + public Q_SLOTS: - void insertTracksList(const QList &tracks, const QHash &covers, const QString &musicSource); + void insertTracksList(const QList &tracks, const QHash &covers); void removeTracksList(const QList &removedTracks); - void removeAllTracksFromSource(const QString &sourceName); - - void askRestoredTracks(const QString &musicSource); + void askRestoredTracks(); void trackHasStartedPlaying(const QUrl &fileName, const QDateTime &time); @@ -453,15 +455,13 @@ qulonglong genericInitialId(QSqlQuery &request); - qulonglong insertMusicSource(const QString &name); - - void insertTrackOrigin(const QUrl &fileNameURI, const QDateTime &fileModifiedTime, const QDateTime &importDate, qulonglong discoverId); + void insertTrackOrigin(const QUrl &fileNameURI, const QDateTime &fileModifiedTime, const QDateTime &importDate); void updateTrackOrigin(const QUrl &fileName, const QDateTime &fileModifiedTime); int computeTrackPriority(const QString &title, const QString &trackArtist, const QString &album, const QString &albumArtist, const QString &trackPath); - qulonglong internalInsertTrack(qulonglong discoverId, const MusicAudioTrack &oneModifiedTrack, + qulonglong internalInsertTrack(const MusicAudioTrack &oneModifiedTrack, const QHash &covers, bool &isInserted); MusicAudioTrack buildTrackFromDatabaseRecord(const QSqlRecord &trackRecord) const; @@ -480,9 +480,7 @@ qulonglong insertLyricist(const QString &name); - qulonglong internalSourceIdFromName(const QString &sourceName); - - QHash internalAllFileNameFromSource(const QString &sourceName); + QHash internalAllFileName(); bool internalGenericPartialData(QSqlQuery &query); @@ -525,6 +523,8 @@ void upgradeDatabaseV11(); + void upgradeDatabaseV12(); + std::unique_ptr d; }; diff --git a/src/databaseinterface.cpp b/src/databaseinterface.cpp --- a/src/databaseinterface.cpp +++ b/src/databaseinterface.cpp @@ -58,7 +58,7 @@ mUpdateTrackPriority(mTracksDatabase), mUpdateTrackFileModifiedTime(mTracksDatabase), mSelectTracksMapping(mTracksDatabase), mSelectTracksMappingPriority(mTracksDatabase), mUpdateAlbumArtUriFromAlbumIdQuery(mTracksDatabase), mSelectTracksMappingPriorityByTrackId(mTracksDatabase), - mSelectAllTrackFilesFromSourceQuery(mTracksDatabase), mSelectAlbumIdsFromArtist(mTracksDatabase), + mSelectAlbumIdsFromArtist(mTracksDatabase), mSelectAllTrackFilesQuery(mTracksDatabase), mRemoveTracksMappingFromSource(mTracksDatabase), mRemoveTracksMapping(mTracksDatabase), mSelectTracksWithoutMappingQuery(mTracksDatabase), mSelectAlbumIdFromTitleAndArtistQuery(mTracksDatabase), mSelectAlbumIdFromTitleWithoutArtistQuery(mTracksDatabase), @@ -147,10 +147,10 @@ QSqlQuery mSelectTracksMappingPriorityByTrackId; - QSqlQuery mSelectAllTrackFilesFromSourceQuery; - QSqlQuery mSelectAlbumIdsFromArtist; + QSqlQuery mSelectAllTrackFilesQuery; + QSqlQuery mRemoveTracksMappingFromSource; QSqlQuery mRemoveTracksMapping; @@ -267,8 +267,6 @@ qulonglong mTrackId = 1; - qulonglong mDiscoverId = 1; - QAtomicInt mStopRequest = 0; bool mInitFinished = false; @@ -796,49 +794,16 @@ d->mStopRequest = 1; } -void DatabaseInterface::removeAllTracksFromSource(const QString &sourceName) +void DatabaseInterface::askRestoredTracks() { auto transactionResult = startTransaction(); if (!transactionResult) { return; } - initChangesTrackers(); - - auto allFileNames = internalAllFileNameFromSource(sourceName); - - auto allFileUrls = QList{}; - - for (auto oneUrlIt = allFileNames.begin(); oneUrlIt != allFileNames.end(); ++oneUrlIt) { - allFileUrls.push_back(oneUrlIt.key()); - } - - internalRemoveTracksList(allFileUrls); + auto result = internalAllFileName(); - if (!d->mInsertedArtists.isEmpty()) { - ListArtistDataType newArtists; - for (auto artistId : qAsConst(d->mInsertedArtists)) { - newArtists.push_back({{DatabaseIdRole, artistId}}); - } - Q_EMIT artistsAdded(newArtists); - } - - transactionResult = finishTransaction(); - if (!transactionResult) { - return; - } -} - -void DatabaseInterface::askRestoredTracks(const QString &musicSource) -{ - auto transactionResult = startTransaction(); - if (!transactionResult) { - return; - } - - auto result = internalAllFileNameFromSource(musicSource); - - Q_EMIT restoredTracks(musicSource, result); + Q_EMIT restoredTracks(result); transactionResult = finishTransaction(); if (!transactionResult) { @@ -968,14 +933,16 @@ d->mModifiedAlbumIds.insert(albumId); } -void DatabaseInterface::insertTracksList(const QList &tracks, const QHash &covers, const QString &musicSource) +void DatabaseInterface::insertTracksList(const QList &tracks, const QHash &covers) { if (d->mStopRequest == 1) { + Q_EMIT finishInsertingTracksList(); return; } auto transactionResult = startTransaction(); if (!transactionResult) { + Q_EMIT finishInsertingTracksList(); return; } @@ -996,35 +963,36 @@ d->mSelectTracksMapping.finish(); rollBackTransaction(); + Q_EMIT finishInsertingTracksList(); return; } bool isNewTrack = !d->mSelectTracksMapping.next(); - auto discoverId = insertMusicSource(musicSource); - if (isNewTrack) { insertTrackOrigin(oneTrack.resourceURI(), oneTrack.fileModificationTime(), - QDateTime::currentDateTime(), discoverId); + QDateTime::currentDateTime()); } else if (!d->mSelectTracksMapping.record().value(0).isNull() && d->mSelectTracksMapping.record().value(0).toULongLong() != 0) { updateTrackOrigin(oneTrack.resourceURI(), oneTrack.fileModificationTime()); } d->mSelectTracksMapping.finish(); bool isInserted = false; - const auto insertedTrackId = internalInsertTrack(discoverId, oneTrack, covers, isInserted); + const auto insertedTrackId = internalInsertTrack(oneTrack, covers, isInserted); if (isInserted && insertedTrackId != 0) { d->mInsertedTracks.insert(insertedTrackId); } if (d->mStopRequest == 1) { transactionResult = finishTransaction(); if (!transactionResult) { + Q_EMIT finishInsertingTracksList(); return; } + Q_EMIT finishInsertingTracksList(); return; } } @@ -1073,14 +1041,17 @@ transactionResult = finishTransaction(); if (!transactionResult) { + Q_EMIT finishInsertingTracksList(); return; } + Q_EMIT finishInsertingTracksList(); } void DatabaseInterface::removeTracksList(const QList &removedTracks) { auto transactionResult = startTransaction(); if (!transactionResult) { + Q_EMIT finishRemovingTracksList(); return; } @@ -1098,8 +1069,11 @@ transactionResult = finishTransaction(); if (!transactionResult) { + Q_EMIT finishRemovingTracksList(); return; } + + Q_EMIT finishRemovingTracksList(); } bool DatabaseInterface::startTransaction() const @@ -1199,9 +1173,13 @@ if (!listTables.contains(QStringLiteral("DatabaseVersionV11"))) { upgradeDatabaseV11(); } + if (!listTables.contains(QStringLiteral("DatabaseVersionV12"))) { + upgradeDatabaseV12(); + } } else { createDatabaseV9(); upgradeDatabaseV11(); + upgradeDatabaseV12(); } } @@ -1894,6 +1872,233 @@ qDebug() << "finished update to v11 of database schema"; } +void DatabaseInterface::upgradeDatabaseV12() +{ + qDebug() << "begin update to v12 of database schema"; + + { + QSqlQuery createSchemaQuery(d->mTracksDatabase); + + const auto &result = createSchemaQuery.exec(QStringLiteral("CREATE TABLE `DatabaseVersionV12` (`Version` INTEGER PRIMARY KEY NOT NULL)")); + + if (!result) { + qDebug() << "DatabaseInterface::initDatabase" << createSchemaQuery.lastQuery(); + qDebug() << "DatabaseInterface::initDatabase" << createSchemaQuery.lastError(); + + Q_EMIT databaseError(); + } + } + + { + QSqlQuery disableForeignKeys(d->mTracksDatabase); + + auto result = disableForeignKeys.exec(QStringLiteral(" PRAGMA foreign_keys=OFF")); + + if (!result) { + qDebug() << "DatabaseInterface::initDatabase" << disableForeignKeys.lastQuery(); + qDebug() << "DatabaseInterface::initDatabase" << disableForeignKeys.lastError(); + + Q_EMIT databaseError(); + } + } + + d->mTracksDatabase.transaction(); + + { + QSqlQuery createSchemaQuery(d->mTracksDatabase); + + const auto &result = createSchemaQuery.exec(QStringLiteral("CREATE TABLE `NewTracks` (" + "`ID` INTEGER PRIMARY KEY AUTOINCREMENT, " + "`FileName` VARCHAR(255) NOT NULL, " + "`Priority` INTEGER NOT NULL, " + "`Title` VARCHAR(85) NOT NULL, " + "`ArtistName` VARCHAR(55), " + "`AlbumTitle` VARCHAR(55), " + "`AlbumArtistName` VARCHAR(55), " + "`AlbumPath` VARCHAR(255), " + "`TrackNumber` INTEGER, " + "`DiscNumber` INTEGER, " + "`Duration` INTEGER NOT NULL, " + "`Rating` INTEGER NOT NULL DEFAULT 0, " + "`Genre` VARCHAR(55), " + "`Composer` VARCHAR(55), " + "`Lyricist` VARCHAR(55), " + "`Comment` VARCHAR(255), " + "`Year` INTEGER, " + "`Channels` INTEGER, " + "`BitRate` INTEGER, " + "`SampleRate` INTEGER, " + "`HasEmbeddedCover` BOOLEAN NOT NULL, " + "UNIQUE (" + "`FileName`" + "), " + "UNIQUE (" + "`Priority`, `Title`, `ArtistName`, " + "`AlbumTitle`, `AlbumArtistName`, `AlbumPath`" + "), " + "CONSTRAINT fk_fileName FOREIGN KEY (`FileName`) " + "REFERENCES `TracksData`(`FileName`) ON DELETE CASCADE, " + "CONSTRAINT fk_artist FOREIGN KEY (`ArtistName`) REFERENCES `Artists`(`Name`), " + "CONSTRAINT fk_tracks_composer FOREIGN KEY (`Composer`) REFERENCES `Composer`(`Name`), " + "CONSTRAINT fk_tracks_lyricist FOREIGN KEY (`Lyricist`) REFERENCES `Lyricist`(`Name`), " + "CONSTRAINT fk_tracks_genre FOREIGN KEY (`Genre`) REFERENCES `Genre`(`Name`), " + "CONSTRAINT fk_tracks_album FOREIGN KEY (" + "`AlbumTitle`, `AlbumArtistName`, `AlbumPath`)" + "REFERENCES `Albums`(`Title`, `ArtistName`, `AlbumPath`))")); + + if (!result) { + qDebug() << "DatabaseInterface::initDatabase" << createSchemaQuery.lastQuery(); + qDebug() << "DatabaseInterface::initDatabase" << createSchemaQuery.lastError(); + } + } + + { + QSqlQuery createSchemaQuery(d->mTracksDatabase); + + const auto &result = createSchemaQuery.exec(QStringLiteral("CREATE TABLE `NewTracksData` (" + "`FileName` VARCHAR(255) NOT NULL, " + "`FileModifiedTime` DATETIME NOT NULL, " + "`ImportDate` INTEGER NOT NULL, " + "`FirstPlayDate` INTEGER, " + "`LastPlayDate` INTEGER, " + "`PlayCounter` INTEGER NOT NULL, " + "PRIMARY KEY (`FileName`))")); + + if (!result) { + qDebug() << "DatabaseInterface::initDatabase" << createSchemaQuery.lastQuery(); + qDebug() << "DatabaseInterface::initDatabase" << createSchemaQuery.lastError(); + } + } + + { + QSqlQuery copyDataQuery(d->mTracksDatabase); + + auto result = copyDataQuery.exec(QStringLiteral("INSERT INTO `NewTracksData` " + "SELECT " + "td.`FileName`, " + "td.`FileModifiedTime`, " + "td.`ImportDate`, " + "td.`FirstPlayDate`, " + "td.`LastPlayDate`, " + "td.`PlayCounter` " + "FROM " + "`TracksData` td")); + + if (!result) { + qDebug() << "DatabaseInterface::initDatabase" << copyDataQuery.lastQuery(); + qDebug() << "DatabaseInterface::initDatabase" << copyDataQuery.lastError(); + + Q_EMIT databaseError(); + } + } + + { + QSqlQuery copyDataQuery(d->mTracksDatabase); + + auto result = copyDataQuery.exec(QStringLiteral("INSERT INTO `NewTracks` " + "SELECT " + "t.`ID`, " + "t.`FileName`, " + "t.`Priority`, " + "t.`Title`, " + "t.`ArtistName`, " + "t.`AlbumTitle`, " + "t.`AlbumArtistName`, " + "t.`AlbumPath`, " + "t.`TrackNumber`, " + "t.`DiscNumber`, " + "t.`Duration`, " + "t.`Rating`, " + "t.`Genre`, " + "t.`Composer`, " + "t.`Lyricist`, " + "t.`Comment`, " + "t.`Year`, " + "t.`Channels`, " + "t.`BitRate`, " + "t.`SampleRate`, " + "t.`HasEmbeddedCover` " + "FROM " + "`Tracks` t")); + + if (!result) { + qDebug() << "DatabaseInterface::initDatabase" << copyDataQuery.lastQuery(); + qDebug() << "DatabaseInterface::initDatabase" << copyDataQuery.lastError(); + + Q_EMIT databaseError(); + } + } + + { + QSqlQuery createSchemaQuery(d->mTracksDatabase); + + auto result = createSchemaQuery.exec(QStringLiteral("DROP TABLE `TracksData`")); + + if (!result) { + qDebug() << "DatabaseInterface::initDatabase" << createSchemaQuery.lastQuery(); + qDebug() << "DatabaseInterface::initDatabase" << createSchemaQuery.lastError(); + + Q_EMIT databaseError(); + } + } + + { + QSqlQuery createSchemaQuery(d->mTracksDatabase); + + auto result = createSchemaQuery.exec(QStringLiteral("DROP TABLE `Tracks`")); + + if (!result) { + qDebug() << "DatabaseInterface::initDatabase" << createSchemaQuery.lastQuery(); + qDebug() << "DatabaseInterface::initDatabase" << createSchemaQuery.lastError(); + + Q_EMIT databaseError(); + } + } + + { + QSqlQuery createSchemaQuery(d->mTracksDatabase); + + auto result = createSchemaQuery.exec(QStringLiteral("ALTER TABLE `NewTracksData` RENAME TO `TracksData`")); + + if (!result) { + qDebug() << "DatabaseInterface::initDatabase" << createSchemaQuery.lastQuery(); + qDebug() << "DatabaseInterface::initDatabase" << createSchemaQuery.lastError(); + + Q_EMIT databaseError(); + } + } + + { + QSqlQuery createSchemaQuery(d->mTracksDatabase); + + auto result = createSchemaQuery.exec(QStringLiteral("ALTER TABLE `NewTracks` RENAME TO `Tracks`")); + + if (!result) { + qDebug() << "DatabaseInterface::initDatabase" << createSchemaQuery.lastQuery(); + qDebug() << "DatabaseInterface::initDatabase" << createSchemaQuery.lastError(); + + Q_EMIT databaseError(); + } + } + + d->mTracksDatabase.commit(); + + { + QSqlQuery enableForeignKeys(d->mTracksDatabase); + + auto result = enableForeignKeys.exec(QStringLiteral(" PRAGMA foreign_keys=ON")); + + if (!result) { + qDebug() << "DatabaseInterface::initDatabase" << enableForeignKeys.lastQuery(); + qDebug() << "DatabaseInterface::initDatabase" << enableForeignKeys.lastError(); + + Q_EMIT databaseError(); + } + } + + qDebug() << "finished update to v12 of database schema"; +} + void DatabaseInterface::initRequest() { auto transactionResult = startTransaction(); @@ -3066,11 +3271,10 @@ auto insertTrackMappingQueryText = QStringLiteral("INSERT INTO " "`TracksData` " "(`FileName`, " - "`DiscoverID`, " "`FileModifiedTime`, " "`ImportDate`, " "`PlayCounter`) " - "VALUES (:fileName, :discoverId, :mtime, :importDate, 0)"); + "VALUES (:fileName, :mtime, :importDate, 0)"); auto result = prepareQuery(d->mInsertTrackMapping, insertTrackMappingQueryText); @@ -3116,7 +3320,7 @@ { auto removeTracksMappingFromSourceQueryText = QStringLiteral("DELETE FROM `TracksData` " - "WHERE `FileName` = :fileName AND `DiscoverID` = :sourceId"); + "WHERE `FileName` = :fileName"); auto result = prepareQuery(d->mRemoveTracksMappingFromSource, removeTracksMappingFromSourceQueryText); @@ -3215,7 +3419,6 @@ auto selectTracksMappingQueryText = QStringLiteral("SELECT " "track.`ID`, " "trackData.`FileName`, " - "trackData.`DiscoverID`, " "track.`Priority`, " "trackData.`FileModifiedTime` " "FROM " @@ -3286,18 +3489,15 @@ "tracksMapping.`FileModifiedTime` " "FROM " "`TracksData` tracksMapping, " - "`Tracks` tracks, " - "`DiscoverSource` source " + "`Tracks` tracks " "WHERE " - "tracksMapping.`DiscoverID` = source.`ID` AND " - "tracks.`FileName` = tracksMapping.`FileName` AND " - "source.`Name` = :sourceName"); + "tracks.`FileName` = tracksMapping.`FileName`"); - auto result = prepareQuery(d->mSelectAllTrackFilesFromSourceQuery, selectAllTrackFilesFromSourceQueryText); + auto result = prepareQuery(d->mSelectAllTrackFilesQuery, selectAllTrackFilesFromSourceQueryText); if (!result) { - qDebug() << "DatabaseInterface::initRequest" << d->mSelectAllTrackFilesFromSourceQuery.lastQuery(); - qDebug() << "DatabaseInterface::initRequest" << d->mSelectAllTrackFilesFromSourceQuery.lastError(); + qDebug() << "DatabaseInterface::initRequest" << d->mSelectAllTrackFilesQuery.lastQuery(); + qDebug() << "DatabaseInterface::initRequest" << d->mSelectAllTrackFilesQuery.lastError(); Q_EMIT databaseError(); } @@ -3373,7 +3573,6 @@ auto insertTrackQueryText = QStringLiteral("INSERT INTO `Tracks` " "(" "`ID`, " - "`DiscoverID`, " "`FileName`, " "`Priority`, " "`Title`, " @@ -3397,7 +3596,6 @@ "VALUES " "(" ":trackId, " - ":discoverId, " ":fileName, " ":priority, " ":title, " @@ -4260,9 +4458,8 @@ } void DatabaseInterface::insertTrackOrigin(const QUrl &fileNameURI, const QDateTime &fileModifiedTime, - const QDateTime &importDate, qulonglong discoverId) + const QDateTime &importDate) { - d->mInsertTrackMapping.bindValue(QStringLiteral(":discoverId"), discoverId); d->mInsertTrackMapping.bindValue(QStringLiteral(":fileName"), fileNameURI); d->mInsertTrackMapping.bindValue(QStringLiteral(":priority"), 1); d->mInsertTrackMapping.bindValue(QStringLiteral(":mtime"), fileModifiedTime); @@ -4350,7 +4547,7 @@ return result; } -qulonglong DatabaseInterface::internalInsertTrack(qulonglong discoverId, const MusicAudioTrack &oneTrack, +qulonglong DatabaseInterface::internalInsertTrack(const MusicAudioTrack &oneTrack, const QHash &covers, bool &isInserted) { qulonglong resultId = 0; @@ -4451,7 +4648,6 @@ const auto &albumData = internalOneAlbumPartialData(albumId); d->mInsertTrackQuery.bindValue(QStringLiteral(":trackId"), existingTrackId); - d->mInsertTrackQuery.bindValue(QStringLiteral(":discoverId"), discoverId); d->mInsertTrackQuery.bindValue(QStringLiteral(":fileName"), oneTrack.resourceURI()); d->mInsertTrackQuery.bindValue(QStringLiteral(":priority"), priority); d->mInsertTrackQuery.bindValue(QStringLiteral(":title"), oneTrack.title()); @@ -4749,69 +4945,6 @@ return result; } -qulonglong DatabaseInterface::internalSourceIdFromName(const QString &sourceName) -{ - qulonglong sourceId = 0; - - d->mSelectMusicSource.bindValue(QStringLiteral(":name"), sourceName); - - auto queryResult = d->mSelectMusicSource.exec(); - - if (!queryResult || !d->mSelectMusicSource.isSelect() || !d->mSelectMusicSource.isActive()) { - Q_EMIT databaseError(); - - qDebug() << "DatabaseInterface::insertMusicSource" << d->mSelectMusicSource.lastQuery(); - qDebug() << "DatabaseInterface::insertMusicSource" << d->mSelectMusicSource.boundValues(); - qDebug() << "DatabaseInterface::insertMusicSource" << d->mSelectMusicSource.lastError(); - - d->mSelectMusicSource.finish(); - - return sourceId; - } - - if (!d->mSelectMusicSource.next()) { - return sourceId; - } - - sourceId = d->mSelectMusicSource.record().value(0).toULongLong(); - - d->mSelectMusicSource.finish(); - - return sourceId; -} - -QHash DatabaseInterface::internalAllFileNameFromSource(const QString &sourceName) -{ - QHash allFileNames; - - d->mSelectAllTrackFilesFromSourceQuery.bindValue(QStringLiteral(":sourceName"), sourceName); - - auto queryResult = d->mSelectAllTrackFilesFromSourceQuery.exec(); - - if (!queryResult || !d->mSelectAllTrackFilesFromSourceQuery.isSelect() || !d->mSelectAllTrackFilesFromSourceQuery.isActive()) { - Q_EMIT databaseError(); - - qDebug() << "DatabaseInterface::insertMusicSource" << d->mSelectAllTrackFilesFromSourceQuery.lastQuery(); - qDebug() << "DatabaseInterface::insertMusicSource" << d->mSelectAllTrackFilesFromSourceQuery.boundValues(); - qDebug() << "DatabaseInterface::insertMusicSource" << d->mSelectAllTrackFilesFromSourceQuery.lastError(); - - d->mSelectAllTrackFilesFromSourceQuery.finish(); - - return allFileNames; - } - - while(d->mSelectAllTrackFilesFromSourceQuery.next()) { - auto fileName = d->mSelectAllTrackFilesFromSourceQuery.record().value(0).toUrl(); - auto fileModificationTime = d->mSelectAllTrackFilesFromSourceQuery.record().value(1).toDateTime(); - - allFileNames[fileName] = fileModificationTime; - } - - d->mSelectAllTrackFilesFromSourceQuery.finish(); - - return allFileNames; -} - bool DatabaseInterface::internalGenericPartialData(QSqlQuery &query) { auto result = false; @@ -4902,6 +5035,36 @@ return result; } +QHash DatabaseInterface::internalAllFileName() +{ + auto allFileNames = QHash{}; + + auto queryResult = d->mSelectAllTrackFilesQuery.exec(); + + if (!queryResult || !d->mSelectAllTrackFilesQuery.isSelect() || !d->mSelectAllTrackFilesQuery.isActive()) { + Q_EMIT databaseError(); + + qDebug() << "DatabaseInterface::insertMusicSource" << d->mSelectAllTrackFilesQuery.lastQuery(); + qDebug() << "DatabaseInterface::insertMusicSource" << d->mSelectAllTrackFilesQuery.boundValues(); + qDebug() << "DatabaseInterface::insertMusicSource" << d->mSelectAllTrackFilesQuery.lastError(); + + d->mSelectAllTrackFilesQuery.finish(); + + return allFileNames; + } + + while(d->mSelectAllTrackFilesQuery.next()) { + auto fileName = d->mSelectAllTrackFilesQuery.record().value(0).toUrl(); + auto fileModificationTime = d->mSelectAllTrackFilesQuery.record().value(1).toDateTime(); + + allFileNames[fileName] = fileModificationTime; + } + + d->mSelectAllTrackFilesQuery.finish(); + + return allFileNames; +} + qulonglong DatabaseInterface::internalArtistIdFromName(const QString &name) { auto result = qulonglong(0); @@ -5118,60 +5281,6 @@ return result; } -qulonglong DatabaseInterface::insertMusicSource(const QString &name) -{ - qulonglong result = 0; - - d->mSelectMusicSource.bindValue(QStringLiteral(":name"), name); - - auto queryResult = d->mSelectMusicSource.exec(); - - if (!queryResult || !d->mSelectMusicSource.isSelect() || !d->mSelectMusicSource.isActive()) { - Q_EMIT databaseError(); - - qDebug() << "DatabaseInterface::insertMusicSource" << d->mSelectMusicSource.lastQuery(); - qDebug() << "DatabaseInterface::insertMusicSource" << d->mSelectMusicSource.boundValues(); - qDebug() << "DatabaseInterface::insertMusicSource" << d->mSelectMusicSource.lastError(); - - d->mSelectMusicSource.finish(); - - return result; - } - - if (d->mSelectMusicSource.next()) { - result = d->mSelectMusicSource.record().value(0).toULongLong(); - - d->mSelectMusicSource.finish(); - - return result; - } - - d->mSelectMusicSource.finish(); - - d->mInsertMusicSource.bindValue(QStringLiteral(":discoverId"), d->mDiscoverId); - d->mInsertMusicSource.bindValue(QStringLiteral(":name"), name); - - queryResult = d->mInsertMusicSource.exec(); - - if (!queryResult || !d->mInsertMusicSource.isActive()) { - Q_EMIT databaseError(); - - qDebug() << "DatabaseInterface::insertMusicSource" << d->mInsertMusicSource.lastQuery(); - qDebug() << "DatabaseInterface::insertMusicSource" << d->mInsertMusicSource.boundValues(); - qDebug() << "DatabaseInterface::insertMusicSource" << d->mInsertMusicSource.lastError(); - - d->mInsertMusicSource.finish(); - - return d->mDiscoverId; - } - - d->mInsertMusicSource.finish(); - - ++d->mDiscoverId; - - return d->mDiscoverId - 1; -} - QList DatabaseInterface::fetchTrackIds(qulonglong albumId) { auto allTracks = QList(); diff --git a/src/elisa_core.kcfg b/src/elisa_core.kcfg --- a/src/elisa_core.kcfg +++ b/src/elisa_core.kcfg @@ -4,17 +4,6 @@ xsi:schemaLocation="http://www.kde.org/standards/kcfg/1.0 http://www.kde.org/standards/kcfg/1.0/kcfg.xsd" > - - - true - - - true - - - true - - diff --git a/src/elisaimport.cpp b/src/elisaimport.cpp --- a/src/elisaimport.cpp +++ b/src/elisaimport.cpp @@ -54,7 +54,7 @@ MusicListenersManager myMusicManager; ElisaImportApplication myApplication; - QObject::connect(&myMusicManager, &MusicListenersManager::indexingRunningChanged, + QObject::connect(&myMusicManager, &MusicListenersManager::indexerBusyChanged, &myApplication, &ElisaImportApplication::indexingChanged); return app.exec(); diff --git a/src/file/filelistener.h b/src/file/filelistener.h --- a/src/file/filelistener.h +++ b/src/file/filelistener.h @@ -31,28 +31,13 @@ { Q_OBJECT - Q_PROPERTY(QString rootPath - READ rootPath - WRITE setRootPath - NOTIFY rootPathChanged) - public: explicit FileListener(QObject *parent = nullptr); ~FileListener() override; const LocalFileListing& localFileIndexer() const; - QString rootPath() const; - -Q_SIGNALS: - - void rootPathChanged(); - -public Q_SLOTS: - - void setRootPath(const QString &rootPath); - private: std::unique_ptr d; diff --git a/src/file/filelistener.cpp b/src/file/filelistener.cpp --- a/src/file/filelistener.cpp +++ b/src/file/filelistener.cpp @@ -33,8 +33,6 @@ FileListener::FileListener(QObject *parent) : AbstractFileListener(parent), d(std::make_unique()) { setFileListing(&d->mLocalFileIndexer); - connect(&d->mLocalFileIndexer, &LocalFileListing::rootPathChanged, - this, &FileListener::rootPathChanged); } FileListener::~FileListener() @@ -45,15 +43,5 @@ return d->mLocalFileIndexer; } -QString FileListener::rootPath() const -{ - return d->mLocalFileIndexer.rootPath(); -} - -void FileListener::setRootPath(const QString &rootPath) -{ - d->mLocalFileIndexer.setRootPath(rootPath); -} - #include "moc_filelistener.cpp" diff --git a/src/file/localfilelisting.h b/src/file/localfilelisting.h --- a/src/file/localfilelisting.h +++ b/src/file/localfilelisting.h @@ -33,27 +33,12 @@ Q_OBJECT - Q_PROPERTY(QString rootPath - READ rootPath - WRITE setRootPath - NOTIFY rootPathChanged) - public: explicit LocalFileListing(QObject *parent = nullptr); ~LocalFileListing() override; - QString rootPath() const; - -Q_SIGNALS: - - void rootPathChanged(); - -public Q_SLOTS: - - void setRootPath(const QString &rootPath); - private: void executeInit(QHash allFiles) override; diff --git a/src/file/localfilelisting.cpp b/src/file/localfilelisting.cpp --- a/src/file/localfilelisting.cpp +++ b/src/file/localfilelisting.cpp @@ -35,34 +35,15 @@ { public: - QString mRootPath; - }; -LocalFileListing::LocalFileListing(QObject *parent) : AbstractFileListing(QStringLiteral("local"), parent), d(std::make_unique()) +LocalFileListing::LocalFileListing(QObject *parent) : AbstractFileListing(parent), d(std::make_unique()) { } LocalFileListing::~LocalFileListing() = default; -QString LocalFileListing::rootPath() const -{ - return d->mRootPath; -} - -void LocalFileListing::setRootPath(const QString &rootPath) -{ - if (d->mRootPath == rootPath) { - return; - } - - d->mRootPath = rootPath; - Q_EMIT rootPathChanged(); - - setSourceName(rootPath); -} - void LocalFileListing::executeInit(QHash allFiles) { AbstractFileListing::executeInit(std::move(allFiles)); @@ -74,11 +55,18 @@ AbstractFileListing::triggerRefreshOfContent(); - scanDirectoryTree(d->mRootPath); + const auto &rootPaths = allRootPaths(); + for (const auto &onePath : rootPaths) { + scanDirectoryTree(onePath); + } + + setWaitEndTrackRemoval(false); checkFilesToRemove(); - Q_EMIT indexingFinished(); + if (!waitEndTrackRemoval()) { + Q_EMIT indexingFinished(); + } } diff --git a/src/localFileConfiguration/localfileconfiguration.cpp b/src/localFileConfiguration/localfileconfiguration.cpp --- a/src/localFileConfiguration/localfileconfiguration.cpp +++ b/src/localFileConfiguration/localfileconfiguration.cpp @@ -32,7 +32,7 @@ { KAboutData *about = new KAboutData(QStringLiteral("kcm_elisa_local_file"), i18n("Elisa Local Files Indexer Configuration"), - QStringLiteral("0.1"), {}, KAboutLicense::LGPL_V3, + QStringLiteral("0.3.80"), {}, KAboutLicense::LGPL_V3, i18n("Copyright 2017 Matthieu Gallien ")); about->addAuthor(i18n("Matthieu Gallien"),i18n("Author"), QStringLiteral("mgallien@mgallien.fr")); diff --git a/src/musiclistenersmanager.h b/src/musiclistenersmanager.h --- a/src/musiclistenersmanager.h +++ b/src/musiclistenersmanager.h @@ -47,10 +47,6 @@ READ importedTracksCount NOTIFY importedTracksCountChanged) - Q_PROPERTY(bool indexingRunning - READ isIndexingRunning - NOTIFY indexingRunningChanged) - Q_PROPERTY(ElisaApplication* elisaApplication READ elisaApplication WRITE setElisaApplication @@ -60,6 +56,26 @@ READ indexerBusy NOTIFY indexerBusyChanged) + Q_PROPERTY(bool fileSystemIndexerActive + READ fileSystemIndexerActive + NOTIFY fileSystemIndexerActiveChanged) + + Q_PROPERTY(bool balooIndexerActive + READ balooIndexerActive + NOTIFY balooIndexerActiveChanged) + + Q_PROPERTY(bool balooIndexerAvailable + READ balooIndexerAvailable + NOTIFY balooIndexerAvailableChanged) + + Q_PROPERTY(bool androidIndexerActive + READ androidIndexerActive + NOTIFY androidIndexerActiveChanged) + + Q_PROPERTY(bool androidIndexerAvailable + READ androidIndexerAvailable + NOTIFY androidIndexerAvailableChanged) + public: explicit MusicListenersManager(QObject *parent = nullptr); @@ -72,22 +88,28 @@ int importedTracksCount() const; - bool isIndexingRunning() const; - ElisaApplication* elisaApplication() const; bool indexerBusy() const; + bool fileSystemIndexerActive() const; + + bool balooIndexerActive() const; + + bool balooIndexerAvailable() const; + + bool androidIndexerActive() const; + + bool androidIndexerAvailable() const; + Q_SIGNALS: void viewDatabaseChanged(); void applicationIsTerminating(); void importedTracksCountChanged(); - void indexingRunningChanged(); - void newNotification(NotificationItem notification); void closeNotification(QString notificationId); @@ -102,6 +124,16 @@ void clearDatabase(); + void fileSystemIndexerActiveChanged(); + + void balooIndexerActiveChanged(); + + void balooIndexerAvailableChanged(); + + void androidIndexerActiveChanged(); + + void androidIndexerAvailableChanged(); + public Q_SLOTS: void databaseReady(); @@ -132,8 +164,16 @@ void cleanedDatabase(); + void balooAvailabilityChanged(); + private: + void testBalooIndexerAvailability(); + + void startLocalFileSystemIndexing(); + + void startBalooIndexing(); + std::unique_ptr d; void createTracksListener(); diff --git a/src/musiclistenersmanager.cpp b/src/musiclistenersmanager.cpp --- a/src/musiclistenersmanager.cpp +++ b/src/musiclistenersmanager.cpp @@ -19,12 +19,15 @@ #include "config-upnp-qt.h" +#include "indexersManager.h" + #if defined UPNPQT_FOUND && UPNPQT_FOUND #include "upnp/upnplistener.h" #endif #if defined KF5Baloo_FOUND && KF5Baloo_FOUND #include "baloo/baloolistener.h" +#include "baloo/baloodetector.h" #endif #if defined Qt5AndroidExtras_FOUND && Qt5AndroidExtras_FOUND @@ -52,9 +55,10 @@ #include #include #include - #include +#include + #include class MusicListenersManagerPrivate @@ -70,10 +74,12 @@ #endif #if defined KF5Baloo_FOUND && KF5Baloo_FOUND - std::unique_ptr mBalooListener; + BalooDetector mBalooDetector; + + BalooListener mBalooListener; #endif - std::list> mFileListener; + FileListener mFileListener; #if defined Qt5AndroidExtras_FOUND && Qt5AndroidExtras_FOUND std::unique_ptr mAndroidMusicListener; @@ -89,11 +95,17 @@ int mImportedTracksCount = 0; - int mActiveMusicListenersCount = 0; + bool mIndexerBusy = false; - bool mIndexingRunning = false; + bool mFileSystemIndexerActive = false; - bool mIndexerBusy = false; + bool mBalooIndexerActive = false; + + bool mBalooIndexerAvailable = false; + + bool mAndroidIndexerActive = false; + + bool mAndroidIndexerAvailable = false; }; @@ -147,6 +159,15 @@ connect(&d->mDatabaseInterface, &DatabaseInterface::tracksAdded, this, &MusicListenersManager::increaseImportedTracksCount); + +#if defined KF5Baloo_FOUND && KF5Baloo_FOUND + connect(&d->mBalooDetector, &BalooDetector::balooAvailabilityChanged, + this, &MusicListenersManager::balooAvailabilityChanged); +#endif + + qCInfo(orgKdeElisaIndexersManager) << "Local file system indexer is inactive"; + qCInfo(orgKdeElisaIndexersManager) << "Baloo indexer is unavailable"; + qCInfo(orgKdeElisaIndexersManager) << "Baloo indexer is inactive"; } MusicListenersManager::~MusicListenersManager() @@ -172,11 +193,6 @@ return d->mImportedTracksCount; } -bool MusicListenersManager::isIndexingRunning() const -{ - return d->mIndexingRunning; -} - ElisaApplication *MusicListenersManager::elisaApplication() const { return d->mElisaApplication; @@ -187,11 +203,33 @@ return d->mIndexerBusy; } -void MusicListenersManager::databaseReady() +bool MusicListenersManager::fileSystemIndexerActive() const { - d->mIndexerBusy = true; - Q_EMIT indexerBusyChanged(); + return d->mFileSystemIndexerActive; +} + +bool MusicListenersManager::balooIndexerActive() const +{ + return d->mBalooIndexerActive; +} +bool MusicListenersManager::balooIndexerAvailable() const +{ + return d->mBalooIndexerAvailable; +} + +bool MusicListenersManager::androidIndexerActive() const +{ + return d->mAndroidIndexerActive; +} + +bool MusicListenersManager::androidIndexerAvailable() const +{ + return d->mAndroidIndexerAvailable; +} + +void MusicListenersManager::databaseReady() +{ configChanged(); } @@ -227,7 +265,7 @@ void MusicListenersManager::playBackError(const QUrl &sourceInError, QMediaPlayer::Error playerError) { - qDebug() << "MusicListenersManager::playBackError" << sourceInError; + qCDebug(orgKdeElisaIndexersManager) << "MusicListenersManager::playBackError" << sourceInError; if (playerError == QMediaPlayer::ResourceError) { Q_EMIT removeTracksInError({sourceInError}); @@ -257,29 +295,27 @@ d->mConfigFileWatcher.addPath(currentConfiguration->config()->name()); currentConfiguration->load(); + currentConfiguration->read(); + + const auto &allRootPaths = currentConfiguration->rootPath(); + d->mFileListener.setAllRootPaths(allRootPaths); #if defined KF5Baloo_FOUND && KF5Baloo_FOUND - if (currentConfiguration->balooIndexer() && !d->mBalooListener) { - d->mBalooListener = std::make_unique(); - d->mBalooListener->moveToThread(&d->mListenerThread); - d->mBalooListener->setDatabaseInterface(&d->mDatabaseInterface); - connect(this, &MusicListenersManager::applicationIsTerminating, - d->mBalooListener.get(), &BalooListener::applicationAboutToQuit, Qt::DirectConnection); - connect(d->mBalooListener.get(), &BalooListener::indexingStarted, - this, &MusicListenersManager::monitorStartingListeners); - connect(d->mBalooListener.get(), &BalooListener::indexingFinished, - this, &MusicListenersManager::monitorEndingListeners); - connect(d->mBalooListener.get(), &BalooListener::clearDatabase, - &d->mDatabaseInterface, &DatabaseInterface::removeAllTracksFromSource); - connect(d->mBalooListener.get(), &BalooListener::newNotification, - this, &MusicListenersManager::newNotification); - connect(d->mBalooListener.get(), &BalooListener::closeNotification, - this, &MusicListenersManager::closeNotification); - } else if (!currentConfiguration->balooIndexer() && d->mBalooListener) { - QMetaObject::invokeMethod(d->mBalooListener.get(), "quitListener", Qt::QueuedConnection); - d->mBalooListener.reset(); - } + d->mBalooListener.setAllRootPaths(allRootPaths); #endif + + if (!d->mBalooIndexerActive && !d->mFileSystemIndexerActive) { + testBalooIndexerAvailability(); + } else { + if (d->mBalooIndexerActive) { +#if defined KF5Baloo_FOUND && KF5Baloo_FOUND + QMetaObject::invokeMethod(d->mBalooListener.fileListing(), "init", Qt::QueuedConnection); +#endif + } else if (d->mFileSystemIndexerActive) { + QMetaObject::invokeMethod(d->mFileListener.fileListing(), "init", Qt::QueuedConnection); + } + } + #if defined UPNPQT_FOUND && UPNPQT_FOUND d->mUpnpListener.setDatabaseInterface(&d->mDatabaseInterface); d->mUpnpListener.moveToThread(&d->mDatabaseThread); @@ -306,58 +342,12 @@ this, &MusicListenersManager::closeNotification); } #endif - - if (currentConfiguration->elisaFilesIndexer()) - { - const auto &allRootPaths = currentConfiguration->rootPath(); - for (auto itFileListener = d->mFileListener.begin(); itFileListener != d->mFileListener.end(); ) { - const auto ¤tRootPath = (*itFileListener)->localFileIndexer().rootPath(); - auto itPath = std::find(allRootPaths.begin(), allRootPaths.end(), currentRootPath); - - if (itPath == allRootPaths.end()) { - d->mDatabaseInterface.removeAllTracksFromSource((*itFileListener)->fileListing()->sourceName()); - itFileListener = d->mFileListener.erase(itFileListener); - } else { - ++itFileListener; - } - } - - for (const auto &oneRootPath : allRootPaths) { - auto itPath = std::find_if(d->mFileListener.begin(), d->mFileListener.end(), - [&oneRootPath](const auto &value)->bool {return value->localFileIndexer().rootPath() == oneRootPath;}); - if (itPath == d->mFileListener.end()) { - auto newFileIndexer = std::make_unique(); - - newFileIndexer->setDatabaseInterface(&d->mDatabaseInterface); - newFileIndexer->moveToThread(&d->mListenerThread); - connect(this, &MusicListenersManager::applicationIsTerminating, - newFileIndexer.get(), &FileListener::applicationAboutToQuit, Qt::DirectConnection); - connect(newFileIndexer.get(), &FileListener::indexingStarted, - this, &MusicListenersManager::monitorStartingListeners); - connect(newFileIndexer.get(), &FileListener::indexingFinished, - this, &MusicListenersManager::monitorEndingListeners); - connect(newFileIndexer.get(), &FileListener::newNotification, - this, &MusicListenersManager::newNotification); - connect(newFileIndexer.get(), &FileListener::closeNotification, - this, &MusicListenersManager::closeNotification); - - newFileIndexer->setRootPath(oneRootPath); - - d->mFileListener.emplace_back(std::move(newFileIndexer)); - } - } - } } void MusicListenersManager::increaseImportedTracksCount(const DatabaseInterface::ListTrackDataType &allTracks) { d->mImportedTracksCount += allTracks.size(); - if (d->mImportedTracksCount && d->mIndexerBusy) { - d->mIndexerBusy = false; - Q_EMIT indexerBusyChanged(); - } - //if (d->mImportedTracksCount >= 4) { Q_EMIT closeNotification(QStringLiteral("notEnoughTracks")); //} @@ -374,48 +364,127 @@ void MusicListenersManager::monitorStartingListeners() { - if (d->mActiveMusicListenersCount == 0) { - d->mIndexingRunning = true; - Q_EMIT indexingRunningChanged(); - } - - ++d->mActiveMusicListenersCount; + d->mIndexerBusy = true; + Q_EMIT indexerBusyChanged(); } void MusicListenersManager::monitorEndingListeners() { - --d->mActiveMusicListenersCount; + /*if (d->mImportedTracksCount < 4 && d->mElisaApplication) { + NotificationItem notEnoughTracks; - if (d->mActiveMusicListenersCount == 0) { - /*if (d->mImportedTracksCount < 4 && d->mElisaApplication) { - NotificationItem notEnoughTracks; + notEnoughTracks.setNotificationId(QStringLiteral("notEnoughTracks")); - notEnoughTracks.setNotificationId(QStringLiteral("notEnoughTracks")); + notEnoughTracks.setTargetObject(this); - notEnoughTracks.setTargetObject(this); + notEnoughTracks.setMessage(i18nc("No track found message", "No track have been found")); - notEnoughTracks.setMessage(i18nc("No track found message", "No track have been found")); + auto configureAction = d->mElisaApplication->action(QStringLiteral("options_configure")); - auto configureAction = d->mElisaApplication->action(QStringLiteral("options_configure")); + notEnoughTracks.setMainButtonText(configureAction->text()); + notEnoughTracks.setMainButtonIconName(configureAction->icon().name()); + notEnoughTracks.setMainButtonMethodName(QStringLiteral("showConfiguration")); - notEnoughTracks.setMainButtonText(configureAction->text()); - notEnoughTracks.setMainButtonIconName(configureAction->icon().name()); - notEnoughTracks.setMainButtonMethodName(QStringLiteral("showConfiguration")); + Q_EMIT newNotification(notEnoughTracks); + }*/ - Q_EMIT newNotification(notEnoughTracks); - }*/ - - d->mIndexingRunning = false; - Q_EMIT indexingRunningChanged(); - } + d->mIndexerBusy = false; + Q_EMIT indexerBusyChanged(); } void MusicListenersManager::cleanedDatabase() { d->mImportedTracksCount = 0; Q_EMIT importedTracksCountChanged(); } +void MusicListenersManager::balooAvailabilityChanged() +{ + if (!d->mBalooDetector.balooAvailability()) { + if (!d->mFileSystemIndexerActive) { + startLocalFileSystemIndexing(); + } + + return; + } + + qCInfo(orgKdeElisaIndexersManager) << "Baloo indexer is available"; + d->mBalooIndexerAvailable = true; + Q_EMIT balooIndexerAvailableChanged(); + startBalooIndexing(); +} + +void MusicListenersManager::testBalooIndexerAvailability() +{ +#if defined KF5Baloo_FOUND && KF5Baloo_FOUND + d->mBalooDetector.checkBalooAvailability(); +#else + qCInfo(orgKdeElisaIndexersManager) << "Baloo indexer is unavailable"; + d->mBalooIndexerAvailable = false; + Q_EMIT balooIndexerAvailableChanged(); + + qCInfo(orgKdeElisaIndexersManager) << "Baloo indexer is inactive"; + d->mBalooIndexerActive = false; + Q_EMIT balooIndexerActiveChanged(); + + startLocalFileSystemIndexing(); +#endif +} + +void MusicListenersManager::startLocalFileSystemIndexing() +{ + if (d->mFileSystemIndexerActive) { + return; + } + + d->mFileListener.setDatabaseInterface(&d->mDatabaseInterface); + d->mFileListener.moveToThread(&d->mListenerThread); + connect(this, &MusicListenersManager::applicationIsTerminating, + &d->mFileListener, &FileListener::applicationAboutToQuit, Qt::DirectConnection); + connect(&d->mFileListener, &FileListener::indexingStarted, + this, &MusicListenersManager::monitorStartingListeners); + connect(&d->mFileListener, &FileListener::indexingFinished, + this, &MusicListenersManager::monitorEndingListeners); + connect(&d->mFileListener, &FileListener::newNotification, + this, &MusicListenersManager::newNotification); + connect(&d->mFileListener, &FileListener::closeNotification, + this, &MusicListenersManager::closeNotification); + + QMetaObject::invokeMethod(d->mFileListener.fileListing(), "init", Qt::QueuedConnection); + + qCInfo(orgKdeElisaIndexersManager) << "Local file system indexer is active"; + + d->mFileSystemIndexerActive = true; + Q_EMIT fileSystemIndexerActiveChanged(); +} + +void MusicListenersManager::startBalooIndexing() +{ +#if defined KF5Baloo_FOUND && KF5Baloo_FOUND + d->mBalooListener.moveToThread(&d->mListenerThread); + d->mBalooListener.setDatabaseInterface(&d->mDatabaseInterface); + connect(this, &MusicListenersManager::applicationIsTerminating, + &d->mBalooListener, &BalooListener::applicationAboutToQuit, Qt::DirectConnection); + connect(&d->mBalooListener, &BalooListener::indexingStarted, + this, &MusicListenersManager::monitorStartingListeners); + connect(&d->mBalooListener, &BalooListener::indexingFinished, + this, &MusicListenersManager::monitorEndingListeners); + connect(&d->mBalooListener, &BalooListener::clearDatabase, + &d->mDatabaseInterface, &DatabaseInterface::clearData); + connect(&d->mBalooListener, &BalooListener::newNotification, + this, &MusicListenersManager::newNotification); + connect(&d->mBalooListener, &BalooListener::closeNotification, + this, &MusicListenersManager::closeNotification); + + QMetaObject::invokeMethod(d->mBalooListener.fileListing(), "init", Qt::QueuedConnection); + + qCInfo(orgKdeElisaIndexersManager) << "Baloo indexer is active"; + + d->mBalooIndexerActive = true; + Q_EMIT balooIndexerActiveChanged(); +#endif +} + void MusicListenersManager::createTracksListener() { if (!d->mTracksListener) { diff --git a/src/qml/ElisaMainWindow.qml b/src/qml/ElisaMainWindow.qml --- a/src/qml/ElisaMainWindow.qml +++ b/src/qml/ElisaMainWindow.qml @@ -242,24 +242,20 @@ when: elisa.musicManager !== undefined } - Loader { - sourceComponent: Binding { - target: importedTracksCountNotification - property: 'indexingRunning' - value: elisa.musicManager.indexingRunning - } + Binding { + id: indexerBusyBinding - active: elisa.musicManager !== undefined + target: importedTracksCountNotification + property: 'indexingRunning' + value: elisa.musicManager.indexerBusy + when: elisa.musicManager !== undefined } - Loader { - sourceComponent: Binding { - target: importedTracksCountNotification - property: 'importedTracksCount' - value: elisa.musicManager.importedTracksCount - } - - active: elisa.musicManager !== undefined + Binding { + target: importedTracksCountNotification + property: 'importedTracksCount' + value: elisa.musicManager.importedTracksCount + when: elisa.musicManager !== undefined } } } diff --git a/src/qml/TrackImportNotification.qml b/src/qml/TrackImportNotification.qml --- a/src/qml/TrackImportNotification.qml +++ b/src/qml/TrackImportNotification.qml @@ -1,5 +1,5 @@ /* - * Copyright 2017 Matthieu Gallien + * Copyright 2017-2019 Matthieu Gallien * * This program is free software: you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -15,8 +15,9 @@ * along with this program. If not, see . */ -import QtQuick 2.7 -import QtQuick.Controls 2.2 +import QtQuick 2.10 +import QtQuick.Layouts 1.1 +import QtQuick.Controls 2.4 import org.kde.elisa 1.0 Rectangle { @@ -28,17 +29,33 @@ color: myPalette.highlight - width: Math.max(elisaTheme.gridDelegateWidth * 1.5, labelWidth.width + 2 * elisaTheme.layoutHorizontalMargin) - height: elisaTheme.smallControlButtonSize * 1.5 + width: Math.max(elisaTheme.gridDelegateWidth * 1.5, labelWidth.width + 2 * elisaTheme.layoutHorizontalMargin) + + elisaTheme.smallControlButtonSize * 1.5 + 3 * elisaTheme.layoutHorizontalMargin + height: elisaTheme.smallControlButtonSize * 1.5 + 2 * elisaTheme.layoutHorizontalMargin visible: opacity > 0 - opacity: (indexingRunning ? 1 : 0) + opacity: 0 - Label { - id: importedTracksCountLabel - anchors.centerIn: parent - text: i18ncp("number of imported tracks", "Imported one track", "Imported %1 tracks", importedTracksCount) - color: myPalette.highlightedText + RowLayout { + anchors.fill: parent + spacing: elisaTheme.layoutHorizontalMargin + + BusyIndicator{ + } + + Label { + id: importedTracksCountLabel + text: (importedTracksCount ? + i18ncp("number of imported tracks", + "Imported one track", + "Imported %1 tracks", + importedTracksCount) : + i18nc("message to show when Elisa is scanning music files", "Scanning music")) + color: myPalette.highlightedText + + Layout.fillWidth: true + Layout.fillHeight: true + } } TextMetrics {