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); @@ -4765,7 +4572,7 @@ QCOMPARE(musicDbTrackModifiedSpy.count(), 0); QCOMPARE(musicDbDatabaseErrorSpy.count(), 0); - musicDb.insertTracksList(mNewTracks, mNewCovers, QStringLiteral("autoTest")); + musicDb.insertTracksList(mNewTracks, mNewCovers); musicDbTrackAddedSpy.wait(300); @@ -4837,7 +4644,7 @@ QCOMPARE(musicDbTrackModifiedSpy.count(), 0); QCOMPARE(musicDbDatabaseErrorSpy.count(), 0); - musicDb.insertTracksList(mNewTracks, mNewCovers, QStringLiteral("autoTest")); + musicDb.insertTracksList(mNewTracks, mNewCovers); musicDbTrackAddedSpy.wait(300); @@ -4909,7 +4716,7 @@ QCOMPARE(musicDbTrackModifiedSpy.count(), 0); QCOMPARE(musicDbDatabaseErrorSpy.count(), 0); - musicDb.insertTracksList(mNewTracks, mNewCovers, QStringLiteral("autoTest")); + musicDb.insertTracksList(mNewTracks, mNewCovers); musicDbTrackAddedSpy.wait(300); @@ -4966,7 +4773,7 @@ QCOMPARE(musicDbDatabaseErrorSpy.count(), 0); QCOMPARE(musicDbCleanedDatabaseSpy.count(), 0); - musicDb.insertTracksList(mNewTracks, mNewCovers, QStringLiteral("autoTest")); + musicDb.insertTracksList(mNewTracks, mNewCovers); 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,7 +31,35 @@ 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 "databaseLogging.h" + IDENTIFIER "orgKdeElisaDatabase" + CATEGORY_NAME "org.kde.elisa.database" + 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) + ecm_qt_declare_logging_category(elisaLib_SOURCES + HEADER "vlcLogging.h" + IDENTIFIER "orgKdeElisaPlayerVlc" + CATEGORY_NAME "org.kde.elisa.player.vlc" + DEFAULT_SEVERITY Info + ) + set(elisaLib_SOURCES ${elisaLib_SOURCES} audiowrapper_libvlc.cpp @@ -60,10 +88,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 @@ -36,29 +36,30 @@ class NotificationItem; class FileScanner; class QFileInfo; +class QMimeDatabase; class ELISALIB_EXPORT AbstractFileListing : public QObject { Q_OBJECT 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 +69,7 @@ void closeNotification(QString notificationId); - void askRestoredTracks(const QString &musicSource); - - void errorWatchingFiles(); + void askRestoredTracks(); public Q_SLOTS: @@ -80,7 +79,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 +119,20 @@ 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); + + const QMimeDatabase& mimeDatabase() const; + 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(QHash allFiles) +{ + executeInit(std::move(allFiles)); + + refreshContent(); +} + +void AbstractFileListing::setAllRootPaths(const QStringList &allRootPaths) +{ + if (d->mAllRootPaths == allRootPaths) { + return; } + + d->mAllRootPaths = allRootPaths; } -void AbstractFileListing::restoredTracks(const QString &musicSource, QHash allFiles) +void AbstractFileListing::databaseFinishedInsertingTracksList() { - if (musicSource == sourceName()) { - executeInit(std::move(allFiles)); +} - refreshContent(); +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,20 @@ return false; } +bool AbstractFileListing::waitEndTrackRemoval() const +{ + return d->mWaitEndTrackRemoval; +} + +void AbstractFileListing::setWaitEndTrackRemoval(bool wait) +{ + d->mWaitEndTrackRemoval = wait; +} + +const QMimeDatabase &AbstractFileListing::mimeDatabase() const +{ + return d->mMimeDb; +} + #include "moc_abstractfilelisting.cpp" diff --git a/src/audiowrapper_libvlc.cpp b/src/audiowrapper_libvlc.cpp --- a/src/audiowrapper_libvlc.cpp +++ b/src/audiowrapper_libvlc.cpp @@ -17,6 +17,8 @@ #include "audiowrapper.h" +#include "vlcLogging.h" + #include #include #include @@ -104,7 +106,7 @@ d->mPlayer = libvlc_media_player_new(d->mInstance); if (!d->mPlayer) { - qDebug() << "AudioWrapper::AudioWrapper" << "failed creating player" << libvlc_errmsg(); + qCDebug(orgKdeElisaPlayerVlc) << "AudioWrapper::AudioWrapper" << "failed creating player" << libvlc_errmsg(); return; } @@ -226,14 +228,14 @@ { d->mMedia = libvlc_media_new_path(d->mInstance, QDir::toNativeSeparators(source.toLocalFile()).toUtf8().constData()); if (!d->mMedia) { - qDebug() << "AudioWrapper::setSource" + qCDebug(orgKdeElisaPlayerVlc) << "AudioWrapper::setSource" << "failed creating media" << libvlc_errmsg() << QDir::toNativeSeparators(source.toLocalFile()).toUtf8().constData(); d->mMedia = libvlc_media_new_path(d->mInstance, QDir::toNativeSeparators(source.toLocalFile()).toLatin1().constData()); if (!d->mMedia) { - qDebug() << "AudioWrapper::setSource" + qCDebug(orgKdeElisaPlayerVlc) << "AudioWrapper::setSource" << "failed creating media" << libvlc_errmsg() << QDir::toNativeSeparators(source.toLocalFile()).toLatin1().constData(); @@ -262,7 +264,7 @@ if (!d->mHasSavedPosition) { d->mHasSavedPosition = true; d->mSavedPosition = position; - qDebug() << "AudioWrapper::setPosition" << "restore old position" << d->mSavedPosition; + qCDebug(orgKdeElisaPlayerVlc) << "AudioWrapper::setPosition" << "restore old position" << d->mSavedPosition; } return; } @@ -384,71 +386,71 @@ switch(eventType) { case libvlc_MediaPlayerOpening: - qDebug() << "AudioWrapperPrivate::vlcEventCallback" << "libvlc_MediaPlayerOpening"; + qCDebug(orgKdeElisaPlayerVlc) << "AudioWrapperPrivate::vlcEventCallback" << "libvlc_MediaPlayerOpening"; signalMediaStatusChange(QMediaPlayer::LoadedMedia); break; case libvlc_MediaPlayerBuffering: - qDebug() << "AudioWrapperPrivate::vlcEventCallback" << "libvlc_MediaPlayerBuffering"; + qCDebug(orgKdeElisaPlayerVlc) << "AudioWrapperPrivate::vlcEventCallback" << "libvlc_MediaPlayerBuffering"; signalMediaStatusChange(QMediaPlayer::BufferedMedia); break; case libvlc_MediaPlayerPlaying: - qDebug() << "AudioWrapperPrivate::vlcEventCallback" << "libvlc_MediaPlayerPlaying"; + qCDebug(orgKdeElisaPlayerVlc) << "AudioWrapperPrivate::vlcEventCallback" << "libvlc_MediaPlayerPlaying"; signalPlaybackChange(QMediaPlayer::PlayingState); break; case libvlc_MediaPlayerPaused: - qDebug() << "AudioWrapperPrivate::vlcEventCallback" << "libvlc_MediaPlayerPaused"; + qCDebug(orgKdeElisaPlayerVlc) << "AudioWrapperPrivate::vlcEventCallback" << "libvlc_MediaPlayerPaused"; signalPlaybackChange(QMediaPlayer::PausedState); break; case libvlc_MediaPlayerStopped: - qDebug() << "AudioWrapperPrivate::vlcEventCallback" << "libvlc_MediaPlayerStopped"; + qCDebug(orgKdeElisaPlayerVlc) << "AudioWrapperPrivate::vlcEventCallback" << "libvlc_MediaPlayerStopped"; signalPlaybackChange(QMediaPlayer::StoppedState); break; case libvlc_MediaPlayerEndReached: - qDebug() << "AudioWrapperPrivate::vlcEventCallback" << "libvlc_MediaPlayerEndReached"; + qCDebug(orgKdeElisaPlayerVlc) << "AudioWrapperPrivate::vlcEventCallback" << "libvlc_MediaPlayerEndReached"; signalMediaStatusChange(QMediaPlayer::BufferedMedia); signalMediaStatusChange(QMediaPlayer::NoMedia); signalMediaStatusChange(QMediaPlayer::EndOfMedia); mediaIsEnded(); break; case libvlc_MediaPlayerEncounteredError: - qDebug() << "AudioWrapperPrivate::vlcEventCallback" << "libvlc_MediaPlayerEncounteredError"; + qCDebug(orgKdeElisaPlayerVlc) << "AudioWrapperPrivate::vlcEventCallback" << "libvlc_MediaPlayerEncounteredError"; signalErrorChange(QMediaPlayer::ResourceError); mediaIsEnded(); signalMediaStatusChange(QMediaPlayer::InvalidMedia); break; case libvlc_MediaPlayerPositionChanged: - qDebug() << "AudioWrapperPrivate::vlcEventCallback" << "libvlc_MediaPlayerPositionChanged"; + qCDebug(orgKdeElisaPlayerVlc) << "AudioWrapperPrivate::vlcEventCallback" << "libvlc_MediaPlayerPositionChanged"; signalPositionChange(p_event->u.media_player_position_changed.new_position); break; case libvlc_MediaPlayerSeekableChanged: - qDebug() << "AudioWrapperPrivate::vlcEventCallback" << "libvlc_MediaPlayerSeekableChanged"; + qCDebug(orgKdeElisaPlayerVlc) << "AudioWrapperPrivate::vlcEventCallback" << "libvlc_MediaPlayerSeekableChanged"; signalSeekableChange(p_event->u.media_player_seekable_changed.new_seekable); break; case libvlc_MediaPlayerLengthChanged: - qDebug() << "AudioWrapperPrivate::vlcEventCallback" << "libvlc_MediaPlayerLengthChanged"; + qCDebug(orgKdeElisaPlayerVlc) << "AudioWrapperPrivate::vlcEventCallback" << "libvlc_MediaPlayerLengthChanged"; signalDurationChange(p_event->u.media_player_length_changed.new_length); if (mHasSavedPosition) { mParent->setPosition(mSavedPosition); mHasSavedPosition = false; } break; case libvlc_MediaPlayerMuted: - qDebug() << "AudioWrapperPrivate::vlcEventCallback" << "libvlc_MediaPlayerMuted"; + qCDebug(orgKdeElisaPlayerVlc) << "AudioWrapperPrivate::vlcEventCallback" << "libvlc_MediaPlayerMuted"; signalMutedChange(true); break; case libvlc_MediaPlayerUnmuted: - qDebug() << "AudioWrapperPrivate::vlcEventCallback" << "libvlc_MediaPlayerUnmuted"; + qCDebug(orgKdeElisaPlayerVlc) << "AudioWrapperPrivate::vlcEventCallback" << "libvlc_MediaPlayerUnmuted"; signalMutedChange(false); break; case libvlc_MediaPlayerAudioVolume: - qDebug() << "AudioWrapperPrivate::vlcEventCallback" << "libvlc_MediaPlayerAudioVolume"; + qCDebug(orgKdeElisaPlayerVlc) << "AudioWrapperPrivate::vlcEventCallback" << "libvlc_MediaPlayerAudioVolume"; signalVolumeChange(qRound(p_event->u.media_player_audio_volume.volume * 100)); break; case libvlc_MediaPlayerAudioDevice: - qDebug() << "AudioWrapperPrivate::vlcEventCallback" << "libvlc_MediaPlayerAudioDevice"; + qCDebug(orgKdeElisaPlayerVlc) << "AudioWrapperPrivate::vlcEventCallback" << "libvlc_MediaPlayerAudioDevice"; break; default: - qDebug() << "AudioWrapperPrivate::vlcEventCallback" << "eventType" << eventType; + qCDebug(orgKdeElisaPlayerVlc) << "AudioWrapperPrivate::vlcEventCallback" << "eventType" << eventType; break; } } 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,12 +128,21 @@ void LocalBalooFileListing::newBalooFile(const QString &fileName) { + qCDebug(orgKdeElisaBaloo()) << "LocalBalooFileListing::newBalooFile" << fileName; + auto scanFileInfo = QFileInfo(fileName); if (!scanFileInfo.exists()) { return; } + const auto &fileMimeType = mimeDatabase().mimeTypeForFile(fileName); + if (!fileMimeType.name().startsWith(QStringLiteral("audio/"))) { + return; + } + + Q_EMIT indexingStarted(); + auto newFile = QUrl::fromLocalFile(fileName); auto newTrack = scanOneFile(newFile, scanFileInfo); @@ -143,19 +154,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 +181,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 +203,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 +218,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 +237,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 +256,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 +267,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 +286,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,31 +310,54 @@ void LocalBalooFileListing::triggerRefreshOfContent() { - if (!checkBalooConfiguration()) { - return; - } - + qCDebug(orgKdeElisaBaloo()) << "LocalBalooFileListing::triggerRefreshOfContent"; 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)) { + qCDebug(orgKdeElisaBaloo()) << "LocalBalooFileListing::triggerRefreshOfContent" << fileName << "does not match root paths"; + continue; + } + } else { + bool isIncluded = false; + for (const auto &oneRootPath : rootPaths) { + if (fileName.startsWith(oneRootPath)) { + isIncluded = true; + break; + } + } + if (!isIncluded) { + qCDebug(orgKdeElisaBaloo()) << "LocalBalooFileListing::triggerRefreshOfContent" << fileName << "does not match root paths"; + continue; + } + } + const auto &newFileUrl = QUrl::fromLocalFile(resultIterator.filePath()); auto scanFileInfo = QFileInfo(fileName); if (!scanFileInfo.exists()) { + qCDebug(orgKdeElisaBaloo()) << "LocalBalooFileListing::triggerRefreshOfContent" << fileName << "file does not exists"; return; } auto itExistingFile = allFiles().find(newFileUrl); if (itExistingFile != allFiles().end()) { if (*itExistingFile >= scanFileInfo.fileTime(QFile::FileModificationTime)) { allFiles().erase(itExistingFile); + qCDebug(orgKdeElisaBaloo()) << "LocalBalooFileListing::triggerRefreshOfContent" << fileName << "file not modified since last scan"; continue; } } @@ -335,19 +371,27 @@ if (newTrack.isValid()) { newFiles.push_back(newTrack); if (newFiles.size() > 500 && d->mStopRequest == 0) { + qCDebug(orgKdeElisaBaloo()) << "LocalBalooFileListing::triggerRefreshOfContent" << "insert new tracks in database" << newFiles.count(); emitNewFiles(newFiles); newFiles.clear(); } + } else { + qCDebug(orgKdeElisaBaloo()) << "LocalBalooFileListing::triggerRefreshOfContent" << fileName << "invalid track" << newTrack; } } if (!newFiles.isEmpty() && d->mStopRequest == 0) { + qCDebug(orgKdeElisaBaloo()) << "LocalBalooFileListing::triggerRefreshOfContent" << "insert new tracks in database" << newFiles.count(); emitNewFiles(newFiles); } + setWaitEndTrackRemoval(false); + checkFilesToRemove(); - Q_EMIT indexingFinished(); + if (!waitEndTrackRemoval()) { + Q_EMIT indexingFinished(); + } } MusicAudioTrack LocalBalooFileListing::scanOneFile(const QUrl &scanFile, const QFileInfo &scanFileInfo) @@ -366,76 +410,19 @@ fileScanner().scanProperties(match, newTrack); if (!newTrack.isValid()) { + qCDebug(orgKdeElisaBaloo) << "LocalBalooFileListing::scanOneFile" << scanFile << "falling back to plain file metadata analysis"; newTrack = AbstractFileListing::scanOneFile(scanFile, scanFileInfo); } if (newTrack.isValid()) { newTrack.setHasEmbeddedCover(checkEmbeddedCoverImage(localFileName)); addCover(newTrack); watchPath(localFileName); - } - - 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); + qCDebug(orgKdeElisaBaloo) << "LocalBalooFileListing::scanOneFile" << scanFile << "invalid track"; } - balooConfiguration.refresh(); - - if (checkBalooConfiguration()) { - triggerRefreshOfContent(); - } -} - -void LocalBalooFileListing::disableBalooIndexer() -{ - Elisa::ElisaConfiguration::self()->setBalooIndexer(false); - Elisa::ElisaConfiguration::self()->save(); + return newTrack; } diff --git a/src/databaseinterface.h b/src/databaseinterface.h --- a/src/databaseinterface.h +++ b/src/databaseinterface.h @@ -186,6 +186,31 @@ return operator[](key_type::LyricistRole).toString(); } + QString comment() const + { + return operator[](key_type::CommentRole).toString(); + } + + int year() const + { + return operator[](key_type::YearRole).toInt(); + } + + int channels() const + { + return operator[](key_type::ChannelsRole).toInt(); + } + + int bitRate() const + { + return operator[](key_type::BitRateRole).toInt(); + } + + int sampleRate() const + { + return operator[](key_type::SampleRateRole).toInt(); + } + bool hasEmbeddedCover() const { return operator[](key_type::HasEmbeddedCover).toBool(); @@ -371,19 +396,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); @@ -456,13 +483,11 @@ 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); - qulonglong internalInsertTrack(qulonglong discoverId, const MusicAudioTrack &oneModifiedTrack, + qulonglong internalInsertTrack(const MusicAudioTrack &oneModifiedTrack, const QHash &covers, bool &isInserted); MusicAudioTrack buildTrackFromDatabaseRecord(const QSqlRecord &trackRecord) const; @@ -481,7 +506,7 @@ qulonglong insertLyricist(const QString &name); - QHash internalAllFileNameFromSource(const QString &sourceName); + QHash internalAllFileName(); bool internalGenericPartialData(QSqlQuery &query); @@ -507,6 +532,8 @@ bool prepareQuery(QSqlQuery &query, const QString &queryText) const; + bool execQuery(QSqlQuery &query); + void updateAlbumArtist(qulonglong albumId, const QString &title, const QString &albumPath, const QString &artistName); @@ -516,6 +543,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 @@ -17,6 +17,8 @@ #include "databaseinterface.h" +#include "databaseLogging.h" + #include "musicaudiotrack.h" #include @@ -33,6 +35,7 @@ #include #include #include +#include #include #include @@ -58,7 +61,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), @@ -81,7 +84,7 @@ mSelectAllRecentlyPlayedTracksQuery(mTracksDatabase), mSelectAllFrequentlyPlayedTracksQuery(mTracksDatabase), mClearTracksTable(mTracksDatabase), mClearAlbumsTable(mTracksDatabase), mClearArtistsTable(mTracksDatabase), mClearComposerTable(mTracksDatabase), mClearGenreTable(mTracksDatabase), mClearLyricistTable(mTracksDatabase), - mArtistMatchGenreQuery(mTracksDatabase) + mArtistMatchGenreQuery(mTracksDatabase), mSelectTrackIdQuery(mTracksDatabase) { } @@ -147,10 +150,10 @@ QSqlQuery mSelectTracksMappingPriorityByTrackId; - QSqlQuery mSelectAllTrackFilesFromSourceQuery; - QSqlQuery mSelectAlbumIdsFromArtist; + QSqlQuery mSelectAllTrackFilesQuery; + QSqlQuery mRemoveTracksMappingFromSource; QSqlQuery mRemoveTracksMapping; @@ -243,6 +246,8 @@ QSqlQuery mArtistMatchGenreQuery; + QSqlQuery mSelectTrackIdQuery; + QSet mModifiedTrackIds; QSet mModifiedAlbumIds; @@ -267,8 +272,6 @@ qulonglong mTrackId = 1; - qulonglong mDiscoverId = 1; - QAtomicInt mStopRequest = 0; bool mInitFinished = false; @@ -288,7 +291,6 @@ void DatabaseInterface::init(const QString &dbName, const QString &databaseFileName) { - qInfo() << QCoreApplication::libraryPaths(); QSqlDatabase tracksDatabase = QSqlDatabase::addDatabase(QStringLiteral("QSQLITE"), dbName); if (!databaseFileName.isEmpty()) { @@ -300,11 +302,11 @@ auto result = tracksDatabase.open(); if (result) { - qDebug() << "database open"; + qCDebug(orgKdeElisaDatabase) << "database open"; } else { - qDebug() << "database not open"; + qCDebug(orgKdeElisaDatabase) << "database not open"; } - qDebug() << "DatabaseInterface::init" << (tracksDatabase.driver()->hasFeature(QSqlDriver::Transactions) ? "yes" : "no"); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::init" << (tracksDatabase.driver()->hasFeature(QSqlDriver::Transactions) ? "yes" : "no"); tracksDatabase.exec(QStringLiteral("PRAGMA foreign_keys = ON;")); @@ -518,14 +520,14 @@ d->mSelectTrackQuery.bindValue(QStringLiteral(":albumId"), databaseId); - auto queryResult = d->mSelectTrackQuery.exec(); + auto queryResult = execQuery(d->mSelectTrackQuery); if (!queryResult || !d->mSelectTrackQuery.isSelect() || !d->mSelectTrackQuery.isActive()) { Q_EMIT databaseError(); - qDebug() << "DatabaseInterface::albumData" << d->mSelectTrackQuery.lastQuery(); - qDebug() << "DatabaseInterface::albumData" << d->mSelectTrackQuery.boundValues(); - qDebug() << "DatabaseInterface::albumData" << d->mSelectTrackQuery.lastError(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::albumData" << d->mSelectTrackQuery.lastQuery(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::albumData" << d->mSelectTrackQuery.boundValues(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::albumData" << d->mSelectTrackQuery.lastError(); } while (d->mSelectTrackQuery.next()) { @@ -569,7 +571,7 @@ DatabaseInterface::ListArtistDataType DatabaseInterface::allArtistsDataByGenre(const QString &genre) { - qDebug() << "DatabaseInterface::allArtistsDataByGenre" << genre; + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::allArtistsDataByGenre" << genre; auto result = ListArtistDataType{}; @@ -628,14 +630,14 @@ d->mArtistMatchGenreQuery.bindValue(QStringLiteral(":databaseId"), databaseId); d->mArtistMatchGenreQuery.bindValue(QStringLiteral(":genreFilter"), genre); - auto queryResult = d->mArtistMatchGenreQuery.exec(); + auto queryResult = execQuery(d->mArtistMatchGenreQuery); if (!queryResult || !d->mArtistMatchGenreQuery.isSelect() || !d->mArtistMatchGenreQuery.isActive()) { Q_EMIT databaseError(); - qDebug() << "DatabaseInterface::artistMatchGenre" << d->mArtistMatchGenreQuery.lastQuery(); - qDebug() << "DatabaseInterface::artistMatchGenre" << d->mArtistMatchGenreQuery.boundValues(); - qDebug() << "DatabaseInterface::artistMatchGenre" << d->mArtistMatchGenreQuery.lastError(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::artistMatchGenre" << d->mArtistMatchGenreQuery.lastQuery(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::artistMatchGenre" << d->mArtistMatchGenreQuery.boundValues(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::artistMatchGenre" << d->mArtistMatchGenreQuery.lastError(); d->mArtistMatchGenreQuery.finish(); @@ -651,7 +653,7 @@ d->mArtistMatchGenreQuery.finish(); - qDebug() << "DatabaseInterface::internalArtistMatchGenre" << databaseId << (result ? "match" : "does not match"); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::internalArtistMatchGenre" << databaseId << (result ? "match" : "does not match"); return result; } @@ -750,49 +752,16 @@ d->mStopRequest = 1; } -void DatabaseInterface::removeAllTracksFromSource(const QString &sourceName) -{ - 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); - - 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) +void DatabaseInterface::askRestoredTracks() { auto transactionResult = startTransaction(); if (!transactionResult) { return; } - auto result = internalAllFileNameFromSource(musicSource); + auto result = internalAllFileName(); - Q_EMIT restoredTracks(musicSource, result); + Q_EMIT restoredTracks(result); transactionResult = finishTransaction(); if (!transactionResult) { @@ -822,74 +791,74 @@ return; } - auto queryResult = d->mClearTracksTable.exec(); + auto queryResult = execQuery(d->mClearTracksTable); if (!queryResult || !d->mClearTracksTable.isActive()) { Q_EMIT databaseError(); - qDebug() << "DatabaseInterface::clearData" << d->mClearTracksTable.lastQuery(); - qDebug() << "DatabaseInterface::clearData" << d->mClearTracksTable.boundValues(); - qDebug() << "DatabaseInterface::clearData" << d->mClearTracksTable.lastError(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::clearData" << d->mClearTracksTable.lastQuery(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::clearData" << d->mClearTracksTable.boundValues(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::clearData" << d->mClearTracksTable.lastError(); } d->mClearTracksTable.finish(); - queryResult = d->mClearAlbumsTable.exec(); + queryResult = execQuery(d->mClearAlbumsTable); if (!queryResult || !d->mClearAlbumsTable.isActive()) { Q_EMIT databaseError(); - qDebug() << "DatabaseInterface::clearData" << d->mClearAlbumsTable.lastQuery(); - qDebug() << "DatabaseInterface::clearData" << d->mClearAlbumsTable.boundValues(); - qDebug() << "DatabaseInterface::clearData" << d->mClearAlbumsTable.lastError(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::clearData" << d->mClearAlbumsTable.lastQuery(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::clearData" << d->mClearAlbumsTable.boundValues(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::clearData" << d->mClearAlbumsTable.lastError(); } d->mClearAlbumsTable.finish(); - queryResult = d->mClearComposerTable.exec(); + queryResult = execQuery(d->mClearComposerTable); if (!queryResult || !d->mClearComposerTable.isActive()) { Q_EMIT databaseError(); - qDebug() << "DatabaseInterface::clearData" << d->mClearComposerTable.lastQuery(); - qDebug() << "DatabaseInterface::clearData" << d->mClearComposerTable.boundValues(); - qDebug() << "DatabaseInterface::clearData" << d->mClearComposerTable.lastError(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::clearData" << d->mClearComposerTable.lastQuery(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::clearData" << d->mClearComposerTable.boundValues(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::clearData" << d->mClearComposerTable.lastError(); } d->mClearComposerTable.finish(); - queryResult = d->mClearLyricistTable.exec(); + queryResult = execQuery(d->mClearLyricistTable); if (!queryResult || !d->mClearLyricistTable.isActive()) { Q_EMIT databaseError(); - qDebug() << "DatabaseInterface::clearData" << d->mClearLyricistTable.lastQuery(); - qDebug() << "DatabaseInterface::clearData" << d->mClearLyricistTable.boundValues(); - qDebug() << "DatabaseInterface::clearData" << d->mClearLyricistTable.lastError(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::clearData" << d->mClearLyricistTable.lastQuery(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::clearData" << d->mClearLyricistTable.boundValues(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::clearData" << d->mClearLyricistTable.lastError(); } d->mClearLyricistTable.finish(); - queryResult = d->mClearGenreTable.exec(); + queryResult = execQuery(d->mClearGenreTable); if (!queryResult || !d->mClearGenreTable.isActive()) { Q_EMIT databaseError(); - qDebug() << "DatabaseInterface::clearData" << d->mClearGenreTable.lastQuery(); - qDebug() << "DatabaseInterface::clearData" << d->mClearGenreTable.boundValues(); - qDebug() << "DatabaseInterface::clearData" << d->mClearGenreTable.lastError(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::clearData" << d->mClearGenreTable.lastQuery(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::clearData" << d->mClearGenreTable.boundValues(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::clearData" << d->mClearGenreTable.lastError(); } d->mClearGenreTable.finish(); - queryResult = d->mClearArtistsTable.exec(); + queryResult = execQuery(d->mClearArtistsTable); if (!queryResult || !d->mClearArtistsTable.isActive()) { Q_EMIT databaseError(); - qDebug() << "DatabaseInterface::clearData" << d->mClearArtistsTable.lastQuery(); - qDebug() << "DatabaseInterface::clearData" << d->mClearArtistsTable.boundValues(); - qDebug() << "DatabaseInterface::clearData" << d->mClearArtistsTable.lastError(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::clearData" << d->mClearArtistsTable.lastQuery(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::clearData" << d->mClearArtistsTable.boundValues(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::clearData" << d->mClearArtistsTable.lastError(); } d->mClearArtistsTable.finish(); @@ -922,63 +891,67 @@ 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) { + qCDebug(orgKdeElisaDatabase()) << "DatabaseInterface::insertTracksList" << tracks.count(); if (d->mStopRequest == 1) { + Q_EMIT finishInsertingTracksList(); return; } auto transactionResult = startTransaction(); if (!transactionResult) { + Q_EMIT finishInsertingTracksList(); return; } initChangesTrackers(); for(const auto &oneTrack : tracks) { d->mSelectTracksMapping.bindValue(QStringLiteral(":fileName"), oneTrack.resourceURI()); - auto result = d->mSelectTracksMapping.exec(); + auto result = execQuery(d->mSelectTracksMapping); if (!result || !d->mSelectTracksMapping.isSelect() || !d->mSelectTracksMapping.isActive()) { Q_EMIT databaseError(); - qDebug() << "DatabaseInterface::insertTracksList" << d->mSelectTracksMapping.lastQuery(); - qDebug() << "DatabaseInterface::insertTracksList" << d->mSelectTracksMapping.boundValues(); - qDebug() << "DatabaseInterface::insertTracksList" << d->mSelectTracksMapping.lastError(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::insertTracksList" << d->mSelectTracksMapping.lastQuery(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::insertTracksList" << d->mSelectTracksMapping.boundValues(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::insertTracksList" << d->mSelectTracksMapping.lastError(); 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; } } @@ -989,7 +962,7 @@ for (auto artistId : qAsConst(d->mInsertedArtists)) { newArtists.push_back({{DatabaseIdRole, artistId}}); } - qInfo() << "artistsAdded" << newArtists.size(); + qCInfo(orgKdeElisaDatabase) << "artistsAdded" << newArtists.size(); Q_EMIT artistsAdded(newArtists); } @@ -1001,7 +974,7 @@ newAlbums.push_back(internalOneAlbumPartialData(albumId)); } - qInfo() << "albumsAdded" << newAlbums.size(); + qCInfo(orgKdeElisaDatabase) << "albumsAdded" << newAlbums.size(); Q_EMIT albumsAdded(newAlbums); } @@ -1017,7 +990,7 @@ d->mModifiedTrackIds.remove(trackId); } - qInfo() << "tracksAdded" << newTracks.size(); + qCInfo(orgKdeElisaDatabase) << "tracksAdded" << newTracks.size(); Q_EMIT tracksAdded(newTracks); } @@ -1027,14 +1000,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; } @@ -1052,17 +1028,20 @@ transactionResult = finishTransaction(); if (!transactionResult) { + Q_EMIT finishRemovingTracksList(); return; } + + Q_EMIT finishRemovingTracksList(); } bool DatabaseInterface::startTransaction() const { auto result = false; auto transactionResult = d->mTracksDatabase.transaction(); if (!transactionResult) { - qDebug() << "transaction failed" << d->mTracksDatabase.lastError() << d->mTracksDatabase.lastError().driverText(); + qCDebug(orgKdeElisaDatabase) << "transaction failed" << d->mTracksDatabase.lastError() << d->mTracksDatabase.lastError().driverText(); return result; } @@ -1079,7 +1058,7 @@ auto transactionResult = d->mTracksDatabase.commit(); if (!transactionResult) { - qDebug() << "commit failed" << d->mTracksDatabase.lastError() << d->mTracksDatabase.lastError().nativeErrorCode(); + qCDebug(orgKdeElisaDatabase) << "commit failed" << d->mTracksDatabase.lastError() << d->mTracksDatabase.lastError().nativeErrorCode(); return result; } @@ -1096,7 +1075,7 @@ auto transactionResult = d->mTracksDatabase.rollback(); if (!transactionResult) { - qDebug() << "commit failed" << d->mTracksDatabase.lastError() << d->mTracksDatabase.lastError().nativeErrorCode(); + qCDebug(orgKdeElisaDatabase) << "commit failed" << d->mTracksDatabase.lastError() << d->mTracksDatabase.lastError().nativeErrorCode(); return result; } @@ -1139,8 +1118,8 @@ auto result = createSchemaQuery.exec(QStringLiteral("DROP TABLE ") + oneTable); if (!result) { - qDebug() << "DatabaseInterface::initDatabase" << createSchemaQuery.lastQuery(); - qDebug() << "DatabaseInterface::initDatabase" << createSchemaQuery.lastError(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initDatabase" << createSchemaQuery.lastQuery(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initDatabase" << createSchemaQuery.lastError(); Q_EMIT databaseError(); } @@ -1153,9 +1132,13 @@ if (!listTables.contains(QStringLiteral("DatabaseVersionV11"))) { upgradeDatabaseV11(); } + if (!listTables.contains(QStringLiteral("DatabaseVersionV12"))) { + upgradeDatabaseV12(); + } } else { createDatabaseV9(); upgradeDatabaseV11(); + upgradeDatabaseV12(); } } @@ -1167,8 +1150,8 @@ const auto &result = createSchemaQuery.exec(QStringLiteral("CREATE TABLE `DatabaseVersionV9` (`Version` INTEGER PRIMARY KEY NOT NULL)")); if (!result) { - qDebug() << "DatabaseInterface::initDatabase" << createSchemaQuery.lastQuery(); - qDebug() << "DatabaseInterface::initDatabase" << createSchemaQuery.lastError(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initDatabase" << createSchemaQuery.lastQuery(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initDatabase" << createSchemaQuery.lastError(); Q_EMIT databaseError(); } @@ -1182,8 +1165,8 @@ "UNIQUE (`Name`))")); if (!result) { - qDebug() << "DatabaseInterface::initDatabase" << createSchemaQuery.lastQuery(); - qDebug() << "DatabaseInterface::initDatabase" << createSchemaQuery.lastError(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initDatabase" << createSchemaQuery.lastQuery(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initDatabase" << createSchemaQuery.lastError(); Q_EMIT databaseError(); } @@ -1197,8 +1180,8 @@ "UNIQUE (`Name`))")); if (!result) { - qDebug() << "DatabaseInterface::initDatabase" << createSchemaQuery.lastQuery(); - qDebug() << "DatabaseInterface::initDatabase" << createSchemaQuery.lastError(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initDatabase" << createSchemaQuery.lastQuery(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initDatabase" << createSchemaQuery.lastError(); Q_EMIT databaseError(); } @@ -1212,8 +1195,8 @@ "UNIQUE (`Name`))")); if (!result) { - qDebug() << "DatabaseInterface::initDatabase" << createSchemaQuery.lastQuery(); - qDebug() << "DatabaseInterface::initDatabase" << createSchemaQuery.lastError(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initDatabase" << createSchemaQuery.lastQuery(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initDatabase" << createSchemaQuery.lastError(); Q_EMIT databaseError(); } @@ -1227,8 +1210,8 @@ "UNIQUE (`Name`))")); if (!result) { - qDebug() << "DatabaseInterface::initDatabase" << createSchemaQuery.lastQuery(); - qDebug() << "DatabaseInterface::initDatabase" << createSchemaQuery.lastError(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initDatabase" << createSchemaQuery.lastQuery(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initDatabase" << createSchemaQuery.lastError(); Q_EMIT databaseError(); } @@ -1242,8 +1225,8 @@ "UNIQUE (`Name`))")); if (!result) { - qDebug() << "DatabaseInterface::initDatabase" << createSchemaQuery.lastQuery(); - qDebug() << "DatabaseInterface::initDatabase" << createSchemaQuery.lastError(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initDatabase" << createSchemaQuery.lastQuery(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initDatabase" << createSchemaQuery.lastError(); Q_EMIT databaseError(); } @@ -1263,8 +1246,8 @@ "ON DELETE CASCADE)")); if (!result) { - qDebug() << "DatabaseInterface::initDatabase" << createSchemaQuery.lastQuery(); - qDebug() << "DatabaseInterface::initDatabase" << createSchemaQuery.lastError(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initDatabase" << createSchemaQuery.lastQuery(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initDatabase" << createSchemaQuery.lastError(); } } @@ -1308,8 +1291,8 @@ "REFERENCES `Albums`(`Title`, `ArtistName`, `AlbumPath`))")); if (!result) { - qDebug() << "DatabaseInterface::initDatabase" << createSchemaQuery.lastQuery(); - qDebug() << "DatabaseInterface::initDatabase" << createSchemaQuery.lastError(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initDatabase" << createSchemaQuery.lastQuery(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initDatabase" << createSchemaQuery.lastError(); Q_EMIT databaseError(); } @@ -1330,8 +1313,8 @@ "CONSTRAINT fk_tracksmapping_discoverID FOREIGN KEY (`DiscoverID`) REFERENCES `DiscoverSource`(`ID`))")); if (!result) { - qDebug() << "DatabaseInterface::initDatabase" << createSchemaQuery.lastQuery(); - qDebug() << "DatabaseInterface::initDatabase" << createSchemaQuery.lastError(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initDatabase" << createSchemaQuery.lastQuery(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initDatabase" << createSchemaQuery.lastError(); } } @@ -1344,8 +1327,8 @@ "(`Title`)")); if (!result) { - qDebug() << "DatabaseInterface::initDatabase" << createTrackIndex.lastQuery(); - qDebug() << "DatabaseInterface::initDatabase" << createTrackIndex.lastError(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initDatabase" << createTrackIndex.lastQuery(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initDatabase" << createTrackIndex.lastError(); Q_EMIT databaseError(); } @@ -1360,8 +1343,8 @@ "(`ArtistName`)")); if (!result) { - qDebug() << "DatabaseInterface::initDatabase" << createTrackIndex.lastQuery(); - qDebug() << "DatabaseInterface::initDatabase" << createTrackIndex.lastError(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initDatabase" << createTrackIndex.lastQuery(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initDatabase" << createTrackIndex.lastError(); Q_EMIT databaseError(); } @@ -1376,8 +1359,8 @@ "(`AlbumTitle`, `AlbumArtistName`, `AlbumPath`)")); if (!result) { - qDebug() << "DatabaseInterface::initDatabase" << createTrackIndex.lastQuery(); - qDebug() << "DatabaseInterface::initDatabase" << createTrackIndex.lastError(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initDatabase" << createTrackIndex.lastQuery(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initDatabase" << createTrackIndex.lastError(); Q_EMIT databaseError(); } @@ -1392,8 +1375,8 @@ "(`ArtistName`)")); if (!result) { - qDebug() << "DatabaseInterface::initDatabase" << createTrackIndex.lastQuery(); - qDebug() << "DatabaseInterface::initDatabase" << createTrackIndex.lastError(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initDatabase" << createTrackIndex.lastQuery(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initDatabase" << createTrackIndex.lastError(); Q_EMIT databaseError(); } @@ -1408,8 +1391,8 @@ "(`AlbumArtistName`)")); if (!result) { - qDebug() << "DatabaseInterface::initDatabase" << createTrackIndex.lastQuery(); - qDebug() << "DatabaseInterface::initDatabase" << createTrackIndex.lastError(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initDatabase" << createTrackIndex.lastQuery(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initDatabase" << createTrackIndex.lastError(); Q_EMIT databaseError(); } @@ -1424,26 +1407,26 @@ "(`FileName`)")); if (!result) { - qDebug() << "DatabaseInterface::initDatabase" << createTrackIndex.lastQuery(); - qDebug() << "DatabaseInterface::initDatabase" << createTrackIndex.lastError(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initDatabase" << createTrackIndex.lastQuery(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initDatabase" << createTrackIndex.lastError(); Q_EMIT databaseError(); } } } void DatabaseInterface::upgradeDatabaseV11() { - qDebug() << "begin update to v11 of database schema"; + qCDebug(orgKdeElisaDatabase) << "begin update to v11 of database schema"; { QSqlQuery createSchemaQuery(d->mTracksDatabase); const auto &result = createSchemaQuery.exec(QStringLiteral("CREATE TABLE `DatabaseVersionV11` (`Version` INTEGER PRIMARY KEY NOT NULL)")); if (!result) { - qDebug() << "DatabaseInterface::initDatabase" << createSchemaQuery.lastQuery(); - qDebug() << "DatabaseInterface::initDatabase" << createSchemaQuery.lastError(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initDatabase" << createSchemaQuery.lastQuery(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initDatabase" << createSchemaQuery.lastError(); Q_EMIT databaseError(); } @@ -1455,8 +1438,8 @@ auto result = disableForeignKeys.exec(QStringLiteral(" PRAGMA foreign_keys=OFF")); if (!result) { - qDebug() << "DatabaseInterface::initDatabase" << disableForeignKeys.lastQuery(); - qDebug() << "DatabaseInterface::initDatabase" << disableForeignKeys.lastError(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initDatabase" << disableForeignKeys.lastQuery(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initDatabase" << disableForeignKeys.lastError(); Q_EMIT databaseError(); } @@ -1479,8 +1462,8 @@ "CONSTRAINT fk_tracksmapping_discoverID FOREIGN KEY (`DiscoverID`) REFERENCES `DiscoverSource`(`ID`))")); if (!result) { - qDebug() << "DatabaseInterface::initDatabase" << createSchemaQuery.lastQuery(); - qDebug() << "DatabaseInterface::initDatabase" << createSchemaQuery.lastError(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initDatabase" << createSchemaQuery.lastQuery(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initDatabase" << createSchemaQuery.lastError(); } } @@ -1503,8 +1486,8 @@ "t.`ID` = m.`TrackID`")); if (!result) { - qDebug() << "DatabaseInterface::initDatabase" << copyDataQuery.lastQuery(); - qDebug() << "DatabaseInterface::initDatabase" << copyDataQuery.lastError(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initDatabase" << copyDataQuery.lastQuery(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initDatabase" << copyDataQuery.lastError(); Q_EMIT databaseError(); } @@ -1555,8 +1538,8 @@ "REFERENCES `Albums`(`Title`, `ArtistName`, `AlbumPath`))")); if (!result) { - qDebug() << "DatabaseInterface::initDatabase" << createSchemaQuery.lastQuery(); - qDebug() << "DatabaseInterface::initDatabase" << createSchemaQuery.lastError(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initDatabase" << createSchemaQuery.lastQuery(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initDatabase" << createSchemaQuery.lastError(); Q_EMIT databaseError(); } @@ -1618,8 +1601,8 @@ "t.`ID` = m.`TrackID`")); if (!result) { - qDebug() << "DatabaseInterface::initDatabase" << copyDataQuery.lastQuery(); - qDebug() << "DatabaseInterface::initDatabase" << copyDataQuery.lastError(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initDatabase" << copyDataQuery.lastQuery(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initDatabase" << copyDataQuery.lastError(); Q_EMIT databaseError(); } @@ -1635,8 +1618,8 @@ "`TrackNumber` = -1")); if (!result) { - qDebug() << "DatabaseInterface::initDatabase" << updateDataQuery.lastQuery(); - qDebug() << "DatabaseInterface::initDatabase" << updateDataQuery.lastError(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initDatabase" << updateDataQuery.lastQuery(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initDatabase" << updateDataQuery.lastError(); Q_EMIT databaseError(); } @@ -1652,8 +1635,8 @@ "`Channels` = -1")); if (!result) { - qDebug() << "DatabaseInterface::initDatabase" << updateDataQuery.lastQuery(); - qDebug() << "DatabaseInterface::initDatabase" << updateDataQuery.lastError(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initDatabase" << updateDataQuery.lastQuery(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initDatabase" << updateDataQuery.lastError(); Q_EMIT databaseError(); } @@ -1669,8 +1652,8 @@ "`BitRate` = -1")); if (!result) { - qDebug() << "DatabaseInterface::initDatabase" << updateDataQuery.lastQuery(); - qDebug() << "DatabaseInterface::initDatabase" << updateDataQuery.lastError(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initDatabase" << updateDataQuery.lastQuery(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initDatabase" << updateDataQuery.lastError(); Q_EMIT databaseError(); } @@ -1686,8 +1669,8 @@ "`SampleRate` = -1")); if (!result) { - qDebug() << "DatabaseInterface::initDatabase" << updateDataQuery.lastQuery(); - qDebug() << "DatabaseInterface::initDatabase" << updateDataQuery.lastError(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initDatabase" << updateDataQuery.lastQuery(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initDatabase" << updateDataQuery.lastError(); Q_EMIT databaseError(); } @@ -1699,8 +1682,8 @@ auto result = createSchemaQuery.exec(QStringLiteral("DROP TABLE `Tracks`")); if (!result) { - qDebug() << "DatabaseInterface::initDatabase" << createSchemaQuery.lastQuery(); - qDebug() << "DatabaseInterface::initDatabase" << createSchemaQuery.lastError(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initDatabase" << createSchemaQuery.lastQuery(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initDatabase" << createSchemaQuery.lastError(); Q_EMIT databaseError(); } @@ -1712,8 +1695,8 @@ auto result = createSchemaQuery.exec(QStringLiteral("DROP TABLE `TracksMapping`")); if (!result) { - qDebug() << "DatabaseInterface::initDatabase" << createSchemaQuery.lastQuery(); - qDebug() << "DatabaseInterface::initDatabase" << createSchemaQuery.lastError(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initDatabase" << createSchemaQuery.lastQuery(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initDatabase" << createSchemaQuery.lastError(); Q_EMIT databaseError(); } @@ -1725,8 +1708,8 @@ auto result = createSchemaQuery.exec(QStringLiteral("ALTER TABLE `NewTracks` RENAME TO `Tracks`")); if (!result) { - qDebug() << "DatabaseInterface::initDatabase" << createSchemaQuery.lastQuery(); - qDebug() << "DatabaseInterface::initDatabase" << createSchemaQuery.lastError(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initDatabase" << createSchemaQuery.lastQuery(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initDatabase" << createSchemaQuery.lastError(); Q_EMIT databaseError(); } @@ -1740,8 +1723,8 @@ auto result = enableForeignKeys.exec(QStringLiteral(" PRAGMA foreign_keys=ON")); if (!result) { - qDebug() << "DatabaseInterface::initDatabase" << enableForeignKeys.lastQuery(); - qDebug() << "DatabaseInterface::initDatabase" << enableForeignKeys.lastError(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initDatabase" << enableForeignKeys.lastQuery(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initDatabase" << enableForeignKeys.lastError(); Q_EMIT databaseError(); } @@ -1756,8 +1739,8 @@ "(`AlbumTitle`, `AlbumArtistName`, `AlbumPath`)")); if (!result) { - qDebug() << "DatabaseInterface::initDatabase" << createTrackIndex.lastQuery(); - qDebug() << "DatabaseInterface::initDatabase" << createTrackIndex.lastError(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initDatabase" << createTrackIndex.lastQuery(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initDatabase" << createTrackIndex.lastError(); Q_EMIT databaseError(); } @@ -1772,8 +1755,8 @@ "(`ArtistName`)")); if (!result) { - qDebug() << "DatabaseInterface::initDatabase" << createTrackIndex.lastQuery(); - qDebug() << "DatabaseInterface::initDatabase" << createTrackIndex.lastError(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initDatabase" << createTrackIndex.lastQuery(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initDatabase" << createTrackIndex.lastError(); Q_EMIT databaseError(); } @@ -1788,8 +1771,8 @@ "(`AlbumArtistName`)")); if (!result) { - qDebug() << "DatabaseInterface::initDatabase" << createTrackIndex.lastQuery(); - qDebug() << "DatabaseInterface::initDatabase" << createTrackIndex.lastError(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initDatabase" << createTrackIndex.lastQuery(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initDatabase" << createTrackIndex.lastError(); Q_EMIT databaseError(); } @@ -1805,8 +1788,8 @@ "`AlbumTitle`, `AlbumArtistName`, `AlbumPath`)")); if (!result) { - qDebug() << "DatabaseInterface::initDatabase" << createTrackIndex.lastQuery(); - qDebug() << "DatabaseInterface::initDatabase" << createTrackIndex.lastError(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initDatabase" << createTrackIndex.lastQuery(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initDatabase" << createTrackIndex.lastError(); Q_EMIT databaseError(); } @@ -1822,8 +1805,8 @@ "`AlbumTitle`, `AlbumArtistName`, `AlbumPath`)")); if (!result) { - qDebug() << "DatabaseInterface::initDatabase" << createTrackIndex.lastQuery(); - qDebug() << "DatabaseInterface::initDatabase" << createTrackIndex.lastError(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initDatabase" << createTrackIndex.lastQuery(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initDatabase" << createTrackIndex.lastError(); Q_EMIT databaseError(); } @@ -1838,14 +1821,339 @@ "(`FileName`)")); if (!result) { - qDebug() << "DatabaseInterface::initDatabase" << createTrackIndex.lastQuery(); - qDebug() << "DatabaseInterface::initDatabase" << createTrackIndex.lastError(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initDatabase" << createTrackIndex.lastQuery(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initDatabase" << createTrackIndex.lastError(); Q_EMIT databaseError(); } } - qDebug() << "finished update to v11 of database schema"; + qCDebug(orgKdeElisaDatabase) << "finished update to v11 of database schema"; +} + +void DatabaseInterface::upgradeDatabaseV12() +{ + qCDebug(orgKdeElisaDatabase) << "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) { + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initDatabase" << createSchemaQuery.lastQuery(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initDatabase" << createSchemaQuery.lastError(); + + Q_EMIT databaseError(); + } + } + + { + QSqlQuery disableForeignKeys(d->mTracksDatabase); + + auto result = disableForeignKeys.exec(QStringLiteral(" PRAGMA foreign_keys=OFF")); + + if (!result) { + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initDatabase" << disableForeignKeys.lastQuery(); + qCDebug(orgKdeElisaDatabase) << "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) { + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initDatabase" << createSchemaQuery.lastQuery(); + qCDebug(orgKdeElisaDatabase) << "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) { + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initDatabase" << createSchemaQuery.lastQuery(); + qCDebug(orgKdeElisaDatabase) << "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) { + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initDatabase" << copyDataQuery.lastQuery(); + qCDebug(orgKdeElisaDatabase) << "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) { + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initDatabase" << copyDataQuery.lastQuery(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initDatabase" << copyDataQuery.lastError(); + + Q_EMIT databaseError(); + } + } + + { + QSqlQuery createSchemaQuery(d->mTracksDatabase); + + auto result = createSchemaQuery.exec(QStringLiteral("DROP TABLE `TracksData`")); + + if (!result) { + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initDatabase" << createSchemaQuery.lastQuery(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initDatabase" << createSchemaQuery.lastError(); + + Q_EMIT databaseError(); + } + } + + { + QSqlQuery createSchemaQuery(d->mTracksDatabase); + + auto result = createSchemaQuery.exec(QStringLiteral("DROP TABLE `Tracks`")); + + if (!result) { + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initDatabase" << createSchemaQuery.lastQuery(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initDatabase" << createSchemaQuery.lastError(); + + Q_EMIT databaseError(); + } + } + + { + QSqlQuery createSchemaQuery(d->mTracksDatabase); + + auto result = createSchemaQuery.exec(QStringLiteral("ALTER TABLE `NewTracksData` RENAME TO `TracksData`")); + + if (!result) { + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initDatabase" << createSchemaQuery.lastQuery(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initDatabase" << createSchemaQuery.lastError(); + + Q_EMIT databaseError(); + } + } + + { + QSqlQuery createSchemaQuery(d->mTracksDatabase); + + auto result = createSchemaQuery.exec(QStringLiteral("ALTER TABLE `NewTracks` RENAME TO `Tracks`")); + + if (!result) { + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initDatabase" << createSchemaQuery.lastQuery(); + qCDebug(orgKdeElisaDatabase) << "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) { + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initDatabase" << enableForeignKeys.lastQuery(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initDatabase" << enableForeignKeys.lastError(); + + Q_EMIT databaseError(); + } + } + + { + QSqlQuery createTrackIndex(d->mTracksDatabase); + + const auto &result = createTrackIndex.exec(QStringLiteral("CREATE INDEX " + "IF NOT EXISTS " + "`TracksAlbumIndex` ON `Tracks` " + "(`AlbumTitle`, `AlbumArtistName`, `AlbumPath`)")); + + if (!result) { + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initDatabase" << createTrackIndex.lastQuery(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initDatabase" << createTrackIndex.lastError(); + + Q_EMIT databaseError(); + } + } + + { + QSqlQuery createTrackIndex(d->mTracksDatabase); + + const auto &result = createTrackIndex.exec(QStringLiteral("CREATE INDEX " + "IF NOT EXISTS " + "`ArtistNameIndex` ON `Tracks` " + "(`ArtistName`)")); + + if (!result) { + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initDatabase" << createTrackIndex.lastQuery(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initDatabase" << createTrackIndex.lastError(); + + Q_EMIT databaseError(); + } + } + + { + QSqlQuery createTrackIndex(d->mTracksDatabase); + + const auto &result = createTrackIndex.exec(QStringLiteral("CREATE INDEX " + "IF NOT EXISTS " + "`AlbumArtistNameIndex` ON `Tracks` " + "(`AlbumArtistName`)")); + + if (!result) { + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initDatabase" << createTrackIndex.lastQuery(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initDatabase" << createTrackIndex.lastError(); + + Q_EMIT databaseError(); + } + } + + { + QSqlQuery createTrackIndex(d->mTracksDatabase); + + const auto &result = createTrackIndex.exec(QStringLiteral("CREATE INDEX " + "IF NOT EXISTS " + "`TracksUniqueData` ON `Tracks` " + "(`Title`, `ArtistName`, " + "`AlbumTitle`, `AlbumArtistName`, `AlbumPath`)")); + + if (!result) { + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initDatabase" << createTrackIndex.lastQuery(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initDatabase" << createTrackIndex.lastError(); + + Q_EMIT databaseError(); + } + } + + { + QSqlQuery createTrackIndex(d->mTracksDatabase); + + const auto &result = createTrackIndex.exec(QStringLiteral("CREATE INDEX " + "IF NOT EXISTS " + "`TracksUniqueDataPriority` ON `Tracks` " + "(`Priority`, `Title`, `ArtistName`, " + "`AlbumTitle`, `AlbumArtistName`, `AlbumPath`)")); + + if (!result) { + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initDatabase" << createTrackIndex.lastQuery(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initDatabase" << createTrackIndex.lastError(); + + Q_EMIT databaseError(); + } + } + + { + QSqlQuery createTrackIndex(d->mTracksDatabase); + + const auto &result = createTrackIndex.exec(QStringLiteral("CREATE INDEX " + "IF NOT EXISTS " + "`TracksFileNameIndex` ON `Tracks` " + "(`FileName`)")); + + if (!result) { + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initDatabase" << createTrackIndex.lastQuery(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initDatabase" << createTrackIndex.lastError(); + + Q_EMIT databaseError(); + } + } + + qCDebug(orgKdeElisaDatabase) << "finished update to v12 of database schema"; } void DatabaseInterface::initRequest() @@ -1914,8 +2222,8 @@ auto result = prepareQuery(d->mSelectAlbumQuery, selectAlbumQueryText); if (!result) { - qDebug() << "DatabaseInterface::initRequest" << d->mSelectAlbumQuery.lastQuery(); - qDebug() << "DatabaseInterface::initRequest" << d->mSelectAlbumQuery.lastError(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mSelectAlbumQuery.lastQuery(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mSelectAlbumQuery.lastError(); Q_EMIT databaseError(); } @@ -1931,8 +2239,8 @@ auto result = prepareQuery(d->mSelectAllGenresQuery, selectAllGenresText); if (!result) { - qDebug() << "DatabaseInterface::initRequest" << d->mSelectAllGenresQuery.lastQuery(); - qDebug() << "DatabaseInterface::initRequest" << d->mSelectAllGenresQuery.lastError(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mSelectAllGenresQuery.lastQuery(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mSelectAllGenresQuery.lastError(); Q_EMIT databaseError(); } @@ -1980,8 +2288,8 @@ auto result = prepareQuery(d->mSelectAllAlbumsShortQuery, selectAllAlbumsText); if (!result) { - qDebug() << "DatabaseInterface::initRequest" << d->mSelectAllAlbumsShortQuery.lastQuery(); - qDebug() << "DatabaseInterface::initRequest" << d->mSelectAllAlbumsShortQuery.lastError(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mSelectAllAlbumsShortQuery.lastQuery(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mSelectAllAlbumsShortQuery.lastError(); Q_EMIT databaseError(); } @@ -2027,8 +2335,8 @@ auto result = prepareQuery(d->mSelectAllAlbumsShortWithGenreArtistFilterQuery, selectAllAlbumsText); if (!result) { - qDebug() << "DatabaseInterface::initRequest" << d->mSelectAllAlbumsShortWithGenreArtistFilterQuery.lastQuery(); - qDebug() << "DatabaseInterface::initRequest" << d->mSelectAllAlbumsShortWithGenreArtistFilterQuery.lastError(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mSelectAllAlbumsShortWithGenreArtistFilterQuery.lastQuery(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mSelectAllAlbumsShortWithGenreArtistFilterQuery.lastError(); Q_EMIT databaseError(); } @@ -2071,8 +2379,8 @@ auto result = prepareQuery(d->mSelectAllAlbumsShortWithArtistFilterQuery, selectAllAlbumsText); if (!result) { - qDebug() << "DatabaseInterface::initRequest" << d->mSelectAllAlbumsShortWithArtistFilterQuery.lastQuery(); - qDebug() << "DatabaseInterface::initRequest" << d->mSelectAllAlbumsShortWithArtistFilterQuery.lastError(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mSelectAllAlbumsShortWithArtistFilterQuery.lastQuery(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mSelectAllAlbumsShortWithArtistFilterQuery.lastError(); Q_EMIT databaseError(); } @@ -2091,8 +2399,8 @@ auto result = prepareQuery(d->mSelectAllArtistsQuery, selectAllArtistsWithFilterText); if (!result) { - qDebug() << "DatabaseInterface::initRequest" << d->mSelectAllArtistsQuery.lastQuery(); - qDebug() << "DatabaseInterface::initRequest" << d->mSelectAllArtistsQuery.lastError(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mSelectAllArtistsQuery.lastQuery(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mSelectAllArtistsQuery.lastError(); Q_EMIT databaseError(); } @@ -2122,8 +2430,8 @@ auto result = prepareQuery(d->mSelectAllArtistsWithGenreFilterQuery, selectAllArtistsWithGenreFilterText); if (!result) { - qDebug() << "DatabaseInterface::initRequest" << d->mSelectAllArtistsWithGenreFilterQuery.lastQuery(); - qDebug() << "DatabaseInterface::initRequest" << d->mSelectAllArtistsWithGenreFilterQuery.lastError(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mSelectAllArtistsWithGenreFilterQuery.lastQuery(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mSelectAllArtistsWithGenreFilterQuery.lastError(); Q_EMIT databaseError(); } @@ -2150,8 +2458,8 @@ auto result = prepareQuery(d->mArtistMatchGenreQuery, artistMatchGenreText); if (!result) { - qDebug() << "DatabaseInterface::initRequest" << d->mArtistMatchGenreQuery.lastQuery(); - qDebug() << "DatabaseInterface::initRequest" << d->mArtistMatchGenreQuery.lastError(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mArtistMatchGenreQuery.lastQuery(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mArtistMatchGenreQuery.lastError(); Q_EMIT databaseError(); } @@ -2166,8 +2474,8 @@ auto result = prepareQuery(d->mSelectAllComposersQuery, selectAllComposersWithFilterText); if (!result) { - qDebug() << "DatabaseInterface::initRequest" << d->mSelectAllComposersQuery.lastQuery(); - qDebug() << "DatabaseInterface::initRequest" << d->mSelectAllComposersQuery.lastError(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mSelectAllComposersQuery.lastQuery(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mSelectAllComposersQuery.lastError(); Q_EMIT databaseError(); } @@ -2182,8 +2490,8 @@ auto result = prepareQuery(d->mSelectAllLyricistsQuery, selectAllLyricistsWithFilterText); if (!result) { - qDebug() << "DatabaseInterface::initRequest" << d->mSelectAllLyricistsQuery.lastQuery(); - qDebug() << "DatabaseInterface::initRequest" << d->mSelectAllLyricistsQuery.lastError(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mSelectAllLyricistsQuery.lastQuery(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mSelectAllLyricistsQuery.lastError(); Q_EMIT databaseError(); } @@ -2263,8 +2571,8 @@ auto result = prepareQuery(d->mSelectAllTracksQuery, selectAllTracksText); if (!result) { - qDebug() << "DatabaseInterface::initRequest" << d->mSelectAllTracksQuery.lastQuery(); - qDebug() << "DatabaseInterface::initRequest" << d->mSelectAllTracksQuery.lastError(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mSelectAllTracksQuery.lastQuery(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mSelectAllTracksQuery.lastError(); Q_EMIT databaseError(); } @@ -2346,8 +2654,8 @@ auto result = prepareQuery(d->mSelectAllRecentlyPlayedTracksQuery, selectAllTracksText); if (!result) { - qDebug() << "DatabaseInterface::initRequest" << d->mSelectAllRecentlyPlayedTracksQuery.lastQuery(); - qDebug() << "DatabaseInterface::initRequest" << d->mSelectAllRecentlyPlayedTracksQuery.lastError(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mSelectAllRecentlyPlayedTracksQuery.lastQuery(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mSelectAllRecentlyPlayedTracksQuery.lastError(); Q_EMIT databaseError(); } @@ -2429,8 +2737,8 @@ auto result = prepareQuery(d->mSelectAllFrequentlyPlayedTracksQuery, selectAllTracksText); if (!result) { - qDebug() << "DatabaseInterface::initRequest" << d->mSelectAllFrequentlyPlayedTracksQuery.lastQuery(); - qDebug() << "DatabaseInterface::initRequest" << d->mSelectAllFrequentlyPlayedTracksQuery.lastError(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mSelectAllFrequentlyPlayedTracksQuery.lastQuery(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mSelectAllFrequentlyPlayedTracksQuery.lastError(); Q_EMIT databaseError(); } @@ -2442,8 +2750,8 @@ auto result = prepareQuery(d->mClearAlbumsTable, clearAlbumsTableText); if (!result) { - qDebug() << "DatabaseInterface::initRequest" << d->mClearAlbumsTable.lastQuery(); - qDebug() << "DatabaseInterface::initRequest" << d->mClearAlbumsTable.lastError(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mClearAlbumsTable.lastQuery(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mClearAlbumsTable.lastError(); Q_EMIT databaseError(); } @@ -2455,8 +2763,8 @@ auto result = prepareQuery(d->mClearArtistsTable, clearArtistsTableText); if (!result) { - qDebug() << "DatabaseInterface::initRequest" << d->mClearArtistsTable.lastQuery(); - qDebug() << "DatabaseInterface::initRequest" << d->mClearArtistsTable.lastError(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mClearArtistsTable.lastQuery(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mClearArtistsTable.lastError(); Q_EMIT databaseError(); } @@ -2468,8 +2776,8 @@ auto result = prepareQuery(d->mClearComposerTable, clearComposerTableText); if (!result) { - qDebug() << "DatabaseInterface::initRequest" << d->mClearComposerTable.lastQuery(); - qDebug() << "DatabaseInterface::initRequest" << d->mClearComposerTable.lastError(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mClearComposerTable.lastQuery(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mClearComposerTable.lastError(); Q_EMIT databaseError(); } @@ -2481,8 +2789,8 @@ auto result = prepareQuery(d->mClearGenreTable, clearGenreTableText); if (!result) { - qDebug() << "DatabaseInterface::initRequest" << d->mClearGenreTable.lastQuery(); - qDebug() << "DatabaseInterface::initRequest" << d->mClearGenreTable.lastError(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mClearGenreTable.lastQuery(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mClearGenreTable.lastError(); Q_EMIT databaseError(); } @@ -2494,8 +2802,8 @@ auto result = prepareQuery(d->mClearLyricistTable, clearLyricistTableText); if (!result) { - qDebug() << "DatabaseInterface::initRequest" << d->mClearLyricistTable.lastQuery(); - qDebug() << "DatabaseInterface::initRequest" << d->mClearLyricistTable.lastError(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mClearLyricistTable.lastQuery(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mClearLyricistTable.lastError(); Q_EMIT databaseError(); } @@ -2507,8 +2815,8 @@ auto result = prepareQuery(d->mClearTracksTable, clearTracksTableText); if (!result) { - qDebug() << "DatabaseInterface::initRequest" << d->mClearTracksTable.lastQuery(); - qDebug() << "DatabaseInterface::initRequest" << d->mClearTracksTable.lastError(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mClearTracksTable.lastQuery(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mClearTracksTable.lastError(); Q_EMIT databaseError(); } @@ -2539,8 +2847,8 @@ auto result = prepareQuery(d->mSelectAllTracksShortQuery, selectAllTracksShortText); if (!result) { - qDebug() << "DatabaseInterface::initRequest" << d->mSelectAllTracksShortQuery.lastQuery(); - qDebug() << "DatabaseInterface::initRequest" << d->mSelectAllTracksShortQuery.lastError(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mSelectAllTracksShortQuery.lastQuery(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mSelectAllTracksShortQuery.lastError(); Q_EMIT databaseError(); } @@ -2556,8 +2864,8 @@ auto result = prepareQuery(d->mSelectArtistByNameQuery, selectArtistByNameText); if (!result) { - qDebug() << "DatabaseInterface::initRequest" << d->mSelectArtistByNameQuery.lastQuery(); - qDebug() << "DatabaseInterface::initRequest" << d->mSelectArtistByNameQuery.lastError(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mSelectArtistByNameQuery.lastQuery(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mSelectArtistByNameQuery.lastError(); Q_EMIT databaseError(); } @@ -2573,8 +2881,8 @@ auto result = prepareQuery(d->mSelectComposerByNameQuery, selectComposerByNameText); if (!result) { - qDebug() << "DatabaseInterface::initRequest" << d->mSelectComposerByNameQuery.lastQuery(); - qDebug() << "DatabaseInterface::initRequest" << d->mSelectComposerByNameQuery.lastError(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mSelectComposerByNameQuery.lastQuery(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mSelectComposerByNameQuery.lastError(); } } @@ -2588,8 +2896,8 @@ auto result = prepareQuery(d->mSelectLyricistByNameQuery, selectLyricistByNameText); if (!result) { - qDebug() << "DatabaseInterface::initRequest" << d->mSelectLyricistByNameQuery.lastQuery(); - qDebug() << "DatabaseInterface::initRequest" << d->mSelectLyricistByNameQuery.lastError(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mSelectLyricistByNameQuery.lastQuery(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mSelectLyricistByNameQuery.lastError(); } } @@ -2603,8 +2911,8 @@ auto result = prepareQuery(d->mSelectGenreByNameQuery, selectGenreByNameText); if (!result) { - qDebug() << "DatabaseInterface::initRequest" << d->mSelectGenreByNameQuery.lastQuery(); - qDebug() << "DatabaseInterface::initRequest" << d->mSelectGenreByNameQuery.lastError(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mSelectGenreByNameQuery.lastQuery(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mSelectGenreByNameQuery.lastError(); Q_EMIT databaseError(); } @@ -2617,8 +2925,8 @@ auto result = prepareQuery(d->mInsertArtistsQuery, insertArtistsText); if (!result) { - qDebug() << "DatabaseInterface::initRequest" << d->mInsertArtistsQuery.lastQuery(); - qDebug() << "DatabaseInterface::initRequest" << d->mInsertArtistsQuery.lastError(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mInsertArtistsQuery.lastQuery(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mInsertArtistsQuery.lastError(); Q_EMIT databaseError(); } @@ -2631,8 +2939,8 @@ auto result = prepareQuery(d->mInsertGenreQuery, insertGenreText); if (!result) { - qDebug() << "DatabaseInterface::initRequest" << d->mInsertGenreQuery.lastQuery(); - qDebug() << "DatabaseInterface::initRequest" << d->mInsertGenreQuery.lastError(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mInsertGenreQuery.lastQuery(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mInsertGenreQuery.lastError(); Q_EMIT databaseError(); } @@ -2645,8 +2953,8 @@ auto result = prepareQuery(d->mInsertComposerQuery, insertComposerText); if (!result) { - qDebug() << "DatabaseInterface::initRequest" << d->mInsertComposerQuery.lastQuery(); - qDebug() << "DatabaseInterface::initRequest" << d->mInsertComposerQuery.lastError(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mInsertComposerQuery.lastQuery(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mInsertComposerQuery.lastError(); } } @@ -2657,8 +2965,8 @@ auto result = prepareQuery(d->mInsertLyricistQuery, insertLyricistText); if (!result) { - qDebug() << "DatabaseInterface::initRequest" << d->mInsertLyricistQuery.lastQuery(); - qDebug() << "DatabaseInterface::initRequest" << d->mInsertLyricistQuery.lastError(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mInsertLyricistQuery.lastQuery(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mInsertLyricistQuery.lastError(); } } @@ -2739,12 +3047,54 @@ auto result = prepareQuery(d->mSelectTrackQuery, selectTrackQueryText); if (!result) { - qDebug() << "DatabaseInterface::initRequest" << d->mSelectTrackQuery.lastQuery(); - qDebug() << "DatabaseInterface::initRequest" << d->mSelectTrackQuery.lastError(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mSelectTrackQuery.lastQuery(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mSelectTrackQuery.lastError(); Q_EMIT databaseError(); } } + + { + auto selectTrackQueryText = QStringLiteral("SELECT " + "tracks.`ID` " + "FROM " + "`Tracks` tracks, " + "`TracksData` tracksMapping " + "LEFT JOIN " + "`Albums` album " + "ON " + "album.`ID` = :albumId AND " + "tracks.`AlbumTitle` = album.`Title` AND " + "(tracks.`AlbumArtistName` = album.`ArtistName` OR tracks.`AlbumArtistName` IS NULL ) AND " + "tracks.`AlbumPath` = album.`AlbumPath` " + "WHERE " + "tracksMapping.`FileName` = tracks.`FileName` AND " + "album.`ID` = :albumId AND " + "tracks.`Priority` = (" + " SELECT " + " MIN(`Priority`) " + " FROM " + " `Tracks` tracks2 " + " WHERE " + " tracks.`Title` = tracks2.`Title` AND " + " (tracks.`ArtistName` IS NULL OR tracks.`ArtistName` = tracks2.`ArtistName`) AND " + " (tracks.`AlbumTitle` IS NULL OR tracks.`AlbumTitle` = tracks2.`AlbumTitle`) AND " + " (tracks.`AlbumArtistName` IS NULL OR tracks.`AlbumArtistName` = tracks2.`AlbumArtistName`) AND " + " (tracks.`AlbumPath` IS NULL OR tracks.`AlbumPath` = tracks2.`AlbumPath`)" + ")" + "ORDER BY tracks.`DiscNumber` ASC, " + "tracks.`TrackNumber` ASC"); + + auto result = prepareQuery(d->mSelectTrackIdQuery, selectTrackQueryText); + + if (!result) { + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mSelectTrackIdQuery.lastQuery(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mSelectTrackIdQuery.lastError(); + + Q_EMIT databaseError(); + } + } + { auto selectTrackFromIdQueryText = QStringLiteral("SELECT " "tracks.`Id`, " @@ -2820,8 +3170,8 @@ auto result = prepareQuery(d->mSelectTrackFromIdQuery, selectTrackFromIdQueryText); if (!result) { - qDebug() << "DatabaseInterface::initRequest" << d->mSelectTrackFromIdQuery.lastQuery(); - qDebug() << "DatabaseInterface::initRequest" << d->mSelectTrackFromIdQuery.lastError(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mSelectTrackFromIdQuery.lastQuery(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mSelectTrackFromIdQuery.lastError(); Q_EMIT databaseError(); } @@ -2834,8 +3184,8 @@ const auto result = prepareQuery(d->mSelectCountAlbumsForArtistQuery, selectCountAlbumsQueryText); if (!result) { - qDebug() << "DatabaseInterface::initRequest" << d->mSelectCountAlbumsForArtistQuery.lastQuery(); - qDebug() << "DatabaseInterface::initRequest" << d->mSelectCountAlbumsForArtistQuery.lastError(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mSelectCountAlbumsForArtistQuery.lastQuery(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mSelectCountAlbumsForArtistQuery.lastError(); Q_EMIT databaseError(); } @@ -2858,8 +3208,8 @@ const auto result = prepareQuery(d->mSelectGenreForArtistQuery, selectGenreForArtistQueryText); if (!result) { - qDebug() << "DatabaseInterface::initRequest" << d->mSelectGenreForArtistQuery.lastQuery(); - qDebug() << "DatabaseInterface::initRequest" << d->mSelectGenreForArtistQuery.lastError(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mSelectGenreForArtistQuery.lastQuery(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mSelectGenreForArtistQuery.lastError(); Q_EMIT databaseError(); } @@ -2882,8 +3232,8 @@ const auto result = prepareQuery(d->mSelectGenreForAlbumQuery, selectGenreForAlbumQueryText); if (!result) { - qDebug() << "DatabaseInterface::initRequest" << d->mSelectGenreForAlbumQuery.lastQuery(); - qDebug() << "DatabaseInterface::initRequest" << d->mSelectGenreForAlbumQuery.lastError(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mSelectGenreForAlbumQuery.lastQuery(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mSelectGenreForAlbumQuery.lastError(); Q_EMIT databaseError(); } @@ -2904,8 +3254,8 @@ const auto result = prepareQuery(d->mSelectCountAlbumsForComposerQuery, selectCountAlbumsQueryText); if (!result) { - qDebug() << "DatabaseInterface::initRequest" << d->mSelectCountAlbumsForComposerQuery.lastQuery(); - qDebug() << "DatabaseInterface::initRequest" << d->mSelectCountAlbumsForComposerQuery.lastError(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mSelectCountAlbumsForComposerQuery.lastQuery(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mSelectCountAlbumsForComposerQuery.lastError(); Q_EMIT databaseError(); } @@ -2926,8 +3276,8 @@ const auto result = prepareQuery(d->mSelectCountAlbumsForLyricistQuery, selectCountAlbumsQueryText); if (!result) { - qDebug() << "DatabaseInterface::initRequest" << d->mSelectCountAlbumsForLyricistQuery.lastQuery(); - qDebug() << "DatabaseInterface::initRequest" << d->mSelectCountAlbumsForLyricistQuery.lastError(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mSelectCountAlbumsForLyricistQuery.lastQuery(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mSelectCountAlbumsForLyricistQuery.lastError(); Q_EMIT databaseError(); } @@ -2945,8 +3295,8 @@ auto result = prepareQuery(d->mSelectAlbumIdFromTitleQuery, selectAlbumIdFromTitleQueryText); if (!result) { - qDebug() << "DatabaseInterface::initRequest" << d->mSelectAlbumIdFromTitleQuery.lastQuery(); - qDebug() << "DatabaseInterface::initRequest" << d->mSelectAlbumIdFromTitleQuery.lastError(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mSelectAlbumIdFromTitleQuery.lastQuery(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mSelectAlbumIdFromTitleQuery.lastError(); Q_EMIT databaseError(); } @@ -2965,8 +3315,8 @@ auto result = prepareQuery(d->mSelectAlbumIdFromTitleAndArtistQuery, selectAlbumIdFromTitleAndArtistQueryText); if (!result) { - qDebug() << "DatabaseInterface::initRequest" << d->mSelectAlbumIdFromTitleAndArtistQuery.lastQuery(); - qDebug() << "DatabaseInterface::initRequest" << d->mSelectAlbumIdFromTitleAndArtistQuery.lastError(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mSelectAlbumIdFromTitleAndArtistQuery.lastQuery(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mSelectAlbumIdFromTitleAndArtistQuery.lastError(); Q_EMIT databaseError(); } @@ -2985,8 +3335,8 @@ auto result = prepareQuery(d->mSelectAlbumIdFromTitleWithoutArtistQuery, selectAlbumIdFromTitleWithoutArtistQueryText); if (!result) { - qDebug() << "DatabaseInterface::initRequest" << d->mSelectAlbumIdFromTitleWithoutArtistQuery.lastQuery(); - qDebug() << "DatabaseInterface::initRequest" << d->mSelectAlbumIdFromTitleWithoutArtistQuery.lastError(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mSelectAlbumIdFromTitleWithoutArtistQuery.lastQuery(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mSelectAlbumIdFromTitleWithoutArtistQuery.lastError(); Q_EMIT databaseError(); } @@ -3009,8 +3359,8 @@ auto result = prepareQuery(d->mInsertAlbumQuery, insertAlbumQueryText); if (!result) { - qDebug() << "DatabaseInterface::initRequest" << d->mInsertAlbumQuery.lastQuery(); - qDebug() << "DatabaseInterface::initRequest" << d->mInsertAlbumQuery.lastError(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mInsertAlbumQuery.lastQuery(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mInsertAlbumQuery.lastError(); Q_EMIT databaseError(); } @@ -3020,17 +3370,16 @@ 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); if (!result) { - qDebug() << "DatabaseInterface::initRequest" << d->mInsertTrackMapping.lastQuery(); - qDebug() << "DatabaseInterface::initRequest" << d->mInsertTrackMapping.lastError(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mInsertTrackMapping.lastQuery(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mInsertTrackMapping.lastError(); Q_EMIT databaseError(); } @@ -3045,8 +3394,8 @@ auto result = prepareQuery(d->mUpdateTrackFileModifiedTime, initialUpdateTracksValidityQueryText); if (!result) { - qDebug() << "DatabaseInterface::initRequest" << d->mUpdateTrackFileModifiedTime.lastQuery(); - qDebug() << "DatabaseInterface::initRequest" << d->mUpdateTrackFileModifiedTime.lastError(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mUpdateTrackFileModifiedTime.lastQuery(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mUpdateTrackFileModifiedTime.lastError(); Q_EMIT databaseError(); } @@ -3061,22 +3410,22 @@ auto result = prepareQuery(d->mUpdateTrackPriority, initialUpdateTracksValidityQueryText); if (!result) { - qDebug() << "DatabaseInterface::initRequest" << d->mUpdateTrackPriority.lastQuery(); - qDebug() << "DatabaseInterface::initRequest" << d->mUpdateTrackPriority.lastError(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mUpdateTrackPriority.lastQuery(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mUpdateTrackPriority.lastError(); Q_EMIT databaseError(); } } { auto removeTracksMappingFromSourceQueryText = QStringLiteral("DELETE FROM `TracksData` " - "WHERE `FileName` = :fileName AND `DiscoverID` = :sourceId"); + "WHERE `FileName` = :fileName"); auto result = prepareQuery(d->mRemoveTracksMappingFromSource, removeTracksMappingFromSourceQueryText); if (!result) { - qDebug() << "DatabaseInterface::initRequest" << d->mRemoveTracksMappingFromSource.lastQuery(); - qDebug() << "DatabaseInterface::initRequest" << d->mRemoveTracksMappingFromSource.lastError(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mRemoveTracksMappingFromSource.lastQuery(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mRemoveTracksMappingFromSource.lastError(); Q_EMIT databaseError(); } @@ -3089,8 +3438,8 @@ auto result = prepareQuery(d->mRemoveTracksMapping, removeTracksMappingQueryText); if (!result) { - qDebug() << "DatabaseInterface::initRequest" << d->mRemoveTracksMapping.lastQuery(); - qDebug() << "DatabaseInterface::initRequest" << d->mRemoveTracksMapping.lastError(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mRemoveTracksMapping.lastQuery(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mRemoveTracksMapping.lastError(); Q_EMIT databaseError(); } @@ -3158,8 +3507,8 @@ auto result = prepareQuery(d->mSelectTracksWithoutMappingQuery, selectTracksWithoutMappingQueryText); if (!result) { - qDebug() << "DatabaseInterface::initRequest" << d->mSelectTracksWithoutMappingQuery.lastQuery(); - qDebug() << "DatabaseInterface::initRequest" << d->mSelectTracksWithoutMappingQuery.lastError(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mSelectTracksWithoutMappingQuery.lastQuery(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mSelectTracksWithoutMappingQuery.lastError(); Q_EMIT databaseError(); } @@ -3169,7 +3518,6 @@ auto selectTracksMappingQueryText = QStringLiteral("SELECT " "track.`ID`, " "trackData.`FileName`, " - "trackData.`DiscoverID`, " "track.`Priority`, " "trackData.`FileModifiedTime` " "FROM " @@ -3184,8 +3532,8 @@ auto result = prepareQuery(d->mSelectTracksMapping, selectTracksMappingQueryText); if (!result) { - qDebug() << "DatabaseInterface::initRequest" << d->mSelectTracksMapping.lastQuery(); - qDebug() << "DatabaseInterface::initRequest" << d->mSelectTracksMapping.lastError(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mSelectTracksMapping.lastQuery(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mSelectTracksMapping.lastError(); Q_EMIT databaseError(); } @@ -3207,8 +3555,8 @@ auto result = prepareQuery(d->mSelectTracksMappingPriority, selectTracksMappingPriorityQueryText); if (!result) { - qDebug() << "DatabaseInterface::initRequest" << d->mSelectTracksMappingPriority.lastQuery(); - qDebug() << "DatabaseInterface::initRequest" << d->mSelectTracksMappingPriority.lastError(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mSelectTracksMappingPriority.lastQuery(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mSelectTracksMappingPriority.lastError(); Q_EMIT databaseError(); } @@ -3227,8 +3575,8 @@ auto result = prepareQuery(d->mSelectTracksMappingPriorityByTrackId, selectTracksMappingPriorityQueryByTrackIdText); if (!result) { - qDebug() << "DatabaseInterface::initRequest" << d->mSelectTracksMappingPriorityByTrackId.lastQuery(); - qDebug() << "DatabaseInterface::initRequest" << d->mSelectTracksMappingPriorityByTrackId.lastError(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mSelectTracksMappingPriorityByTrackId.lastQuery(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mSelectTracksMappingPriorityByTrackId.lastError(); Q_EMIT databaseError(); } @@ -3240,18 +3588,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(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mSelectAllTrackFilesQuery.lastQuery(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mSelectAllTrackFilesQuery.lastError(); Q_EMIT databaseError(); } @@ -3264,8 +3609,8 @@ auto result = prepareQuery(d->mInsertMusicSource, insertMusicSourceQueryText); if (!result) { - qDebug() << "DatabaseInterface::initRequest" << d->mInsertMusicSource.lastQuery(); - qDebug() << "DatabaseInterface::initRequest" << d->mInsertMusicSource.lastError(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mInsertMusicSource.lastQuery(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mInsertMusicSource.lastError(); Q_EMIT databaseError(); } @@ -3277,8 +3622,8 @@ auto result = prepareQuery(d->mSelectMusicSource, selectMusicSourceQueryText); if (!result) { - qDebug() << "DatabaseInterface::initRequest" << d->mSelectMusicSource.lastQuery(); - qDebug() << "DatabaseInterface::initRequest" << d->mSelectMusicSource.lastError(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mSelectMusicSource.lastQuery(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mSelectMusicSource.lastError(); Q_EMIT databaseError(); } @@ -3316,8 +3661,8 @@ auto result = prepareQuery(d->mSelectTrackIdFromTitleAlbumIdArtistQuery, selectTrackQueryText); if (!result) { - qDebug() << "DatabaseInterface::initRequest" << d->mSelectTrackIdFromTitleAlbumIdArtistQuery.lastQuery(); - qDebug() << "DatabaseInterface::initRequest" << d->mSelectTrackIdFromTitleAlbumIdArtistQuery.lastError(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mSelectTrackIdFromTitleAlbumIdArtistQuery.lastQuery(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mSelectTrackIdFromTitleAlbumIdArtistQuery.lastError(); Q_EMIT databaseError(); } @@ -3327,7 +3672,6 @@ auto insertTrackQueryText = QStringLiteral("INSERT INTO `Tracks` " "(" "`ID`, " - "`DiscoverID`, " "`FileName`, " "`Priority`, " "`Title`, " @@ -3351,7 +3695,6 @@ "VALUES " "(" ":trackId, " - ":discoverId, " ":fileName, " ":priority, " ":title, " @@ -3376,8 +3719,8 @@ auto result = prepareQuery(d->mInsertTrackQuery, insertTrackQueryText); if (!result) { - qDebug() << "DatabaseInterface::initRequest" << d->mInsertTrackQuery.lastQuery(); - qDebug() << "DatabaseInterface::initRequest" << d->mInsertTrackQuery.lastError(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mInsertTrackQuery.lastQuery(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mInsertTrackQuery.lastError(); Q_EMIT databaseError(); } @@ -3410,8 +3753,8 @@ auto result = prepareQuery(d->mUpdateTrackQuery, updateTrackQueryText); if (!result) { - qDebug() << "DatabaseInterface::initRequest" << d->mUpdateTrackQuery.lastQuery(); - qDebug() << "DatabaseInterface::initRequest" << d->mUpdateTrackQuery.lastError(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mUpdateTrackQuery.lastQuery(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mUpdateTrackQuery.lastError(); Q_EMIT databaseError(); } @@ -3427,8 +3770,8 @@ auto result = prepareQuery(d->mUpdateAlbumArtistQuery, updateAlbumArtistQueryText); if (!result) { - qDebug() << "DatabaseInterface::initRequest" << d->mUpdateAlbumArtistQuery.lastQuery(); - qDebug() << "DatabaseInterface::initRequest" << d->mUpdateAlbumArtistQuery.lastError(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mUpdateAlbumArtistQuery.lastQuery(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mUpdateAlbumArtistQuery.lastError(); Q_EMIT databaseError(); } @@ -3446,8 +3789,8 @@ auto result = prepareQuery(d->mUpdateAlbumArtistInTracksQuery, updateAlbumArtistInTracksQueryText); if (!result) { - qDebug() << "DatabaseInterface::initRequest" << d->mUpdateAlbumArtistInTracksQuery.lastQuery(); - qDebug() << "DatabaseInterface::initRequest" << d->mUpdateAlbumArtistInTracksQuery.lastError(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mUpdateAlbumArtistInTracksQuery.lastQuery(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mUpdateAlbumArtistInTracksQuery.lastError(); Q_EMIT databaseError(); } @@ -3461,8 +3804,8 @@ auto result = prepareQuery(d->mQueryMaximumTrackIdQuery, queryMaximumTrackIdQueryText); if (!result) { - qDebug() << "DatabaseInterface::initRequest" << d->mQueryMaximumTrackIdQuery.lastQuery(); - qDebug() << "DatabaseInterface::initRequest" << d->mQueryMaximumTrackIdQuery.lastError(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mQueryMaximumTrackIdQuery.lastQuery(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mQueryMaximumTrackIdQuery.lastError(); Q_EMIT databaseError(); } @@ -3476,8 +3819,8 @@ auto result = prepareQuery(d->mQueryMaximumAlbumIdQuery, queryMaximumAlbumIdQueryText); if (!result) { - qDebug() << "DatabaseInterface::initRequest" << d->mQueryMaximumAlbumIdQuery.lastQuery(); - qDebug() << "DatabaseInterface::initRequest" << d->mQueryMaximumAlbumIdQuery.lastError(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mQueryMaximumAlbumIdQuery.lastQuery(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mQueryMaximumAlbumIdQuery.lastError(); Q_EMIT databaseError(); } @@ -3491,8 +3834,8 @@ auto result = prepareQuery(d->mQueryMaximumArtistIdQuery, queryMaximumArtistIdQueryText); if (!result) { - qDebug() << "DatabaseInterface::initRequest" << d->mQueryMaximumArtistIdQuery.lastQuery(); - qDebug() << "DatabaseInterface::initRequest" << d->mQueryMaximumArtistIdQuery.lastError(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mQueryMaximumArtistIdQuery.lastQuery(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mQueryMaximumArtistIdQuery.lastError(); Q_EMIT databaseError(); } @@ -3506,8 +3849,8 @@ auto result = prepareQuery(d->mQueryMaximumLyricistIdQuery, queryMaximumLyricistIdQueryText); if (!result) { - qDebug() << "DatabaseInterface::initRequest" << d->mQueryMaximumLyricistIdQuery.lastQuery(); - qDebug() << "DatabaseInterface::initRequest" << d->mQueryMaximumLyricistIdQuery.lastError(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mQueryMaximumLyricistIdQuery.lastQuery(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mQueryMaximumLyricistIdQuery.lastError(); Q_EMIT databaseError(); } @@ -3521,8 +3864,8 @@ auto result = prepareQuery(d->mQueryMaximumComposerIdQuery, queryMaximumComposerIdQueryText); if (!result) { - qDebug() << "DatabaseInterface::initRequest" << d->mQueryMaximumComposerIdQuery.lastQuery(); - qDebug() << "DatabaseInterface::initRequest" << d->mQueryMaximumComposerIdQuery.lastError(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mQueryMaximumComposerIdQuery.lastQuery(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mQueryMaximumComposerIdQuery.lastError(); Q_EMIT databaseError(); } @@ -3536,8 +3879,8 @@ auto result = prepareQuery(d->mQueryMaximumGenreIdQuery, queryMaximumGenreIdQueryText); if (!result) { - qDebug() << "DatabaseInterface::initRequest" << d->mQueryMaximumGenreIdQuery.lastQuery(); - qDebug() << "DatabaseInterface::initRequest" << d->mQueryMaximumGenreIdQuery.lastError(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mQueryMaximumGenreIdQuery.lastQuery(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mQueryMaximumGenreIdQuery.lastError(); Q_EMIT databaseError(); } @@ -3558,8 +3901,8 @@ auto result = prepareQuery(d->mSelectTrackIdFromTitleArtistAlbumTrackDiscNumberQuery, selectTrackQueryText); if (!result) { - qDebug() << "DatabaseInterface::initRequest" << d->mSelectTrackIdFromTitleArtistAlbumTrackDiscNumberQuery.lastQuery(); - qDebug() << "DatabaseInterface::initRequest" << d->mSelectTrackIdFromTitleArtistAlbumTrackDiscNumberQuery.lastError(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mSelectTrackIdFromTitleArtistAlbumTrackDiscNumberQuery.lastQuery(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mSelectTrackIdFromTitleArtistAlbumTrackDiscNumberQuery.lastError(); Q_EMIT databaseError(); } @@ -3582,8 +3925,8 @@ auto result = prepareQuery(d->mSelectTrackIdFromTitleAlbumTrackDiscNumberQuery, selectTrackQueryText); if (!result) { - qDebug() << "DatabaseInterface::initRequest" << d->mSelectTrackIdFromTitleAlbumTrackDiscNumberQuery.lastQuery(); - qDebug() << "DatabaseInterface::initRequest" << d->mSelectTrackIdFromTitleAlbumTrackDiscNumberQuery.lastError(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mSelectTrackIdFromTitleAlbumTrackDiscNumberQuery.lastQuery(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mSelectTrackIdFromTitleAlbumTrackDiscNumberQuery.lastError(); Q_EMIT databaseError(); } @@ -3599,8 +3942,8 @@ auto result = prepareQuery(d->mSelectAlbumArtUriFromAlbumIdQuery, selectAlbumArtUriFromAlbumIdQueryText); if (!result) { - qDebug() << "DatabaseInterface::initRequest" << d->mSelectAlbumArtUriFromAlbumIdQuery.lastQuery(); - qDebug() << "DatabaseInterface::initRequest" << d->mSelectAlbumArtUriFromAlbumIdQuery.lastError(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mSelectAlbumArtUriFromAlbumIdQuery.lastQuery(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mSelectAlbumArtUriFromAlbumIdQuery.lastError(); Q_EMIT databaseError(); } @@ -3615,8 +3958,8 @@ auto result = prepareQuery(d->mUpdateAlbumArtUriFromAlbumIdQuery, updateAlbumArtUriFromAlbumIdQueryText); if (!result) { - qDebug() << "DatabaseInterface::initRequest" << d->mUpdateAlbumArtUriFromAlbumIdQuery.lastQuery(); - qDebug() << "DatabaseInterface::initRequest" << d->mUpdateAlbumArtUriFromAlbumIdQuery.lastError(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mUpdateAlbumArtUriFromAlbumIdQuery.lastQuery(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mUpdateAlbumArtUriFromAlbumIdQuery.lastError(); Q_EMIT databaseError(); } @@ -3698,8 +4041,8 @@ auto result = prepareQuery(d->mSelectTracksFromArtist, selectTracksFromArtistQueryText); if (!result) { - qDebug() << "DatabaseInterface::initRequest" << d->mSelectTracksFromArtist.lastQuery(); - qDebug() << "DatabaseInterface::initRequest" << d->mSelectTracksFromArtist.lastError(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mSelectTracksFromArtist.lastQuery(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mSelectTracksFromArtist.lastError(); Q_EMIT databaseError(); } @@ -3716,8 +4059,8 @@ auto result = prepareQuery(d->mSelectAlbumIdsFromArtist, selectAlbumIdsFromArtistQueryText); if (!result) { - qDebug() << "DatabaseInterface::initRequest" << d->mSelectAlbumIdsFromArtist.lastQuery(); - qDebug() << "DatabaseInterface::initRequest" << d->mSelectAlbumIdsFromArtist.lastError(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mSelectAlbumIdsFromArtist.lastQuery(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mSelectAlbumIdsFromArtist.lastError(); Q_EMIT databaseError(); } @@ -3733,8 +4076,8 @@ auto result = prepareQuery(d->mSelectArtistQuery, selectArtistQueryText); if (!result) { - qDebug() << "DatabaseInterface::initRequest" << d->mSelectArtistQuery.lastQuery(); - qDebug() << "DatabaseInterface::initRequest" << d->mSelectArtistQuery.lastError(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mSelectArtistQuery.lastQuery(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mSelectArtistQuery.lastError(); Q_EMIT databaseError(); } @@ -3751,8 +4094,8 @@ auto result = prepareQuery(d->mUpdateTrackStatistics, updateTrackStatisticsQueryText); if (!result) { - qDebug() << "DatabaseInterface::initRequest" << d->mUpdateTrackStatistics.lastQuery(); - qDebug() << "DatabaseInterface::initRequest" << d->mUpdateTrackStatistics.lastError(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mUpdateTrackStatistics.lastQuery(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mUpdateTrackStatistics.lastError(); Q_EMIT databaseError(); } @@ -3769,8 +4112,8 @@ auto result = prepareQuery(d->mUpdateTrackFirstPlayStatistics, updateTrackFirstPlayStatisticsQueryText); if (!result) { - qDebug() << "DatabaseInterface::initRequest" << d->mUpdateTrackFirstPlayStatistics.lastQuery(); - qDebug() << "DatabaseInterface::initRequest" << d->mUpdateTrackFirstPlayStatistics.lastError(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mUpdateTrackFirstPlayStatistics.lastQuery(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mUpdateTrackFirstPlayStatistics.lastError(); Q_EMIT databaseError(); } @@ -3786,8 +4129,8 @@ auto result = prepareQuery(d->mSelectGenreQuery, selectGenreQueryText); if (!result) { - qDebug() << "DatabaseInterface::initRequest" << d->mSelectGenreQuery.lastQuery(); - qDebug() << "DatabaseInterface::initRequest" << d->mSelectGenreQuery.lastError(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mSelectGenreQuery.lastQuery(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mSelectGenreQuery.lastError(); Q_EMIT databaseError(); } @@ -3803,8 +4146,8 @@ auto result = prepareQuery(d->mSelectComposerQuery, selectComposerQueryText); if (!result) { - qDebug() << "DatabaseInterface::initRequest" << d->mSelectComposerQuery.lastQuery(); - qDebug() << "DatabaseInterface::initRequest" << d->mSelectComposerQuery.lastError(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mSelectComposerQuery.lastQuery(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mSelectComposerQuery.lastError(); } } @@ -3818,8 +4161,8 @@ auto result = prepareQuery(d->mSelectLyricistQuery, selectLyricistQueryText); if (!result) { - qDebug() << "DatabaseInterface::initRequest" << d->mSelectLyricistQuery.lastQuery(); - qDebug() << "DatabaseInterface::initRequest" << d->mSelectLyricistQuery.lastError(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mSelectLyricistQuery.lastQuery(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mSelectLyricistQuery.lastError(); } } @@ -3831,8 +4174,8 @@ auto result = prepareQuery(d->mRemoveTrackQuery, removeTrackQueryText); if (!result) { - qDebug() << "DatabaseInterface::initRequest" << d->mRemoveTrackQuery.lastQuery(); - qDebug() << "DatabaseInterface::initRequest" << d->mRemoveTrackQuery.lastError(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mRemoveTrackQuery.lastQuery(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mRemoveTrackQuery.lastError(); Q_EMIT databaseError(); } @@ -3846,8 +4189,8 @@ auto result = prepareQuery(d->mRemoveAlbumQuery, removeAlbumQueryText); if (!result) { - qDebug() << "DatabaseInterface::initRequest" << d->mRemoveAlbumQuery.lastQuery(); - qDebug() << "DatabaseInterface::initRequest" << d->mRemoveAlbumQuery.lastError(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mRemoveAlbumQuery.lastQuery(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mRemoveAlbumQuery.lastError(); Q_EMIT databaseError(); } @@ -3861,8 +4204,8 @@ auto result = prepareQuery(d->mRemoveArtistQuery, removeAlbumQueryText); if (!result) { - qDebug() << "DatabaseInterface::initRequest" << d->mRemoveArtistQuery.lastQuery(); - qDebug() << "DatabaseInterface::initRequest" << d->mRemoveArtistQuery.lastError(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mRemoveArtistQuery.lastQuery(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::initRequest" << d->mRemoveArtistQuery.lastError(); Q_EMIT databaseError(); } @@ -3892,14 +4235,14 @@ d->mSelectAlbumIdFromTitleAndArtistQuery.bindValue(QStringLiteral(":artistName"), trackArtist); } - auto queryResult = d->mSelectAlbumIdFromTitleAndArtistQuery.exec(); + auto queryResult = execQuery(d->mSelectAlbumIdFromTitleAndArtistQuery); if (!queryResult || !d->mSelectAlbumIdFromTitleAndArtistQuery.isSelect() || !d->mSelectAlbumIdFromTitleAndArtistQuery.isActive()) { Q_EMIT databaseError(); - qDebug() << "DatabaseInterface::insertAlbum" << d->mSelectAlbumIdFromTitleAndArtistQuery.lastQuery(); - qDebug() << "DatabaseInterface::insertAlbum" << d->mSelectAlbumIdFromTitleAndArtistQuery.boundValues(); - qDebug() << "DatabaseInterface::insertAlbum" << d->mSelectAlbumIdFromTitleAndArtistQuery.lastError(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::insertAlbum" << d->mSelectAlbumIdFromTitleAndArtistQuery.lastQuery(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::insertAlbum" << d->mSelectAlbumIdFromTitleAndArtistQuery.boundValues(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::insertAlbum" << d->mSelectAlbumIdFromTitleAndArtistQuery.lastError(); d->mSelectAlbumIdFromTitleAndArtistQuery.finish(); @@ -3921,14 +4264,14 @@ d->mSelectAlbumIdFromTitleWithoutArtistQuery.bindValue(QStringLiteral(":title"), title); d->mSelectAlbumIdFromTitleWithoutArtistQuery.bindValue(QStringLiteral(":albumPath"), trackPath); - auto queryResult = d->mSelectAlbumIdFromTitleWithoutArtistQuery.exec(); + auto queryResult = execQuery(d->mSelectAlbumIdFromTitleWithoutArtistQuery); if (!queryResult || !d->mSelectAlbumIdFromTitleWithoutArtistQuery.isSelect() || !d->mSelectAlbumIdFromTitleWithoutArtistQuery.isActive()) { Q_EMIT databaseError(); - qDebug() << "DatabaseInterface::insertAlbum" << d->mSelectAlbumIdFromTitleWithoutArtistQuery.lastQuery(); - qDebug() << "DatabaseInterface::insertAlbum" << d->mSelectAlbumIdFromTitleWithoutArtistQuery.boundValues(); - qDebug() << "DatabaseInterface::insertAlbum" << d->mSelectAlbumIdFromTitleWithoutArtistQuery.lastError(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::insertAlbum" << d->mSelectAlbumIdFromTitleWithoutArtistQuery.lastQuery(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::insertAlbum" << d->mSelectAlbumIdFromTitleWithoutArtistQuery.boundValues(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::insertAlbum" << d->mSelectAlbumIdFromTitleWithoutArtistQuery.lastError(); d->mSelectAlbumIdFromTitleWithoutArtistQuery.finish(); @@ -3957,14 +4300,14 @@ d->mInsertAlbumQuery.bindValue(QStringLiteral(":albumPath"), trackPath); d->mInsertAlbumQuery.bindValue(QStringLiteral(":coverFileName"), albumArtURI); - auto queryResult = d->mInsertAlbumQuery.exec(); + auto queryResult = execQuery(d->mInsertAlbumQuery); if (!queryResult || !d->mInsertAlbumQuery.isActive()) { Q_EMIT databaseError(); - qDebug() << "DatabaseInterface::insertAlbum" << d->mInsertAlbumQuery.lastQuery(); - qDebug() << "DatabaseInterface::insertAlbum" << d->mInsertAlbumQuery.boundValues(); - qDebug() << "DatabaseInterface::insertAlbum" << d->mInsertAlbumQuery.lastError(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::insertAlbum" << d->mInsertAlbumQuery.lastQuery(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::insertAlbum" << d->mInsertAlbumQuery.boundValues(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::insertAlbum" << d->mInsertAlbumQuery.lastError(); d->mInsertAlbumQuery.finish(); @@ -3998,14 +4341,14 @@ d->mUpdateAlbumArtUriFromAlbumIdQuery.bindValue(QStringLiteral(":albumId"), albumId); d->mUpdateAlbumArtUriFromAlbumIdQuery.bindValue(QStringLiteral(":coverFileName"), albumArtUri); - auto result = d->mUpdateAlbumArtUriFromAlbumIdQuery.exec(); + auto result = execQuery(d->mUpdateAlbumArtUriFromAlbumIdQuery); if (!result || !d->mUpdateAlbumArtUriFromAlbumIdQuery.isActive()) { Q_EMIT databaseError(); - qDebug() << "DatabaseInterface::updateAlbumFromId" << d->mUpdateAlbumArtUriFromAlbumIdQuery.lastQuery(); - qDebug() << "DatabaseInterface::updateAlbumFromId" << d->mUpdateAlbumArtUriFromAlbumIdQuery.boundValues(); - qDebug() << "DatabaseInterface::updateAlbumFromId" << d->mUpdateAlbumArtUriFromAlbumIdQuery.lastError(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::updateAlbumFromId" << d->mUpdateAlbumArtUriFromAlbumIdQuery.lastQuery(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::updateAlbumFromId" << d->mUpdateAlbumArtUriFromAlbumIdQuery.boundValues(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::updateAlbumFromId" << d->mUpdateAlbumArtUriFromAlbumIdQuery.lastError(); d->mUpdateAlbumArtUriFromAlbumIdQuery.finish(); @@ -4036,14 +4379,14 @@ d->mSelectArtistByNameQuery.bindValue(QStringLiteral(":name"), name); - auto queryResult = d->mSelectArtistByNameQuery.exec(); + auto queryResult = execQuery(d->mSelectArtistByNameQuery); if (!queryResult || !d->mSelectArtistByNameQuery.isSelect() || !d->mSelectArtistByNameQuery.isActive()) { Q_EMIT databaseError(); - qDebug() << "DatabaseInterface::insertArtist" << d->mSelectArtistByNameQuery.lastQuery(); - qDebug() << "DatabaseInterface::insertArtist" << d->mSelectArtistByNameQuery.boundValues(); - qDebug() << "DatabaseInterface::insertArtist" << d->mSelectArtistByNameQuery.lastError(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::insertArtist" << d->mSelectArtistByNameQuery.lastQuery(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::insertArtist" << d->mSelectArtistByNameQuery.boundValues(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::insertArtist" << d->mSelectArtistByNameQuery.lastError(); d->mSelectArtistByNameQuery.finish(); @@ -4063,14 +4406,14 @@ d->mInsertArtistsQuery.bindValue(QStringLiteral(":artistId"), d->mArtistId); d->mInsertArtistsQuery.bindValue(QStringLiteral(":name"), name); - queryResult = d->mInsertArtistsQuery.exec(); + queryResult = execQuery(d->mInsertArtistsQuery); if (!queryResult || !d->mInsertArtistsQuery.isActive()) { Q_EMIT databaseError(); - qDebug() << "DatabaseInterface::insertArtist" << d->mInsertArtistsQuery.lastQuery(); - qDebug() << "DatabaseInterface::insertArtist" << d->mInsertArtistsQuery.boundValues(); - qDebug() << "DatabaseInterface::insertArtist" << d->mInsertArtistsQuery.lastError(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::insertArtist" << d->mInsertArtistsQuery.lastQuery(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::insertArtist" << d->mInsertArtistsQuery.boundValues(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::insertArtist" << d->mInsertArtistsQuery.lastError(); d->mInsertArtistsQuery.finish(); @@ -4098,14 +4441,14 @@ d->mSelectComposerByNameQuery.bindValue(QStringLiteral(":name"), name); - auto queryResult = d->mSelectComposerByNameQuery.exec(); + auto queryResult = execQuery(d->mSelectComposerByNameQuery); if (!queryResult || !d->mSelectComposerByNameQuery.isSelect() || !d->mSelectComposerByNameQuery.isActive()) { Q_EMIT databaseError(); - qDebug() << "DatabaseInterface::insertComposer" << d->mSelectComposerByNameQuery.lastQuery(); - qDebug() << "DatabaseInterface::insertComposer" << d->mSelectComposerByNameQuery.boundValues(); - qDebug() << "DatabaseInterface::insertComposer" << d->mSelectComposerByNameQuery.lastError(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::insertComposer" << d->mSelectComposerByNameQuery.lastQuery(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::insertComposer" << d->mSelectComposerByNameQuery.boundValues(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::insertComposer" << d->mSelectComposerByNameQuery.lastError(); d->mSelectComposerByNameQuery.finish(); @@ -4126,14 +4469,14 @@ d->mInsertComposerQuery.bindValue(QStringLiteral(":composerId"), d->mComposerId); d->mInsertComposerQuery.bindValue(QStringLiteral(":name"), name); - queryResult = d->mInsertComposerQuery.exec(); + queryResult = execQuery(d->mInsertComposerQuery); if (!queryResult || !d->mInsertComposerQuery.isActive()) { Q_EMIT databaseError(); - qDebug() << "DatabaseInterface::insertComposer" << d->mInsertComposerQuery.lastQuery(); - qDebug() << "DatabaseInterface::insertComposer" << d->mInsertComposerQuery.boundValues(); - qDebug() << "DatabaseInterface::insertComposer" << d->mInsertComposerQuery.lastError(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::insertComposer" << d->mInsertComposerQuery.lastQuery(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::insertComposer" << d->mInsertComposerQuery.boundValues(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::insertComposer" << d->mInsertComposerQuery.lastError(); d->mInsertComposerQuery.finish(); @@ -4161,14 +4504,14 @@ d->mSelectGenreByNameQuery.bindValue(QStringLiteral(":name"), name); - auto queryResult = d->mSelectGenreByNameQuery.exec(); + auto queryResult = execQuery(d->mSelectGenreByNameQuery); if (!queryResult || !d->mSelectGenreByNameQuery.isSelect() || !d->mSelectGenreByNameQuery.isActive()) { Q_EMIT databaseError(); - qDebug() << "DatabaseInterface::insertGenre" << d->mSelectGenreByNameQuery.lastQuery(); - qDebug() << "DatabaseInterface::insertGenre" << d->mSelectGenreByNameQuery.boundValues(); - qDebug() << "DatabaseInterface::insertGenre" << d->mSelectGenreByNameQuery.lastError(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::insertGenre" << d->mSelectGenreByNameQuery.lastQuery(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::insertGenre" << d->mSelectGenreByNameQuery.boundValues(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::insertGenre" << d->mSelectGenreByNameQuery.lastError(); d->mSelectGenreByNameQuery.finish(); @@ -4188,14 +4531,14 @@ d->mInsertGenreQuery.bindValue(QStringLiteral(":genreId"), d->mGenreId); d->mInsertGenreQuery.bindValue(QStringLiteral(":name"), name); - queryResult = d->mInsertGenreQuery.exec(); + queryResult = execQuery(d->mInsertGenreQuery); if (!queryResult || !d->mInsertGenreQuery.isActive()) { Q_EMIT databaseError(); - qDebug() << "DatabaseInterface::insertGenre" << d->mInsertGenreQuery.lastQuery(); - qDebug() << "DatabaseInterface::insertGenre" << d->mInsertGenreQuery.boundValues(); - qDebug() << "DatabaseInterface::insertGenre" << d->mInsertGenreQuery.lastError(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::insertGenre" << d->mInsertGenreQuery.lastQuery(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::insertGenre" << d->mInsertGenreQuery.boundValues(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::insertGenre" << d->mInsertGenreQuery.lastError(); d->mInsertGenreQuery.finish(); @@ -4214,22 +4557,21 @@ } 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); d->mInsertTrackMapping.bindValue(QStringLiteral(":importDate"), importDate.toMSecsSinceEpoch()); - auto queryResult = d->mInsertTrackMapping.exec(); + auto queryResult = execQuery(d->mInsertTrackMapping); if (!queryResult || !d->mInsertTrackMapping.isActive()) { Q_EMIT databaseError(); - qDebug() << "DatabaseInterface::insertArtist" << d->mInsertTrackMapping.lastQuery(); - qDebug() << "DatabaseInterface::insertArtist" << d->mInsertTrackMapping.boundValues(); - qDebug() << "DatabaseInterface::insertArtist" << d->mInsertTrackMapping.lastError(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::insertArtist" << d->mInsertTrackMapping.lastQuery(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::insertArtist" << d->mInsertTrackMapping.boundValues(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::insertArtist" << d->mInsertTrackMapping.lastError(); d->mInsertTrackMapping.finish(); @@ -4244,14 +4586,14 @@ d->mUpdateTrackFileModifiedTime.bindValue(QStringLiteral(":fileName"), fileName); d->mUpdateTrackFileModifiedTime.bindValue(QStringLiteral(":mtime"), fileModifiedTime); - auto queryResult = d->mUpdateTrackFileModifiedTime.exec(); + auto queryResult = execQuery(d->mUpdateTrackFileModifiedTime); if (!queryResult || !d->mUpdateTrackFileModifiedTime.isActive()) { Q_EMIT databaseError(); - qDebug() << "DatabaseInterface::updateTrackOrigin" << d->mUpdateTrackFileModifiedTime.lastQuery(); - qDebug() << "DatabaseInterface::updateTrackOrigin" << d->mUpdateTrackFileModifiedTime.boundValues(); - qDebug() << "DatabaseInterface::updateTrackOrigin" << d->mUpdateTrackFileModifiedTime.lastError(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::updateTrackOrigin" << d->mUpdateTrackFileModifiedTime.lastQuery(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::updateTrackOrigin" << d->mUpdateTrackFileModifiedTime.boundValues(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::updateTrackOrigin" << d->mUpdateTrackFileModifiedTime.lastError(); d->mUpdateTrackFileModifiedTime.finish(); @@ -4261,7 +4603,7 @@ d->mUpdateTrackFileModifiedTime.finish(); } -qulonglong DatabaseInterface::internalInsertTrack(qulonglong discoverId, const MusicAudioTrack &oneTrack, +qulonglong DatabaseInterface::internalInsertTrack(const MusicAudioTrack &oneTrack, const QHash &covers, bool &isInserted) { qulonglong resultId = 0; @@ -4296,19 +4638,34 @@ isSameTrack = isSameTrack && (oldTrack.albumName() == oneTrack.albumName()); isSameTrack = isSameTrack && (oldTrack.artist() == oneTrack.artist()); isSameTrack = isSameTrack && (oldTrack.albumArtist() == oneTrack.albumArtist()); - isSameTrack = isSameTrack && (oldTrack.trackNumber() == oneTrack.trackNumber()); - isSameTrack = isSameTrack && (oldTrack.discNumber() == oneTrack.discNumber()); + isSameTrack = isSameTrack && (oldTrack.trackNumberIsValid() == oneTrack.trackNumberIsValid()); + if (isSameTrack && oldTrack.trackNumberIsValid()) { + isSameTrack = isSameTrack && (oldTrack.trackNumber() == oneTrack.trackNumber()); + } + isSameTrack = isSameTrack && (oldTrack.discNumberIsValid() == oneTrack.discNumberIsValid()); + if (isSameTrack && oldTrack.discNumberIsValid()) { + isSameTrack = isSameTrack && (oldTrack.discNumber() == oneTrack.discNumber()); + } isSameTrack = isSameTrack && (oldTrack.duration() == oneTrack.duration()); isSameTrack = isSameTrack && (oldTrack.rating() == oneTrack.rating()); isSameTrack = isSameTrack && (oldTrack.resourceURI() == oneTrack.resourceURI()); isSameTrack = isSameTrack && (oldTrack.genre() == oneTrack.genre()); isSameTrack = isSameTrack && (oldTrack.composer() == oneTrack.composer()); isSameTrack = isSameTrack && (oldTrack.lyricist() == oneTrack.lyricist()); isSameTrack = isSameTrack && (oldTrack.comment() == oneTrack.comment()); isSameTrack = isSameTrack && (oldTrack.year() == oneTrack.year()); - isSameTrack = isSameTrack && (oldTrack.channels() == oneTrack.channels()); - isSameTrack = isSameTrack && (oldTrack.bitRate() == oneTrack.bitRate()); - isSameTrack = isSameTrack && (oldTrack.sampleRate() == oneTrack.sampleRate()); + isSameTrack = isSameTrack && (oldTrack.channelsIsValid() == oneTrack.channelsIsValid()); + if (isSameTrack && oldTrack.channelsIsValid()) { + isSameTrack = isSameTrack && (oldTrack.channels() == oneTrack.channels()); + } + isSameTrack = isSameTrack && (oldTrack.bitRateIsValid() == oneTrack.bitRateIsValid()); + if (isSameTrack && oldTrack.bitRateIsValid()) { + isSameTrack = isSameTrack && (oldTrack.bitRate() == oneTrack.bitRate()); + } + isSameTrack = isSameTrack && (oldTrack.sampleRateIsValid() == oneTrack.sampleRateIsValid()); + if (isSameTrack && oldTrack.sampleRateIsValid()) { + isSameTrack = isSameTrack && (oldTrack.sampleRate() == oneTrack.sampleRate()); + } if (isSameTrack) { return resultId; @@ -4362,17 +4719,20 @@ 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()); insertArtist(oneTrack.artist()); d->mInsertTrackQuery.bindValue(QStringLiteral(":artistName"), oneTrack.artist()); d->mInsertTrackQuery.bindValue(QStringLiteral(":albumTitle"), albumData[AlbumDataType::key_type::TitleRole]); d->mInsertTrackQuery.bindValue(QStringLiteral(":albumArtistName"), albumData[AlbumDataType::key_type::ArtistRole]); d->mInsertTrackQuery.bindValue(QStringLiteral(":albumPath"), trackPath); - d->mInsertTrackQuery.bindValue(QStringLiteral(":trackNumber"), oneTrack.trackNumber()); - d->mInsertTrackQuery.bindValue(QStringLiteral(":discNumber"), oneTrack.discNumber()); + if (oneTrack.trackNumberIsValid()) { + d->mInsertTrackQuery.bindValue(QStringLiteral(":trackNumber"), oneTrack.trackNumber()); + } + if (oneTrack.discNumberIsValid()) { + d->mInsertTrackQuery.bindValue(QStringLiteral(":discNumber"), oneTrack.discNumber()); + } d->mInsertTrackQuery.bindValue(QStringLiteral(":trackDuration"), QVariant::fromValue(oneTrack.duration().msecsSinceStartOfDay())); d->mInsertTrackQuery.bindValue(QStringLiteral(":trackRating"), oneTrack.rating()); if (insertGenre(oneTrack.genre()) != 0) { @@ -4392,12 +4752,18 @@ } d->mInsertTrackQuery.bindValue(QStringLiteral(":comment"), oneTrack.comment()); d->mInsertTrackQuery.bindValue(QStringLiteral(":year"), oneTrack.year()); - d->mInsertTrackQuery.bindValue(QStringLiteral(":channels"), oneTrack.channels()); - d->mInsertTrackQuery.bindValue(QStringLiteral(":bitRate"), oneTrack.bitRate()); - d->mInsertTrackQuery.bindValue(QStringLiteral(":sampleRate"), oneTrack.sampleRate()); + if (oneTrack.channelsIsValid()) { + d->mInsertTrackQuery.bindValue(QStringLiteral(":channels"), oneTrack.channels()); + } + if (oneTrack.bitRateIsValid()) { + d->mInsertTrackQuery.bindValue(QStringLiteral(":bitRate"), oneTrack.bitRate()); + } + if (oneTrack.sampleRateIsValid()) { + d->mInsertTrackQuery.bindValue(QStringLiteral(":sampleRate"), oneTrack.sampleRate()); + } d->mInsertTrackQuery.bindValue(QStringLiteral(":hasEmbeddedCover"), oneTrack.hasEmbeddedCover()); - auto result = d->mInsertTrackQuery.exec(); + auto result = execQuery(d->mInsertTrackQuery); if (result && d->mInsertTrackQuery.isActive()) { d->mInsertTrackQuery.finish(); @@ -4434,10 +4800,10 @@ Q_EMIT databaseError(); - qDebug() << "DatabaseInterface::internalInsertTrack" << oneTrack << oneTrack.resourceURI(); - qDebug() << "DatabaseInterface::internalInsertTrack" << d->mInsertTrackQuery.lastQuery(); - qDebug() << "DatabaseInterface::internalInsertTrack" << d->mInsertTrackQuery.boundValues(); - qDebug() << "DatabaseInterface::internalInsertTrack" << d->mInsertTrackQuery.lastError(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::internalInsertTrack" << oneTrack << oneTrack.resourceURI(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::internalInsertTrack" << d->mInsertTrackQuery.lastQuery(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::internalInsertTrack" << d->mInsertTrackQuery.boundValues(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::internalInsertTrack" << d->mInsertTrackQuery.lastError(); } return resultId; @@ -4464,8 +4830,12 @@ result.setResourceURI(trackRecord.value(5).toUrl()); result.setFileModificationTime(trackRecord.value(6).toDateTime()); - result.setTrackNumber(trackRecord.value(7).toInt()); - result.setDiscNumber(trackRecord.value(8).toInt()); + if (trackRecord.value(7).isValid()) { + result.setTrackNumber(trackRecord.value(7).toInt()); + } + if (trackRecord.value(8).isValid()) { + result.setDiscNumber(trackRecord.value(8).toInt()); + } result.setDuration(QTime::fromMSecsSinceStartOfDay(trackRecord.value(9).toInt())); result.setAlbumName(trackRecord.value(10).toString()); result.setRating(trackRecord.value(11).toInt()); @@ -4476,9 +4846,27 @@ result.setLyricist(trackRecord.value(16).toString()); result.setComment(trackRecord.value(17).toString()); result.setYear(trackRecord.value(18).toInt()); - result.setChannels(trackRecord.value(19).toInt()); - result.setBitRate(trackRecord.value(20).toInt()); - result.setSampleRate(trackRecord.value(21).toInt()); + if (trackRecord.value(19).isValid()) { + bool isValid; + auto value = trackRecord.value(19).toInt(&isValid); + if (isValid) { + result.setChannels(value); + } + } + if (trackRecord.value(20).isValid()) { + bool isValid; + auto value = trackRecord.value(20).toInt(&isValid); + if (isValid) { + result.setBitRate(value); + } + } + if (trackRecord.value(21).isValid()) { + bool isValid; + auto value = trackRecord.value(21).toInt(&isValid); + if (isValid) { + result.setSampleRate(value); + } + } result.setAlbumId(trackRecord.value(2).toULongLong()); result.setHasEmbeddedCover(trackRecord.value(22).toBool()); @@ -4493,25 +4881,47 @@ result[TrackDataType::key_type::DatabaseIdRole] = trackRecord.value(0); result[TrackDataType::key_type::TitleRole] = trackRecord.value(1); - result[TrackDataType::key_type::AlbumRole] = trackRecord.value(10); - result[TrackDataType::key_type::AlbumIdRole] = trackRecord.value(2); - result[TrackDataType::key_type::ArtistRole] = trackRecord.value(3); - result[TrackDataType::key_type::AlbumArtistRole] = trackRecord.value(4); + if (!trackRecord.value(10).isNull()) { + result[TrackDataType::key_type::AlbumRole] = trackRecord.value(10); + result[TrackDataType::key_type::AlbumIdRole] = trackRecord.value(2); + } + if (!trackRecord.value(3).isNull()) { + result[TrackDataType::key_type::ArtistRole] = trackRecord.value(3); + } + if (!trackRecord.value(4).isNull()) { + result[TrackDataType::key_type::AlbumArtistRole] = trackRecord.value(4); + } result[TrackDataType::key_type::ResourceRole] = trackRecord.value(5); - result[TrackDataType::key_type::TrackNumberRole] = trackRecord.value(7); - result[TrackDataType::key_type::DiscNumberRole] = trackRecord.value(8); + if (!trackRecord.value(7).isNull()) { + result[TrackDataType::key_type::TrackNumberRole] = trackRecord.value(7); + } + if (!trackRecord.value(8).isNull()) { + result[TrackDataType::key_type::DiscNumberRole] = trackRecord.value(8); + } result[TrackDataType::key_type::DurationRole] = QTime::fromMSecsSinceStartOfDay(trackRecord.value(9).toInt()); result[TrackDataType::key_type::MilliSecondsDurationRole] = trackRecord.value(9).toInt(); result[TrackDataType::key_type::RatingRole] = trackRecord.value(11); - result[TrackDataType::key_type::ImageUrlRole] = QUrl(trackRecord.value(12).toString()); + if (!trackRecord.value(12).isNull()) { + result[TrackDataType::key_type::ImageUrlRole] = QUrl(trackRecord.value(12).toString()); + } result[TrackDataType::key_type::IsSingleDiscAlbumRole] = trackRecord.value(13); - result[TrackDataType::key_type::GenreRole] = trackRecord.value(14); - result[TrackDataType::key_type::ComposerRole] = trackRecord.value(15); - result[TrackDataType::key_type::LyricistRole] = trackRecord.value(16); + if (!trackRecord.value(14).isNull()) { + result[TrackDataType::key_type::GenreRole] = trackRecord.value(14); + } + if (!trackRecord.value(15).isNull()) { + result[TrackDataType::key_type::ComposerRole] = trackRecord.value(15); + } + if (!trackRecord.value(16).isNull()) { + result[TrackDataType::key_type::LyricistRole] = trackRecord.value(16); + } result[TrackDataType::key_type::HasEmbeddedCover] = trackRecord.value(22); result[TrackDataType::key_type::FileModificationTime] = trackRecord.value(6); - result[TrackDataType::key_type::FirstPlayDate] = trackRecord.value(24); - result[TrackDataType::key_type::LastPlayDate] = trackRecord.value(25); + if (!trackRecord.value(24).isNull()) { + result[TrackDataType::key_type::FirstPlayDate] = trackRecord.value(24); + } + if (!trackRecord.value(25).isNull()) { + result[TrackDataType::key_type::LastPlayDate] = trackRecord.value(25); + } result[TrackDataType::key_type::PlayCounter] = trackRecord.value(26); result[TrackDataType::key_type::PlayFrequency] = trackRecord.value(27); result[DataType::key_type::ElementTypeRole] = ElisaUtils::Track; @@ -4556,14 +4966,14 @@ d->mRemoveTracksMapping.bindValue(QStringLiteral(":fileName"), removedTrackFileName.toString()); - auto result = d->mRemoveTracksMapping.exec(); + auto result = execQuery(d->mRemoveTracksMapping); if (!result || !d->mRemoveTracksMapping.isActive()) { Q_EMIT databaseError(); - qDebug() << "DatabaseInterface::internalRemoveTracksList" << d->mRemoveTracksMapping.lastQuery(); - qDebug() << "DatabaseInterface::internalRemoveTracksList" << d->mRemoveTracksMapping.boundValues(); - qDebug() << "DatabaseInterface::internalRemoveTracksList" << d->mRemoveTracksMapping.lastError(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::internalRemoveTracksList" << d->mRemoveTracksMapping.lastQuery(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::internalRemoveTracksList" << d->mRemoveTracksMapping.boundValues(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::internalRemoveTracksList" << d->mRemoveTracksMapping.lastError(); continue; } @@ -4600,14 +5010,14 @@ d->mSelectAlbumArtUriFromAlbumIdQuery.bindValue(QStringLiteral(":albumId"), albumId); - auto queryResult = d->mSelectAlbumArtUriFromAlbumIdQuery.exec(); + auto queryResult = execQuery(d->mSelectAlbumArtUriFromAlbumIdQuery); if (!queryResult || !d->mSelectAlbumArtUriFromAlbumIdQuery.isSelect() || !d->mSelectAlbumArtUriFromAlbumIdQuery.isActive()) { Q_EMIT databaseError(); - qDebug() << "DatabaseInterface::insertArtist" << d->mSelectAlbumArtUriFromAlbumIdQuery.lastQuery(); - qDebug() << "DatabaseInterface::insertArtist" << d->mSelectAlbumArtUriFromAlbumIdQuery.boundValues(); - qDebug() << "DatabaseInterface::insertArtist" << d->mSelectAlbumArtUriFromAlbumIdQuery.lastError(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::insertArtist" << d->mSelectAlbumArtUriFromAlbumIdQuery.lastQuery(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::insertArtist" << d->mSelectAlbumArtUriFromAlbumIdQuery.boundValues(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::insertArtist" << d->mSelectAlbumArtUriFromAlbumIdQuery.lastError(); d->mSelectAlbumArtUriFromAlbumIdQuery.finish(); @@ -4633,14 +5043,14 @@ d->mSelectAlbumQuery.bindValue(QStringLiteral(":albumId"), albumId); - auto queryResult = d->mSelectAlbumQuery.exec(); + auto queryResult = execQuery(d->mSelectAlbumQuery); if (!queryResult || !d->mSelectAlbumQuery.isSelect() || !d->mSelectAlbumQuery.isActive()) { Q_EMIT databaseError(); - qDebug() << "DatabaseInterface::internalAlbumFromId" << d->mSelectAlbumQuery.lastQuery(); - qDebug() << "DatabaseInterface::internalAlbumFromId" << d->mSelectAlbumQuery.boundValues(); - qDebug() << "DatabaseInterface::internalAlbumFromId" << d->mSelectAlbumQuery.lastError(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::internalAlbumFromId" << d->mSelectAlbumQuery.lastQuery(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::internalAlbumFromId" << d->mSelectAlbumQuery.boundValues(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::internalAlbumFromId" << d->mSelectAlbumQuery.lastError(); d->mSelectAlbumQuery.finish(); @@ -4660,50 +5070,18 @@ return result; } -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; - auto queryResult = query.exec(); + auto queryResult = execQuery(query); if (!queryResult || !query.isSelect() || !query.isActive()) { Q_EMIT databaseError(); - qDebug() << "DatabaseInterface::internalAllGenericPartialData" << query.lastQuery(); - qDebug() << "DatabaseInterface::internalAllGenericPartialData" << query.boundValues(); - qDebug() << "DatabaseInterface::internalAllGenericPartialData" << query.lastError(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::internalAllGenericPartialData" << query.lastQuery(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::internalAllGenericPartialData" << query.boundValues(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::internalAllGenericPartialData" << query.lastError(); query.finish(); @@ -4730,14 +5108,14 @@ d->mSelectLyricistByNameQuery.bindValue(QStringLiteral(":name"), name); - auto queryResult = d->mSelectLyricistByNameQuery.exec(); + auto queryResult = execQuery(d->mSelectLyricistByNameQuery); if (!queryResult || !d->mSelectLyricistByNameQuery.isSelect() || !d->mSelectLyricistByNameQuery.isActive()) { Q_EMIT databaseError(); - qDebug() << "DatabaseInterface::insertLyricist" << d->mSelectLyricistByNameQuery.lastQuery(); - qDebug() << "DatabaseInterface::insertLyricist" << d->mSelectLyricistByNameQuery.boundValues(); - qDebug() << "DatabaseInterface::insertLyricist" << d->mSelectLyricistByNameQuery.lastError(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::insertLyricist" << d->mSelectLyricistByNameQuery.lastQuery(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::insertLyricist" << d->mSelectLyricistByNameQuery.boundValues(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::insertLyricist" << d->mSelectLyricistByNameQuery.lastError(); d->mSelectLyricistByNameQuery.finish(); @@ -4757,14 +5135,14 @@ d->mInsertLyricistQuery.bindValue(QStringLiteral(":lyricistId"), d->mLyricistId); d->mInsertLyricistQuery.bindValue(QStringLiteral(":name"), name); - queryResult = d->mInsertLyricistQuery.exec(); + queryResult = execQuery(d->mInsertLyricistQuery); if (!queryResult || !d->mInsertLyricistQuery.isActive()) { Q_EMIT databaseError(); - qDebug() << "DatabaseInterface::insertLyricist" << d->mInsertLyricistQuery.lastQuery(); - qDebug() << "DatabaseInterface::insertLyricist" << d->mInsertLyricistQuery.boundValues(); - qDebug() << "DatabaseInterface::insertLyricist" << d->mInsertLyricistQuery.lastError(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::insertLyricist" << d->mInsertLyricistQuery.lastQuery(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::insertLyricist" << d->mInsertLyricistQuery.boundValues(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::insertLyricist" << d->mInsertLyricistQuery.lastError(); d->mInsertLyricistQuery.finish(); @@ -4782,6 +5160,36 @@ return result; } +QHash DatabaseInterface::internalAllFileName() +{ + auto allFileNames = QHash{}; + + auto queryResult = execQuery(d->mSelectAllTrackFilesQuery); + + if (!queryResult || !d->mSelectAllTrackFilesQuery.isSelect() || !d->mSelectAllTrackFilesQuery.isActive()) { + Q_EMIT databaseError(); + + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::insertMusicSource" << d->mSelectAllTrackFilesQuery.lastQuery(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::insertMusicSource" << d->mSelectAllTrackFilesQuery.boundValues(); + qCDebug(orgKdeElisaDatabase) << "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); @@ -4792,14 +5200,14 @@ d->mSelectArtistByNameQuery.bindValue(QStringLiteral(":name"), name); - auto queryResult = d->mSelectArtistByNameQuery.exec(); + auto queryResult = execQuery(d->mSelectArtistByNameQuery); if (!queryResult || !d->mSelectArtistByNameQuery.isSelect() || !d->mSelectArtistByNameQuery.isActive()) { Q_EMIT databaseError(); - qDebug() << "DatabaseInterface::insertArtist" << d->mSelectArtistByNameQuery.lastQuery(); - qDebug() << "DatabaseInterface::insertArtist" << d->mSelectArtistByNameQuery.boundValues(); - qDebug() << "DatabaseInterface::insertArtist" << d->mSelectArtistByNameQuery.lastError(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::insertArtist" << d->mSelectArtistByNameQuery.lastQuery(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::insertArtist" << d->mSelectArtistByNameQuery.boundValues(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::insertArtist" << d->mSelectArtistByNameQuery.lastError(); d->mSelectArtistByNameQuery.finish(); @@ -4823,14 +5231,14 @@ { d->mRemoveTrackQuery.bindValue(QStringLiteral(":trackId"), trackId); - auto result = d->mRemoveTrackQuery.exec(); + auto result = execQuery(d->mRemoveTrackQuery); if (!result || !d->mRemoveTrackQuery.isActive()) { Q_EMIT databaseError(); - qDebug() << "DatabaseInterface::removeTrackInDatabase" << d->mRemoveTrackQuery.lastQuery(); - qDebug() << "DatabaseInterface::removeTrackInDatabase" << d->mRemoveTrackQuery.boundValues(); - qDebug() << "DatabaseInterface::removeTrackInDatabase" << d->mRemoveTrackQuery.lastError(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::removeTrackInDatabase" << d->mRemoveTrackQuery.lastQuery(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::removeTrackInDatabase" << d->mRemoveTrackQuery.boundValues(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::removeTrackInDatabase" << d->mRemoveTrackQuery.lastError(); } d->mRemoveTrackQuery.finish(); @@ -4850,8 +5258,16 @@ d->mUpdateTrackQuery.bindValue(QStringLiteral(":albumArtistName"), {}); } d->mUpdateTrackQuery.bindValue(QStringLiteral(":albumPath"), albumPath); - d->mUpdateTrackQuery.bindValue(QStringLiteral(":trackNumber"), oneTrack.trackNumber()); - d->mUpdateTrackQuery.bindValue(QStringLiteral(":discNumber"), oneTrack.discNumber()); + if (oneTrack.trackNumberIsValid()) { + d->mUpdateTrackQuery.bindValue(QStringLiteral(":trackNumber"), oneTrack.trackNumber()); + } else { + d->mUpdateTrackQuery.bindValue(QStringLiteral(":trackNumber"), {}); + } + if (oneTrack.discNumberIsValid()) { + d->mUpdateTrackQuery.bindValue(QStringLiteral(":discNumber"), oneTrack.discNumber()); + } else { + d->mUpdateTrackQuery.bindValue(QStringLiteral(":discNumber"), {}); + } d->mUpdateTrackQuery.bindValue(QStringLiteral(":trackDuration"), QVariant::fromValue(oneTrack.duration().msecsSinceStartOfDay())); d->mUpdateTrackQuery.bindValue(QStringLiteral(":trackRating"), oneTrack.rating()); if (insertGenre(oneTrack.genre()) != 0) { @@ -4871,18 +5287,30 @@ } d->mUpdateTrackQuery.bindValue(QStringLiteral(":comment"), oneTrack.comment()); d->mUpdateTrackQuery.bindValue(QStringLiteral(":year"), oneTrack.year()); - d->mUpdateTrackQuery.bindValue(QStringLiteral(":channels"), oneTrack.channels()); - d->mUpdateTrackQuery.bindValue(QStringLiteral(":bitRate"), oneTrack.bitRate()); - d->mUpdateTrackQuery.bindValue(QStringLiteral(":sampleRate"), oneTrack.sampleRate()); + if (oneTrack.channelsIsValid()) { + d->mUpdateTrackQuery.bindValue(QStringLiteral(":channels"), oneTrack.channels()); + } else { + d->mUpdateTrackQuery.bindValue(QStringLiteral(":channels"), {}); + } + if (oneTrack.bitRateIsValid()) { + d->mUpdateTrackQuery.bindValue(QStringLiteral(":bitRate"), oneTrack.bitRate()); + } else { + d->mUpdateTrackQuery.bindValue(QStringLiteral(":bitRate"), {}); + } + if (oneTrack.sampleRateIsValid()) { + d->mUpdateTrackQuery.bindValue(QStringLiteral(":sampleRate"), oneTrack.sampleRate()); + } else { + d->mUpdateTrackQuery.bindValue(QStringLiteral(":sampleRate"), {}); + } - auto result = d->mUpdateTrackQuery.exec(); + auto result = execQuery(d->mUpdateTrackQuery); if (!result || !d->mUpdateTrackQuery.isActive()) { Q_EMIT databaseError(); - qDebug() << "DatabaseInterface::updateTrackInDatabase" << d->mUpdateTrackQuery.lastQuery(); - qDebug() << "DatabaseInterface::updateTrackInDatabase" << d->mUpdateTrackQuery.boundValues(); - qDebug() << "DatabaseInterface::updateTrackInDatabase" << d->mUpdateTrackQuery.lastError(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::updateTrackInDatabase" << d->mUpdateTrackQuery.lastQuery(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::updateTrackInDatabase" << d->mUpdateTrackQuery.boundValues(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::updateTrackInDatabase" << d->mUpdateTrackQuery.lastError(); } d->mUpdateTrackQuery.finish(); @@ -4892,14 +5320,14 @@ { d->mRemoveAlbumQuery.bindValue(QStringLiteral(":albumId"), albumId); - auto result = d->mRemoveAlbumQuery.exec(); + auto result = execQuery(d->mRemoveAlbumQuery); if (!result || !d->mRemoveAlbumQuery.isActive()) { Q_EMIT databaseError(); - qDebug() << "DatabaseInterface::removeAlbumInDatabase" << d->mRemoveAlbumQuery.lastQuery(); - qDebug() << "DatabaseInterface::removeAlbumInDatabase" << d->mRemoveAlbumQuery.boundValues(); - qDebug() << "DatabaseInterface::removeAlbumInDatabase" << d->mRemoveAlbumQuery.lastError(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::removeAlbumInDatabase" << d->mRemoveAlbumQuery.lastQuery(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::removeAlbumInDatabase" << d->mRemoveAlbumQuery.boundValues(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::removeAlbumInDatabase" << d->mRemoveAlbumQuery.lastError(); } d->mRemoveAlbumQuery.finish(); @@ -4909,22 +5337,22 @@ { d->mRemoveArtistQuery.bindValue(QStringLiteral(":artistId"), artistId); - auto result = d->mRemoveArtistQuery.exec(); + auto result = execQuery(d->mRemoveArtistQuery); if (!result || !d->mRemoveArtistQuery.isActive()) { Q_EMIT databaseError(); - qDebug() << "DatabaseInterface::removeArtistInDatabase" << d->mRemoveArtistQuery.lastQuery(); - qDebug() << "DatabaseInterface::removeArtistInDatabase" << d->mRemoveArtistQuery.boundValues(); - qDebug() << "DatabaseInterface::removeArtistInDatabase" << d->mRemoveArtistQuery.lastError(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::removeArtistInDatabase" << d->mRemoveArtistQuery.lastQuery(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::removeArtistInDatabase" << d->mRemoveArtistQuery.boundValues(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::removeArtistInDatabase" << d->mRemoveArtistQuery.lastError(); } d->mRemoveArtistQuery.finish(); } void DatabaseInterface::reloadExistingDatabase() { - qDebug() << "DatabaseInterface::reloadExistingDatabase"; + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::reloadExistingDatabase"; d->mArtistId = initialId(DataUtils::DataType::AllArtists); d->mComposerId = initialId(DataUtils::DataType::AllComposers); @@ -4965,14 +5393,14 @@ return result; } - auto queryResult = request.exec(); + auto queryResult = execQuery(request); if (!queryResult || !request.isSelect() || !request.isActive()) { Q_EMIT databaseError(); - qDebug() << "DatabaseInterface::insertMusicSource" << request.lastQuery(); - qDebug() << "DatabaseInterface::insertMusicSource" << request.boundValues(); - qDebug() << "DatabaseInterface::insertMusicSource" << request.lastError(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::insertMusicSource" << request.lastQuery(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::insertMusicSource" << request.boundValues(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::insertMusicSource" << request.lastError(); request.finish(); @@ -4998,83 +5426,29 @@ 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(); - d->mSelectTrackQuery.bindValue(QStringLiteral(":albumId"), albumId); + d->mSelectTrackIdQuery.bindValue(QStringLiteral(":albumId"), albumId); - auto result = d->mSelectTrackQuery.exec(); + auto result = execQuery(d->mSelectTrackIdQuery); - if (!result || !d->mSelectTrackQuery.isSelect() || !d->mSelectTrackQuery.isActive()) { + if (!result || !d->mSelectTrackIdQuery.isSelect() || !d->mSelectTrackIdQuery.isActive()) { Q_EMIT databaseError(); - qDebug() << "DatabaseInterface::fetchTrackIds" << d->mSelectTrackQuery.lastQuery(); - qDebug() << "DatabaseInterface::fetchTrackIds" << d->mSelectTrackQuery.boundValues(); - qDebug() << "DatabaseInterface::fetchTrackIds" << d->mSelectTrackQuery.lastError(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::fetchTrackIds" << d->mSelectTrackIdQuery.lastQuery(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::fetchTrackIds" << d->mSelectTrackIdQuery.boundValues(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::fetchTrackIds" << d->mSelectTrackIdQuery.lastError(); } - while (d->mSelectTrackQuery.next()) { - const auto ¤tRecord = d->mSelectTrackQuery.record(); + while (d->mSelectTrackIdQuery.next()) { + const auto ¤tRecord = d->mSelectTrackIdQuery.record(); allTracks.push_back(currentRecord.value(0).toULongLong()); } - d->mSelectTrackQuery.finish(); + d->mSelectTrackIdQuery.finish(); return allTracks; } @@ -5086,14 +5460,14 @@ d->mSelectAlbumIdFromTitleQuery.bindValue(QStringLiteral(":title"), title); d->mSelectAlbumIdFromTitleQuery.bindValue(QStringLiteral(":artistName"), artist); - auto queryResult = d->mSelectAlbumIdFromTitleQuery.exec(); + auto queryResult = execQuery(d->mSelectAlbumIdFromTitleQuery); if (!queryResult || !d->mSelectAlbumIdFromTitleQuery.isSelect() || !d->mSelectAlbumIdFromTitleQuery.isActive()) { Q_EMIT databaseError(); - qDebug() << "DatabaseInterface::internalAlbumIdFromTitleAndArtist" << d->mSelectAlbumIdFromTitleQuery.lastQuery(); - qDebug() << "DatabaseInterface::internalAlbumIdFromTitleAndArtist" << d->mSelectAlbumIdFromTitleQuery.boundValues(); - qDebug() << "DatabaseInterface::internalAlbumIdFromTitleAndArtist" << d->mSelectAlbumIdFromTitleQuery.lastError(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::internalAlbumIdFromTitleAndArtist" << d->mSelectAlbumIdFromTitleQuery.lastQuery(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::internalAlbumIdFromTitleAndArtist" << d->mSelectAlbumIdFromTitleQuery.boundValues(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::internalAlbumIdFromTitleAndArtist" << d->mSelectAlbumIdFromTitleQuery.lastError(); d->mSelectAlbumIdFromTitleQuery.finish(); @@ -5109,14 +5483,14 @@ if (result == 0) { d->mSelectAlbumIdFromTitleWithoutArtistQuery.bindValue(QStringLiteral(":title"), title); - auto queryResult = d->mSelectAlbumIdFromTitleWithoutArtistQuery.exec(); + auto queryResult = execQuery(d->mSelectAlbumIdFromTitleWithoutArtistQuery); if (!queryResult || !d->mSelectAlbumIdFromTitleWithoutArtistQuery.isSelect() || !d->mSelectAlbumIdFromTitleWithoutArtistQuery.isActive()) { Q_EMIT databaseError(); - qDebug() << "DatabaseInterface::internalAlbumIdFromTitleAndArtist" << d->mSelectAlbumIdFromTitleWithoutArtistQuery.lastQuery(); - qDebug() << "DatabaseInterface::internalAlbumIdFromTitleAndArtist" << d->mSelectAlbumIdFromTitleWithoutArtistQuery.boundValues(); - qDebug() << "DatabaseInterface::internalAlbumIdFromTitleAndArtist" << d->mSelectAlbumIdFromTitleWithoutArtistQuery.lastError(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::internalAlbumIdFromTitleAndArtist" << d->mSelectAlbumIdFromTitleWithoutArtistQuery.lastQuery(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::internalAlbumIdFromTitleAndArtist" << d->mSelectAlbumIdFromTitleWithoutArtistQuery.boundValues(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::internalAlbumIdFromTitleAndArtist" << d->mSelectAlbumIdFromTitleWithoutArtistQuery.lastError(); d->mSelectAlbumIdFromTitleWithoutArtistQuery.finish(); @@ -5147,14 +5521,14 @@ d->mSelectTrackFromIdQuery.bindValue(QStringLiteral(":trackId"), id); - auto queryResult = d->mSelectTrackFromIdQuery.exec(); + auto queryResult = execQuery(d->mSelectTrackFromIdQuery); if (!queryResult || !d->mSelectTrackFromIdQuery.isSelect() || !d->mSelectTrackFromIdQuery.isActive()) { Q_EMIT databaseError(); - qDebug() << "DatabaseInterface::internalTrackFromDatabaseId" << d->mSelectTrackFromIdQuery.lastQuery(); - qDebug() << "DatabaseInterface::internalTrackFromDatabaseId" << d->mSelectTrackFromIdQuery.boundValues(); - qDebug() << "DatabaseInterface::internalTrackFromDatabaseId" << d->mSelectTrackFromIdQuery.lastError(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::internalTrackFromDatabaseId" << d->mSelectTrackFromIdQuery.lastQuery(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::internalTrackFromDatabaseId" << d->mSelectTrackFromIdQuery.boundValues(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::internalTrackFromDatabaseId" << d->mSelectTrackFromIdQuery.lastError(); d->mSelectTrackFromIdQuery.finish(); @@ -5191,14 +5565,14 @@ d->mSelectTrackIdFromTitleArtistAlbumTrackDiscNumberQuery.bindValue(QStringLiteral(":trackNumber"), trackNumber); d->mSelectTrackIdFromTitleArtistAlbumTrackDiscNumberQuery.bindValue(QStringLiteral(":discNumber"), discNumber); - auto queryResult = d->mSelectTrackIdFromTitleArtistAlbumTrackDiscNumberQuery.exec(); + auto queryResult = execQuery(d->mSelectTrackIdFromTitleArtistAlbumTrackDiscNumberQuery); if (!queryResult || !d->mSelectTrackIdFromTitleArtistAlbumTrackDiscNumberQuery.isSelect() || !d->mSelectTrackIdFromTitleArtistAlbumTrackDiscNumberQuery.isActive()) { Q_EMIT databaseError(); - qDebug() << "DatabaseInterface::trackIdFromTitleAlbumArtist" << d->mSelectTrackIdFromTitleArtistAlbumTrackDiscNumberQuery.lastQuery(); - qDebug() << "DatabaseInterface::trackIdFromTitleAlbumArtist" << d->mSelectTrackIdFromTitleArtistAlbumTrackDiscNumberQuery.boundValues(); - qDebug() << "DatabaseInterface::trackIdFromTitleAlbumArtist" << d->mSelectTrackIdFromTitleArtistAlbumTrackDiscNumberQuery.lastError(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::trackIdFromTitleAlbumArtist" << d->mSelectTrackIdFromTitleArtistAlbumTrackDiscNumberQuery.lastQuery(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::trackIdFromTitleAlbumArtist" << d->mSelectTrackIdFromTitleArtistAlbumTrackDiscNumberQuery.boundValues(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::trackIdFromTitleAlbumArtist" << d->mSelectTrackIdFromTitleArtistAlbumTrackDiscNumberQuery.lastError(); d->mSelectTrackIdFromTitleArtistAlbumTrackDiscNumberQuery.finish(); @@ -5231,14 +5605,14 @@ d->mSelectTrackIdFromTitleAlbumTrackDiscNumberQuery.bindValue(QStringLiteral(":albumArtist"), albumArtist); d->mSelectTrackIdFromTitleAlbumTrackDiscNumberQuery.bindValue(QStringLiteral(":priority"), priority); - auto queryResult = d->mSelectTrackIdFromTitleAlbumTrackDiscNumberQuery.exec(); + auto queryResult = execQuery(d->mSelectTrackIdFromTitleAlbumTrackDiscNumberQuery); if (!queryResult || !d->mSelectTrackIdFromTitleAlbumTrackDiscNumberQuery.isSelect() || !d->mSelectTrackIdFromTitleAlbumTrackDiscNumberQuery.isActive()) { Q_EMIT databaseError(); - qDebug() << "DatabaseInterface::trackIdFromTitleAlbumArtist" << d->mSelectTrackIdFromTitleAlbumTrackDiscNumberQuery.lastQuery(); - qDebug() << "DatabaseInterface::trackIdFromTitleAlbumArtist" << d->mSelectTrackIdFromTitleAlbumTrackDiscNumberQuery.boundValues(); - qDebug() << "DatabaseInterface::trackIdFromTitleAlbumArtist" << d->mSelectTrackIdFromTitleAlbumTrackDiscNumberQuery.lastError(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::trackIdFromTitleAlbumArtist" << d->mSelectTrackIdFromTitleAlbumTrackDiscNumberQuery.lastQuery(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::trackIdFromTitleAlbumArtist" << d->mSelectTrackIdFromTitleAlbumTrackDiscNumberQuery.boundValues(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::trackIdFromTitleAlbumArtist" << d->mSelectTrackIdFromTitleAlbumTrackDiscNumberQuery.lastError(); d->mSelectTrackIdFromTitleAlbumTrackDiscNumberQuery.finish(); @@ -5264,14 +5638,14 @@ d->mSelectTracksMapping.bindValue(QStringLiteral(":fileName"), fileName.toString()); - auto queryResult = d->mSelectTracksMapping.exec(); + auto queryResult = execQuery(d->mSelectTracksMapping); if (!queryResult || !d->mSelectTracksMapping.isSelect() || !d->mSelectTracksMapping.isActive()) { Q_EMIT databaseError(); - qDebug() << "DatabaseInterface::internalTrackIdFromFileName" << d->mSelectTracksMapping.lastQuery(); - qDebug() << "DatabaseInterface::internalTrackIdFromFileName" << d->mSelectTracksMapping.boundValues(); - qDebug() << "DatabaseInterface::internalTrackIdFromFileName" << d->mSelectTracksMapping.lastError(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::internalTrackIdFromFileName" << d->mSelectTracksMapping.lastQuery(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::internalTrackIdFromFileName" << d->mSelectTracksMapping.boundValues(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::internalTrackIdFromFileName" << d->mSelectTracksMapping.lastError(); d->mSelectTracksMapping.finish(); @@ -5296,14 +5670,14 @@ d->mSelectTracksFromArtist.bindValue(QStringLiteral(":artistName"), ArtistName); - auto result = d->mSelectTracksFromArtist.exec(); + auto result = execQuery(d->mSelectTracksFromArtist); if (!result || !d->mSelectTracksFromArtist.isSelect() || !d->mSelectTracksFromArtist.isActive()) { Q_EMIT databaseError(); - qDebug() << "DatabaseInterface::tracksFromAuthor" << d->mSelectTracksFromArtist.lastQuery(); - qDebug() << "DatabaseInterface::tracksFromAuthor" << d->mSelectTracksFromArtist.boundValues(); - qDebug() << "DatabaseInterface::tracksFromAuthor" << d->mSelectTracksFromArtist.lastError(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::tracksFromAuthor" << d->mSelectTracksFromArtist.lastQuery(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::tracksFromAuthor" << d->mSelectTracksFromArtist.boundValues(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::tracksFromAuthor" << d->mSelectTracksFromArtist.lastError(); return allTracks; } @@ -5325,14 +5699,14 @@ d->mSelectAlbumIdsFromArtist.bindValue(QStringLiteral(":artistName"), ArtistName); - auto result = d->mSelectAlbumIdsFromArtist.exec(); + auto result = execQuery(d->mSelectAlbumIdsFromArtist); if (!result || !d->mSelectAlbumIdsFromArtist.isSelect() || !d->mSelectAlbumIdsFromArtist.isActive()) { Q_EMIT databaseError(); - qDebug() << "DatabaseInterface::tracksFromAuthor" << d->mSelectAlbumIdsFromArtist.lastQuery(); - qDebug() << "DatabaseInterface::tracksFromAuthor" << d->mSelectAlbumIdsFromArtist.boundValues(); - qDebug() << "DatabaseInterface::tracksFromAuthor" << d->mSelectAlbumIdsFromArtist.lastError(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::tracksFromAuthor" << d->mSelectAlbumIdsFromArtist.lastQuery(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::tracksFromAuthor" << d->mSelectAlbumIdsFromArtist.boundValues(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::tracksFromAuthor" << d->mSelectAlbumIdsFromArtist.lastError(); return allAlbumIds; } @@ -5605,22 +5979,40 @@ return query.prepare(queryText); } +bool DatabaseInterface::execQuery(QSqlQuery &query) +{ +#if !defined NDEBUG + auto timer = QElapsedTimer{}; + timer.start(); +#endif + + auto result = query.exec(); + +#if !defined NDEBUG + if (timer.nsecsElapsed() > 10000000) { + qCDebug(orgKdeElisaDatabase) << "[[" << timer.nsecsElapsed() << "]]" << query.lastQuery(); + } +#endif + + return result; +} + void DatabaseInterface::updateAlbumArtist(qulonglong albumId, const QString &title, const QString &albumPath, const QString &artistName) { d->mUpdateAlbumArtistQuery.bindValue(QStringLiteral(":albumId"), albumId); insertArtist(artistName); d->mUpdateAlbumArtistQuery.bindValue(QStringLiteral(":artistName"), artistName); - auto queryResult = d->mUpdateAlbumArtistQuery.exec(); + auto queryResult = execQuery(d->mUpdateAlbumArtistQuery); if (!queryResult || !d->mUpdateAlbumArtistQuery.isActive()) { Q_EMIT databaseError(); - qDebug() << "DatabaseInterface::updateAlbumArtist" << d->mUpdateAlbumArtistQuery.lastQuery(); - qDebug() << "DatabaseInterface::updateAlbumArtist" << d->mUpdateAlbumArtistQuery.boundValues(); - qDebug() << "DatabaseInterface::updateAlbumArtist" << d->mUpdateAlbumArtistQuery.lastError(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::updateAlbumArtist" << d->mUpdateAlbumArtistQuery.lastQuery(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::updateAlbumArtist" << d->mUpdateAlbumArtistQuery.boundValues(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::updateAlbumArtist" << d->mUpdateAlbumArtistQuery.lastError(); d->mUpdateAlbumArtistQuery.finish(); @@ -5633,14 +6025,14 @@ d->mUpdateAlbumArtistInTracksQuery.bindValue(QStringLiteral(":albumPath"), albumPath); d->mUpdateAlbumArtistInTracksQuery.bindValue(QStringLiteral(":artistName"), artistName); - queryResult = d->mUpdateAlbumArtistInTracksQuery.exec(); + queryResult = execQuery(d->mUpdateAlbumArtistInTracksQuery); if (!queryResult || !d->mUpdateAlbumArtistInTracksQuery.isActive()) { Q_EMIT databaseError(); - qDebug() << "DatabaseInterface::updateAlbumArtist" << d->mUpdateAlbumArtistInTracksQuery.lastQuery(); - qDebug() << "DatabaseInterface::updateAlbumArtist" << d->mUpdateAlbumArtistInTracksQuery.boundValues(); - qDebug() << "DatabaseInterface::updateAlbumArtist" << d->mUpdateAlbumArtistInTracksQuery.lastError(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::updateAlbumArtist" << d->mUpdateAlbumArtistInTracksQuery.lastQuery(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::updateAlbumArtist" << d->mUpdateAlbumArtistInTracksQuery.boundValues(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::updateAlbumArtist" << d->mUpdateAlbumArtistInTracksQuery.lastError(); d->mUpdateAlbumArtistInTracksQuery.finish(); @@ -5655,14 +6047,14 @@ d->mUpdateTrackStatistics.bindValue(QStringLiteral(":fileName"), fileName); d->mUpdateTrackStatistics.bindValue(QStringLiteral(":playDate"), time.toMSecsSinceEpoch()); - auto queryResult = d->mUpdateTrackStatistics.exec(); + auto queryResult = execQuery(d->mUpdateTrackStatistics); if (!queryResult || !d->mUpdateTrackStatistics.isActive()) { Q_EMIT databaseError(); - qDebug() << "DatabaseInterface::updateTrackStatistics" << d->mUpdateTrackStatistics.lastQuery(); - qDebug() << "DatabaseInterface::updateTrackStatistics" << d->mUpdateTrackStatistics.boundValues(); - qDebug() << "DatabaseInterface::updateTrackStatistics" << d->mUpdateTrackStatistics.lastError(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::updateTrackStatistics" << d->mUpdateTrackStatistics.lastQuery(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::updateTrackStatistics" << d->mUpdateTrackStatistics.boundValues(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::updateTrackStatistics" << d->mUpdateTrackStatistics.lastError(); d->mUpdateTrackStatistics.finish(); @@ -5674,14 +6066,14 @@ d->mUpdateTrackFirstPlayStatistics.bindValue(QStringLiteral(":fileName"), fileName); d->mUpdateTrackFirstPlayStatistics.bindValue(QStringLiteral(":playDate"), time.toMSecsSinceEpoch()); - queryResult = d->mUpdateTrackFirstPlayStatistics.exec(); + queryResult = execQuery(d->mUpdateTrackFirstPlayStatistics); if (!queryResult || !d->mUpdateTrackFirstPlayStatistics.isActive()) { Q_EMIT databaseError(); - qDebug() << "DatabaseInterface::updateTrackStatistics" << d->mUpdateTrackFirstPlayStatistics.lastQuery(); - qDebug() << "DatabaseInterface::updateTrackStatistics" << d->mUpdateTrackFirstPlayStatistics.boundValues(); - qDebug() << "DatabaseInterface::updateTrackStatistics" << d->mUpdateTrackFirstPlayStatistics.lastError(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::updateTrackStatistics" << d->mUpdateTrackFirstPlayStatistics.lastQuery(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::updateTrackStatistics" << d->mUpdateTrackFirstPlayStatistics.boundValues(); + qCDebug(orgKdeElisaDatabase) << "DatabaseInterface::updateTrackStatistics" << d->mUpdateTrackFirstPlayStatistics.lastError(); d->mUpdateTrackFirstPlayStatistics.finish(); 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/musicaudiotrack.h b/src/musicaudiotrack.h --- a/src/musicaudiotrack.h +++ b/src/musicaudiotrack.h @@ -127,26 +127,36 @@ int trackNumber() const; + bool trackNumberIsValid() const; + void setDiscNumber(int value); int discNumber() const; + bool discNumberIsValid() const; + void setYear(int value); int year() const; void setChannels(int value); int channels() const; + bool channelsIsValid() const; + void setBitRate(int value); int bitRate() const; + bool bitRateIsValid() const; + void setSampleRate(int value); int sampleRate() const; + bool sampleRateIsValid() const; + void setDuration(QTime value); QTime duration() const; diff --git a/src/musicaudiotrack.cpp b/src/musicaudiotrack.cpp --- a/src/musicaudiotrack.cpp +++ b/src/musicaudiotrack.cpp @@ -38,11 +38,11 @@ mTitle(std::move(aTitle)), mArtist(std::move(aArtist)), mAlbumName(std::move(aAlbumName)), mAlbumArtist(std::move(aAlbumArtist)), mGenre(std::move(aGenre)), mComposer(std::move(aComposer)), mLyricist(std::move(aLyricist)), - mResourceURI(std::move(aResourceURI)), - mAlbumCover(std::move(aAlbumCover)), + mResourceURI(std::move(aResourceURI)), mAlbumCover(std::move(aAlbumCover)), mFileModificationTime(std::move(fileModificationTime)), mDuration(aDuration), mTrackNumber(aTrackNumber), mDiscNumber(aDiscNumber), mRating(rating), - mIsValid(aValid), mIsSingleDiscAlbum(aIsSingleDiscAlbum), mHasBooleanCover(aHasEmbeddedCover) + mIsValid(aValid), mIsSingleDiscAlbum(aIsSingleDiscAlbum), mHasBooleanCover(aHasEmbeddedCover), + mTrackNumberIsValid(true), mDiscNumberIsValid(true) { } @@ -98,6 +98,16 @@ bool mHasBooleanCover = false; + bool mTrackNumberIsValid = false; + + bool mDiscNumberIsValid = false; + + bool mChannelsIsValid = false; + + bool mBitRateIsValid = false; + + bool mSampleRateIsValid = false; + }; MusicAudioTrack::MusicAudioTrack() : d(new MusicAudioTrackPrivate()) @@ -177,14 +187,14 @@ result.setGenre(data.genre()); result.setComposer(data.composer()); result.setLyricist(data.lyricist()); - //result.setComment(data.comment()); + result.setComment(data.comment()); result.setAlbumCover(data.albumCover()); result.setTrackNumber(data.trackNumber()); result.setDiscNumber(data.discNumber()); - //result.setYear(data.year()); - //result.setChannels(data.channels()); - //result.setBitRate(data.bitRate()); - //result.setSampleRate(data.sampleRate()); + result.setYear(data.year()); + result.setChannels(data.channels()); + result.setBitRate(data.bitRate()); + result.setSampleRate(data.sampleRate()); result.setResourceURI(data.resourceURI()); result.setRating(data.rating()); result.setDuration(data[MusicAudioTrack::TrackDataType::key_type::DurationRole].toTime()); @@ -345,23 +355,35 @@ void MusicAudioTrack::setTrackNumber(int value) { d->mTrackNumber = value; + d->mTrackNumberIsValid = true; } int MusicAudioTrack::trackNumber() const { return d->mTrackNumber; } +bool MusicAudioTrack::trackNumberIsValid() const +{ + return d->mTrackNumberIsValid; +} + void MusicAudioTrack::setDiscNumber(int value) { d->mDiscNumber = value; + d->mDiscNumberIsValid = true; } int MusicAudioTrack::discNumber() const { return d->mDiscNumber; } +bool MusicAudioTrack::discNumberIsValid() const +{ + return d->mDiscNumberIsValid; +} + void MusicAudioTrack::setYear(int value) { d->mYear = value; @@ -375,33 +397,51 @@ void MusicAudioTrack::setChannels(int value) { d->mChannels = value; + d->mChannelsIsValid = true; } int MusicAudioTrack::channels() const { return d->mChannels; } +bool MusicAudioTrack::channelsIsValid() const +{ + return d->mChannelsIsValid; +} + void MusicAudioTrack::setBitRate(int value) { d->mBitRate = value; + d->mBitRateIsValid = true; } int MusicAudioTrack::bitRate() const { return d->mBitRate; } +bool MusicAudioTrack::bitRateIsValid() const +{ + return d->mBitRateIsValid; +} + void MusicAudioTrack::setSampleRate(int value) { d->mSampleRate = value; + d->mSampleRateIsValid = true; } int MusicAudioTrack::sampleRate() const { return d->mSampleRate; } +bool MusicAudioTrack::sampleRateIsValid() const +{ + return d->mSampleRateIsValid; +} + void MusicAudioTrack::setDuration(QTime value) { d->mDuration = value; 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 @@ -247,24 +247,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 {