[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    [elisa] /: increase test coverage of DatabaseInterface and fix bugs during tracks removal
From:       Matthieu Gallien <null () kde ! org>
Date:       2017-10-31 22:12:28
Message-ID: E1e9elo-0007bp-Fy () code ! kde ! org
[Download RAW message or body]

Git commit ec5a51caa9f53b391e230165b557286e54acc377 by Matthieu Gallien.
Committed on 31/10/2017 at 22:04.
Pushed by mgallien into branch 'master'.

increase test coverage of DatabaseInterface and fix bugs during tracks removal

M  +306  -22   autotests/databaseinterfacetest.cpp
M  +143  -43   src/databaseinterface.cpp
M  +4    -0    src/databaseinterface.h

https://commits.kde.org/elisa/ec5a51caa9f53b391e230165b557286e54acc377

diff --git a/autotests/databaseinterfacetest.cpp \
b/autotests/databaseinterfacetest.cpp index 870bee6..205d166 100644
--- a/autotests/databaseinterfacetest.cpp
+++ b/autotests/databaseinterfacetest.cpp
@@ -1467,9 +1467,14 @@ private Q_SLOTS:
 
     void removeOneTrack()
     {
+        QTemporaryFile databaseFile;
+        databaseFile.open();
+
+        qDebug() << "removeOneTrack" << databaseFile.fileName();
+
         DatabaseInterface musicDb;
 
-        musicDb.init(QStringLiteral("testDb"));
+        musicDb.init(QStringLiteral("testDb"), databaseFile.fileName());
 
         QSignalSpy musicDbArtistAddedSpy(&musicDb, &DatabaseInterface::artistAdded);
         QSignalSpy musicDbAlbumAddedSpy(&musicDb, &DatabaseInterface::albumAdded);
@@ -1636,30 +1641,35 @@ private Q_SLOTS:
         QCOMPARE(firstAlbumTracksCount, 4);
         QCOMPARE(firstAlbumIsSingleDiscAlbum, false);
 
-        auto firstTrackId = \
musicDb.trackIdFromTitleAlbumArtist(QStringLiteral("track1"), \
QStringLiteral("album1"), QStringLiteral("artist1")); +        auto firstTrackId = \
musicDb.trackIdFromTitleAlbumArtist(QStringLiteral("track1"), \
QStringLiteral("album2"), QStringLiteral("artist1"));  auto firstTrack = \
                musicDb.trackFromDatabaseId(firstTrackId);
-        auto secondTrackId = \
musicDb.trackIdFromTitleAlbumArtist(QStringLiteral("track2"), \
QStringLiteral("album1"), QStringLiteral("artist2")); +        auto secondTrackId = \
musicDb.trackIdFromTitleAlbumArtist(QStringLiteral("track2"), \
QStringLiteral("album2"), QStringLiteral("artist1"));  auto secondTrack = \
                musicDb.trackFromDatabaseId(secondTrackId);
-        auto thirdTrackId = \
musicDb.trackIdFromTitleAlbumArtist(QStringLiteral("track3"), \
QStringLiteral("album1"), QStringLiteral("artist3")); +        auto thirdTrackId = \
musicDb.trackIdFromTitleAlbumArtist(QStringLiteral("track3"), \
QStringLiteral("album2"), QStringLiteral("artist1"));  auto thirdTrack = \
                musicDb.trackFromDatabaseId(thirdTrackId);
-        auto fourthTrackId = \
musicDb.trackIdFromTitleAlbumArtist(QStringLiteral("track4"), \
QStringLiteral("album1"), QStringLiteral("artist4")); +        auto fourthTrackId = \
musicDb.trackIdFromTitleAlbumArtist(QStringLiteral("track4"), \
QStringLiteral("album2"), QStringLiteral("artist1"));  auto fourthTrack = \
musicDb.trackFromDatabaseId(fourthTrackId); +        auto fithTrackId = \
musicDb.trackIdFromTitleAlbumArtist(QStringLiteral("track5"), \
QStringLiteral("album2"), QStringLiteral("artist1")); +        auto fithTrack = \
musicDb.trackFromDatabaseId(fithTrackId); +        auto sixthTrackId = \
musicDb.trackIdFromTitleAlbumArtist(QStringLiteral("track6"), \
QStringLiteral("album2"), QStringLiteral("artist1 and artist2")); +        auto \
sixthTrack = musicDb.trackFromDatabaseId(sixthTrackId);  
-        musicDb.removeTracksList({firstTrack.resourceURI(), \
secondTrack.resourceURI(), thirdTrack.resourceURI(), fourthTrack.resourceURI()}); +   \
musicDb.removeTracksList({firstTrack.resourceURI(), secondTrack.resourceURI(), \
thirdTrack.resourceURI(), +                                  \
fourthTrack.resourceURI(), fithTrack.resourceURI(), sixthTrack.resourceURI()});  
         QCOMPARE(musicDb.allAlbums().count(), 2);
-        QCOMPARE(musicDb.allArtists().count(), 3);
+        QCOMPARE(musicDb.allArtists().count(), 5);
         QCOMPARE(musicDbArtistAddedSpy.count(), 6);
         QCOMPARE(musicDbAlbumAddedSpy.count(), 3);
         QCOMPARE(musicDbTrackAddedSpy.count(), 13);
-        QCOMPARE(musicDbArtistRemovedSpy.count(), 3);
+        QCOMPARE(musicDbArtistRemovedSpy.count(), 1);
         QCOMPARE(musicDbAlbumRemovedSpy.count(), 1);
-        QCOMPARE(musicDbTrackRemovedSpy.count(), 4);
+        QCOMPARE(musicDbTrackRemovedSpy.count(), 6);
         QCOMPARE(musicDbArtistModifiedSpy.count(), 0);
         QCOMPARE(musicDbAlbumModifiedSpy.count(), 3);
         QCOMPARE(musicDbTrackModifiedSpy.count(), 1);
 
-        auto removedAlbum = musicDb.albumFromTitle(QStringLiteral("album1"));
+        auto removedAlbum = musicDb.albumFromTitle(QStringLiteral("album2"));
 
         QCOMPARE(removedAlbum.isValid(), false);
     }
@@ -1729,7 +1739,7 @@ private Q_SLOTS:
         QCOMPARE(firstAlbumTracksCount, 4);
         QCOMPARE(firstAlbumIsSingleDiscAlbum, false);
 
-        auto trackId = musicDb.trackIdFromTitleAlbumArtist(QStringLiteral("track4"), \
QStringLiteral("album1"), QStringLiteral("artist4")); +        auto trackId = \
musicDb.trackIdFromTitleAlbumArtist(QStringLiteral("track3"), \
QStringLiteral("album1"), QStringLiteral("artist3"));  auto track = \
musicDb.trackFromDatabaseId(trackId);  
         musicDb.removeTracksList({track.resourceURI()});
@@ -2163,17 +2173,17 @@ private Q_SLOTS:
 
     void reloadDatabase()
     {
-        QTemporaryFile mDatabaseFile;
-        mDatabaseFile.open();
+        QTemporaryFile databaseFile;
+        databaseFile.open();
 
-        qDebug() << "reloadDatabase" << mDatabaseFile.fileName();
+        qDebug() << "reloadDatabase" << databaseFile.fileName();
 
         {
             DatabaseInterface musicDb;
 
             QSignalSpy musicDbTrackAddedSpy(&musicDb, \
&DatabaseInterface::trackAdded);  
-            musicDb.init(QStringLiteral("testDb"), mDatabaseFile.fileName());
+            musicDb.init(QStringLiteral("testDb"), databaseFile.fileName());
 
             musicDb.insertTracksList(mNewTracks, mNewCovers, \
QStringLiteral("autoTest"));  
@@ -2205,7 +2215,7 @@ private Q_SLOTS:
         QCOMPARE(musicDbAlbumModifiedSpy2.count(), 0);
         QCOMPARE(musicDbTrackModifiedSpy2.count(), 0);
 
-        musicDb2.init(QStringLiteral("testDb2"), mDatabaseFile.fileName());
+        musicDb2.init(QStringLiteral("testDb2"), databaseFile.fileName());
 
         musicDbTrackAddedSpy2.wait(300);
 
@@ -2250,7 +2260,7 @@ private Q_SLOTS:
 
         auto invalidTracks = \
musicDb2.allInvalidTracksFromSource(QStringLiteral("autoTest"));  
-        QCOMPARE(invalidTracks.size(), 13);
+        QCOMPARE(invalidTracks.size(), 14);
 
         auto tracksUrlsToRemove = QList<QUrl>();
 
@@ -2276,17 +2286,17 @@ private Q_SLOTS:
 
     void reloadDatabaseWithAllTracks()
     {
-        QTemporaryFile mDatabaseFile;
-        mDatabaseFile.open();
+        QTemporaryFile databaseFile;
+        databaseFile.open();
 
-        qDebug() << "reloadDatabase" << mDatabaseFile.fileName();
+        qDebug() << "reloadDatabaseWithAllTracks" << databaseFile.fileName();
 
         {
             DatabaseInterface musicDb;
 
             QSignalSpy musicDbTrackAddedSpy(&musicDb, \
&DatabaseInterface::trackAdded);  
-            musicDb.init(QStringLiteral("testDb"), mDatabaseFile.fileName());
+            musicDb.init(QStringLiteral("testDb"), databaseFile.fileName());
 
             musicDb.insertTracksList(mNewTracks, mNewCovers, \
QStringLiteral("autoTest"));  
@@ -2318,7 +2328,7 @@ private Q_SLOTS:
         QCOMPARE(musicDbAlbumModifiedSpy2.count(), 0);
         QCOMPARE(musicDbTrackModifiedSpy2.count(), 0);
 
-        musicDb2.init(QStringLiteral("testDb2"), mDatabaseFile.fileName());
+        musicDb2.init(QStringLiteral("testDb2"), databaseFile.fileName());
 
         musicDbTrackAddedSpy2.wait(300);
 
@@ -2375,6 +2385,280 @@ private Q_SLOTS:
         QCOMPARE(musicDbAlbumModifiedSpy2.count(), 1);
         QCOMPARE(musicDbTrackModifiedSpy2.count(), 1);
     }
+
+    void reloadDatabaseAndCleanInvalidTracks()
+    {
+        QTemporaryFile databaseFile;
+        databaseFile.open();
+
+        qDebug() << "reloadDatabaseAndCleanInvalidTracks" << \
databaseFile.fileName(); +
+        {
+            DatabaseInterface musicDb;
+
+            QSignalSpy musicDbTrackAddedSpy(&musicDb, \
&DatabaseInterface::trackAdded); +
+            musicDb.init(QStringLiteral("testDb"), databaseFile.fileName());
+
+            musicDb.insertTracksList(mNewTracks, mNewCovers, \
QStringLiteral("autoTest")); +
+            musicDbTrackAddedSpy.wait(300);
+        }
+
+        DatabaseInterface musicDb2;
+
+        QSignalSpy musicDbArtistAddedSpy2(&musicDb2, \
&DatabaseInterface::artistAdded); +        QSignalSpy \
musicDbAlbumAddedSpy2(&musicDb2, &DatabaseInterface::albumAdded); +        QSignalSpy \
musicDbTrackAddedSpy2(&musicDb2, &DatabaseInterface::trackAdded); +        QSignalSpy \
musicDbArtistRemovedSpy2(&musicDb2, &DatabaseInterface::artistRemoved); +        \
QSignalSpy musicDbAlbumRemovedSpy2(&musicDb2, &DatabaseInterface::albumRemoved); +    \
QSignalSpy musicDbTrackRemovedSpy2(&musicDb2, &DatabaseInterface::trackRemoved); +    \
QSignalSpy musicDbArtistModifiedSpy2(&musicDb2, &DatabaseInterface::artistModified); \
+        QSignalSpy musicDbAlbumModifiedSpy2(&musicDb2, \
&DatabaseInterface::albumModified); +        QSignalSpy \
musicDbTrackModifiedSpy2(&musicDb2, &DatabaseInterface::trackModified); +
+        QCOMPARE(musicDb2.allAlbums().count(), 0);
+        QCOMPARE(musicDb2.allArtists().count(), 0);
+        QCOMPARE(musicDb2.allTracks().count(), 0);
+        QCOMPARE(musicDbArtistAddedSpy2.count(), 0);
+        QCOMPARE(musicDbAlbumAddedSpy2.count(), 0);
+        QCOMPARE(musicDbTrackAddedSpy2.count(), 0);
+        QCOMPARE(musicDbArtistRemovedSpy2.count(), 0);
+        QCOMPARE(musicDbAlbumRemovedSpy2.count(), 0);
+        QCOMPARE(musicDbTrackRemovedSpy2.count(), 0);
+        QCOMPARE(musicDbArtistModifiedSpy2.count(), 0);
+        QCOMPARE(musicDbAlbumModifiedSpy2.count(), 0);
+        QCOMPARE(musicDbTrackModifiedSpy2.count(), 0);
+
+        musicDb2.init(QStringLiteral("testDb2"), databaseFile.fileName());
+
+        musicDbTrackAddedSpy2.wait(300);
+
+        QCOMPARE(musicDb2.allAlbums().count(), 3);
+        QCOMPARE(musicDb2.allArtists().count(), 6);
+        QCOMPARE(musicDb2.allTracks().count(), 13);
+        QCOMPARE(musicDbArtistAddedSpy2.count(), 6);
+        QCOMPARE(musicDbAlbumAddedSpy2.count(), 3);
+        QCOMPARE(musicDbTrackAddedSpy2.count(), 13);
+        QCOMPARE(musicDbArtistRemovedSpy2.count(), 0);
+        QCOMPARE(musicDbAlbumRemovedSpy2.count(), 0);
+        QCOMPARE(musicDbTrackRemovedSpy2.count(), 0);
+        QCOMPARE(musicDbArtistModifiedSpy2.count(), 0);
+        QCOMPARE(musicDbAlbumModifiedSpy2.count(), 0);
+        QCOMPARE(musicDbTrackModifiedSpy2.count(), 0);
+
+        musicDb2.insertTracksList(mNewTracks, mNewCovers, \
QStringLiteral("autoTest")); +
+        QCOMPARE(musicDb2.allAlbums().count(), 3);
+        QCOMPARE(musicDb2.allArtists().count(), 6);
+        QCOMPARE(musicDb2.allTracks().count(), 13);
+        QCOMPARE(musicDbArtistAddedSpy2.count(), 6);
+        QCOMPARE(musicDbAlbumAddedSpy2.count(), 3);
+        QCOMPARE(musicDbTrackAddedSpy2.count(), 13);
+        QCOMPARE(musicDbArtistRemovedSpy2.count(), 0);
+        QCOMPARE(musicDbAlbumRemovedSpy2.count(), 0);
+        QCOMPARE(musicDbTrackRemovedSpy2.count(), 0);
+        QCOMPARE(musicDbArtistModifiedSpy2.count(), 0);
+        QCOMPARE(musicDbAlbumModifiedSpy2.count(), 1);
+        QCOMPARE(musicDbTrackModifiedSpy2.count(), 1);
+
+        musicDb2.cleanInvalidTracks();
+
+        QCOMPARE(musicDb2.allAlbums().count(), 3);
+        QCOMPARE(musicDb2.allArtists().count(), 6);
+        QCOMPARE(musicDb2.allTracks().count(), 13);
+        QCOMPARE(musicDbArtistAddedSpy2.count(), 6);
+        QCOMPARE(musicDbAlbumAddedSpy2.count(), 3);
+        QCOMPARE(musicDbTrackAddedSpy2.count(), 13);
+        QCOMPARE(musicDbArtistRemovedSpy2.count(), 0);
+        QCOMPARE(musicDbAlbumRemovedSpy2.count(), 0);
+        QCOMPARE(musicDbTrackRemovedSpy2.count(), 0);
+        QCOMPARE(musicDbArtistModifiedSpy2.count(), 0);
+        QCOMPARE(musicDbAlbumModifiedSpy2.count(), 1);
+        QCOMPARE(musicDbTrackModifiedSpy2.count(), 1);
+    }
+
+    void testRemovalOfTracksFromInvalidSource()
+    {
+        DatabaseInterface musicDb;
+
+        musicDb.init(QStringLiteral("testDb"));
+
+        QSignalSpy musicDbArtistAddedSpy(&musicDb, &DatabaseInterface::artistAdded);
+        QSignalSpy musicDbAlbumAddedSpy(&musicDb, &DatabaseInterface::albumAdded);
+        QSignalSpy musicDbTrackAddedSpy(&musicDb, &DatabaseInterface::trackAdded);
+        QSignalSpy musicDbArtistRemovedSpy(&musicDb, \
&DatabaseInterface::artistRemoved); +        QSignalSpy \
musicDbAlbumRemovedSpy(&musicDb, &DatabaseInterface::albumRemoved); +        \
QSignalSpy musicDbTrackRemovedSpy(&musicDb, &DatabaseInterface::trackRemoved); +      \
QSignalSpy musicDbArtistModifiedSpy(&musicDb, &DatabaseInterface::artistModified); +  \
QSignalSpy musicDbAlbumModifiedSpy(&musicDb, &DatabaseInterface::albumModified); +    \
QSignalSpy musicDbTrackModifiedSpy(&musicDb, &DatabaseInterface::trackModified); +
+        QCOMPARE(musicDb.allAlbums().count(), 0);
+        QCOMPARE(musicDb.allArtists().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(musicDbArtistModifiedSpy.count(), 0);
+        QCOMPARE(musicDbAlbumModifiedSpy.count(), 0);
+        QCOMPARE(musicDbTrackModifiedSpy.count(), 0);
+
+        auto newFiles = QList<QUrl>();
+        const auto &constNewTracks = mNewTracks;
+        for (const auto &oneTrack : constNewTracks) {
+            newFiles.push_back(oneTrack.resourceURI());
+        }
+
+        musicDb.insertTracksList(mNewTracks, mNewCovers, \
QStringLiteral("autoTest")); +
+        musicDbTrackAddedSpy.wait(300);
+
+        QCOMPARE(musicDb.allAlbums().count(), 3);
+        QCOMPARE(musicDb.allArtists().count(), 6);
+        QCOMPARE(musicDbArtistAddedSpy.count(), 6);
+        QCOMPARE(musicDbAlbumAddedSpy.count(), 3);
+        QCOMPARE(musicDbTrackAddedSpy.count(), 13);
+        QCOMPARE(musicDbArtistRemovedSpy.count(), 0);
+        QCOMPARE(musicDbAlbumRemovedSpy.count(), 0);
+        QCOMPARE(musicDbTrackRemovedSpy.count(), 0);
+        QCOMPARE(musicDbArtistModifiedSpy.count(), 0);
+        QCOMPARE(musicDbAlbumModifiedSpy.count(), 3);
+        QCOMPARE(musicDbTrackModifiedSpy.count(), 1);
+
+        musicDb.removeAllTracksFromSource(QStringLiteral("autoTestNotValid"));
+
+        QCOMPARE(musicDb.allAlbums().count(), 3);
+        QCOMPARE(musicDb.allArtists().count(), 6);
+        QCOMPARE(musicDbArtistAddedSpy.count(), 6);
+        QCOMPARE(musicDbAlbumAddedSpy.count(), 3);
+        QCOMPARE(musicDbTrackAddedSpy.count(), 13);
+        QCOMPARE(musicDbArtistRemovedSpy.count(), 0);
+        QCOMPARE(musicDbAlbumRemovedSpy.count(), 0);
+        QCOMPARE(musicDbTrackRemovedSpy.count(), 0);
+        QCOMPARE(musicDbArtistModifiedSpy.count(), 0);
+        QCOMPARE(musicDbAlbumModifiedSpy.count(), 3);
+        QCOMPARE(musicDbTrackModifiedSpy.count(), 1);
+    }
+
+    void testRemovalOfTracksFromValidSource()
+    {
+        QTemporaryFile databaseFile;
+        databaseFile.open();
+
+        qDebug() << "testRemovalOfTracksFromValidSource" << databaseFile.fileName();
+
+        DatabaseInterface musicDb;
+
+        musicDb.init(QStringLiteral("testDb"), databaseFile.fileName());
+
+        QSignalSpy musicDbArtistAddedSpy(&musicDb, &DatabaseInterface::artistAdded);
+        QSignalSpy musicDbAlbumAddedSpy(&musicDb, &DatabaseInterface::albumAdded);
+        QSignalSpy musicDbTrackAddedSpy(&musicDb, &DatabaseInterface::trackAdded);
+        QSignalSpy musicDbArtistRemovedSpy(&musicDb, \
&DatabaseInterface::artistRemoved); +        QSignalSpy \
musicDbAlbumRemovedSpy(&musicDb, &DatabaseInterface::albumRemoved); +        \
QSignalSpy musicDbTrackRemovedSpy(&musicDb, &DatabaseInterface::trackRemoved); +      \
QSignalSpy musicDbArtistModifiedSpy(&musicDb, &DatabaseInterface::artistModified); +  \
QSignalSpy musicDbAlbumModifiedSpy(&musicDb, &DatabaseInterface::albumModified); +    \
QSignalSpy musicDbTrackModifiedSpy(&musicDb, &DatabaseInterface::trackModified); +
+        QCOMPARE(musicDb.allAlbums().count(), 0);
+        QCOMPARE(musicDb.allArtists().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(musicDbArtistModifiedSpy.count(), 0);
+        QCOMPARE(musicDbAlbumModifiedSpy.count(), 0);
+        QCOMPARE(musicDbTrackModifiedSpy.count(), 0);
+
+        auto newFiles = QList<QUrl>();
+        const auto &constNewTracks = mNewTracks;
+        for (const auto &oneTrack : constNewTracks) {
+            newFiles.push_back(oneTrack.resourceURI());
+        }
+
+        musicDb.insertTracksList(mNewTracks, mNewCovers, \
QStringLiteral("autoTest")); +
+        musicDbTrackAddedSpy.wait(300);
+
+        QCOMPARE(musicDb.allAlbums().count(), 3);
+        QCOMPARE(musicDb.allArtists().count(), 6);
+        QCOMPARE(musicDbArtistAddedSpy.count(), 6);
+        QCOMPARE(musicDbAlbumAddedSpy.count(), 3);
+        QCOMPARE(musicDbTrackAddedSpy.count(), 13);
+        QCOMPARE(musicDbArtistRemovedSpy.count(), 0);
+        QCOMPARE(musicDbAlbumRemovedSpy.count(), 0);
+        QCOMPARE(musicDbTrackRemovedSpy.count(), 0);
+        QCOMPARE(musicDbArtistModifiedSpy.count(), 0);
+        QCOMPARE(musicDbAlbumModifiedSpy.count(), 3);
+        QCOMPARE(musicDbTrackModifiedSpy.count(), 1);
+
+        QList<MusicAudioTrack> secondNewTracks = {
+            {true, QStringLiteral("$20"), QStringLiteral("0"), \
QStringLiteral("track1"), +             QStringLiteral("artist6"), \
QStringLiteral("album6"), QStringLiteral("artist6"), +             1, 1, \
QTime::fromMSecsSinceStartOfDay(1), {QUrl::fromLocalFile(QStringLiteral("/$20"))}, +  \
{QUrl::fromLocalFile(QStringLiteral("file://image$6"))}, 1, false}, +            \
{true, QStringLiteral("$21"), QStringLiteral("0"), QStringLiteral("track2"), +        \
QStringLiteral("artist6"), QStringLiteral("album6"), QStringLiteral("artist6"), +     \
2, 1, QTime::fromMSecsSinceStartOfDay(2), \
{QUrl::fromLocalFile(QStringLiteral("/$21"))}, +             \
{QUrl::fromLocalFile(QStringLiteral("file://image$6"))}, 2, false}, +            \
{true, QStringLiteral("$22"), QStringLiteral("0"), QStringLiteral("track3"), +        \
QStringLiteral("artist6"), QStringLiteral("album6"), QStringLiteral("artist6"), +     \
3, 1, QTime::fromMSecsSinceStartOfDay(3), \
{QUrl::fromLocalFile(QStringLiteral("/$22"))}, +             \
{QUrl::fromLocalFile(QStringLiteral("file://image$6"))}, 3, false}, +            \
{true, QStringLiteral("$23"), QStringLiteral("0"), QStringLiteral("track4"), +        \
QStringLiteral("artist6"), QStringLiteral("album6"), QStringLiteral("artist6"), +     \
4, 1, QTime::fromMSecsSinceStartOfDay(4), \
{QUrl::fromLocalFile(QStringLiteral("/$23"))}, +             \
{QUrl::fromLocalFile(QStringLiteral("file://image$6"))}, 4, false}, +            \
{true, QStringLiteral("$24"), QStringLiteral("0"), QStringLiteral("track5"), +        \
QStringLiteral("artist6"), QStringLiteral("album6"), QStringLiteral("artist6"), +     \
5, 1, QTime::fromMSecsSinceStartOfDay(4), \
{QUrl::fromLocalFile(QStringLiteral("/$24"))}, +             \
{QUrl::fromLocalFile(QStringLiteral("file://image$6"))}, 5, false}, +            \
{true, QStringLiteral("$25"), QStringLiteral("0"), QStringLiteral("track6"), +        \
QStringLiteral("artist6"), QStringLiteral("album6"), QStringLiteral("artist6"), +     \
6, 1, QTime::fromMSecsSinceStartOfDay(5), \
{QUrl::fromLocalFile(QStringLiteral("/$25"))}, +             \
{QUrl::fromLocalFile(QStringLiteral("file://image$6"))}, 6, true}, +            \
{true, QStringLiteral("$2"), QStringLiteral("0"), QStringLiteral("track2"), +         \
QStringLiteral("artist2"), QStringLiteral("album1"), QStringLiteral("Various \
Artists"), +             2, 2, QTime::fromMSecsSinceStartOfDay(2), \
{QUrl::fromLocalFile(QStringLiteral("/$26"))}, +             \
{QUrl::fromLocalFile(QStringLiteral("file://image$2"))}, 2, false}, +        };
+
+        musicDb.insertTracksList(secondNewTracks, mNewCovers, \
QStringLiteral("autoTestSource2")); +
+        musicDbTrackAddedSpy.wait(300);
+
+        QCOMPARE(musicDb.allAlbums().count(), 4);
+        QCOMPARE(musicDb.allArtists().count(), 7);
+        QCOMPARE(musicDbArtistAddedSpy.count(), 7);
+        QCOMPARE(musicDbAlbumAddedSpy.count(), 4);
+        QCOMPARE(musicDbTrackAddedSpy.count(), 19);
+        QCOMPARE(musicDbArtistRemovedSpy.count(), 0);
+        QCOMPARE(musicDbAlbumRemovedSpy.count(), 0);
+        QCOMPARE(musicDbTrackRemovedSpy.count(), 0);
+        QCOMPARE(musicDbArtistModifiedSpy.count(), 0);
+        QCOMPARE(musicDbAlbumModifiedSpy.count(), 5);
+        QCOMPARE(musicDbTrackModifiedSpy.count(), 2);
+
+        musicDb.removeAllTracksFromSource(QStringLiteral("autoTest"));
+
+        QCOMPARE(musicDb.allAlbums().count(), 2);
+        QCOMPARE(musicDb.allArtists().count(), 3);
+        QCOMPARE(musicDbArtistAddedSpy.count(), 7);
+        QCOMPARE(musicDbAlbumAddedSpy.count(), 4);
+        QCOMPARE(musicDbTrackAddedSpy.count(), 19);
+        QCOMPARE(musicDbArtistRemovedSpy.count(), 4);
+        QCOMPARE(musicDbAlbumRemovedSpy.count(), 2);
+        QCOMPARE(musicDbTrackRemovedSpy.count(), 12);
+        QCOMPARE(musicDbArtistModifiedSpy.count(), 0);
+        QCOMPARE(musicDbAlbumModifiedSpy.count(), 6);
+        QCOMPARE(musicDbTrackModifiedSpy.count(), 2);
+    }
 };
 
 QTEST_GUILESS_MAIN(DatabaseInterfaceTests)
diff --git a/src/databaseinterface.cpp b/src/databaseinterface.cpp
index 66ba9bd..a5857ee 100644
--- a/src/databaseinterface.cpp
+++ b/src/databaseinterface.cpp
@@ -59,7 +59,8 @@ public:
           mUpdateAlbumArtUriFromAlbumIdQuery(mTracksDatabase), \
                mUpdateAlbumArtistFromAlbumIdQuery(mTracksDatabase),
           mInsertAlbumWithoutArtistQuery(mTracksDatabase), \
                mSelectTracksMappingPriorityByTrackId(mTracksDatabase),
           mSelectAllTrackFilesFromSourceQuery(mTracksDatabase), \
                mFindInvalidTrackFilesQuery(mTracksDatabase),
-          mSelectAlbumIdsFromArtist(mTracksDatabase)
+          mSelectAlbumIdsFromArtist(mTracksDatabase), \
mRemoveTracksMappingFromSource(mTracksDatabase), +          \
mRemoveTracksMapping(mTracksDatabase), \
mSelectTracksWithoutMappingQuery(mTracksDatabase)  {
     }
 
@@ -145,6 +146,12 @@ public:
 
     QSqlQuery mSelectAlbumIdsFromArtist;
 
+    QSqlQuery mRemoveTracksMappingFromSource;
+
+    QSqlQuery mRemoveTracksMapping;
+
+    QSqlQuery mSelectTracksWithoutMappingQuery;
+
     qulonglong mAlbumId = 1;
 
     qulonglong mArtistId = 1;
@@ -661,12 +668,13 @@ void DatabaseInterface::removeAllTracksFromSource(const QString \
&sourceName)  
     while(d->mSelectAllTrackFilesFromSourceQuery.next()) {
         auto fileName = \
d->mSelectAllTrackFilesFromSourceQuery.record().value(0).toUrl(); +
         allFileNames.push_back(fileName);
     }
 
     d->mSelectAllTrackFilesFromSourceQuery.finish();
 
-    internalRemoveTracksList(allFileNames);
+    internalRemoveTracksList(allFileNames, sourceId);
 
     transactionResult = finishTransaction();
     if (!transactionResult) {
@@ -703,15 +711,17 @@ void DatabaseInterface::cleanInvalidTracks()
     }
 
     QList<QUrl> allFileNames;
+    auto sourceId = qulonglong();
 
     while(d->mFindInvalidTrackFilesQuery.next()) {
         auto fileName = d->mFindInvalidTrackFilesQuery.record().value(0).toUrl();
+        sourceId = d->mFindInvalidTrackFilesQuery.record().value(1).toULongLong();
         allFileNames.push_back(fileName);
     }
 
     d->mFindInvalidTrackFilesQuery.finish();
 
-    internalRemoveTracksList(allFileNames);
+    internalRemoveTracksList(allFileNames, sourceId);
 
     transactionResult = finishTransaction();
     if (!transactionResult) {
@@ -1034,7 +1044,7 @@ void DatabaseInterface::initDatabase() const
             QSqlQuery alterSchemaQuery(d->mTracksDatabase);
 
             const auto &result = alterSchemaQuery.exec(QStringLiteral("ALTER TABLE \
                `Tracks` "
-                                                                       "ADD COLUMN \
RATING INTEGER NOT NULL DEFAULT 0")); +                                               \
"ADD COLUMN RATING INTEGER NOT NULL DEFAULT 0"));  
             if (!result) {
                 qDebug() << "DatabaseInterface::initDatabase" << \
alterSchemaQuery.lastError(); @@ -1174,8 +1184,8 @@ void \
DatabaseInterface::initRequest()  
     {
         auto selectAllArtistsWithFilterText = QStringLiteral("SELECT `ID`, "
-                                                            "`Name` "
-                                                            "FROM `Artists`");
+                                                             "`Name` "
+                                                             "FROM `Artists`");
 
         auto result = \
d->mSelectAllArtistsQuery.prepare(selectAllArtistsWithFilterText);  
@@ -1206,7 +1216,7 @@ void DatabaseInterface::initRequest()
                                                   "artist.`ID` = tracks.`ArtistID` \
                AND "
                                                   "tracks.`AlbumID` = album.`ID` AND \
                "
                                                   "tracksMapping.`TrackID` = \
                tracks.`ID` AND "
-                                                  "tracksMapping.`Priority` = 1");
+                                                  "tracksMapping.`Priority` = \
(SELECT MIN(`Priority`) FROM `TracksMapping` WHERE `TrackID` = tracks.`ID`)");  
         auto result = d->mSelectAllTracksQuery.prepare(selectAllTracksText);
 
@@ -1240,8 +1250,7 @@ void DatabaseInterface::initRequest()
                                                                         \
                "source.`Name` = :source AND "
                                                                         "source.`ID` \
                = tracksMapping.`DiscoverID` AND "
                                                                         \
                "tracksMapping.`TrackValid` = 0 AND "
-                                                                        \
                "tracksMapping.`TrackID` = tracks.`ID` AND "
-                                                                        \
"tracksMapping.`Priority` = 1"); +                                                    \
"tracksMapping.`TrackID` = tracks.`ID`");  
         auto result = \
d->mSelectAllInvalidTracksFromSourceQuery.prepare(selectAllInvalidTracksFromSourceQueryText);
  
@@ -1275,7 +1284,7 @@ void DatabaseInterface::initRequest()
                                                                  "source.`Name` = \
                :source AND "
                                                                  "source.`ID` = \
                tracksMapping.`DiscoverID` AND "
                                                                  \
                "tracksMapping.`TrackID` = tracks.`ID` AND "
-                                                                 \
"tracksMapping.`Priority` = 1"); +                                                    \
"tracksMapping.`Priority` = (SELECT MIN(`Priority`) FROM `TracksMapping` WHERE \
`TrackID` = tracks.`ID`)");  
         auto result = \
d->mSelectAllTracksFromSourceQuery.prepare(selectAllTracksFromSourceQueryText);  
@@ -1302,7 +1311,7 @@ void DatabaseInterface::initRequest()
 
     {
         auto insertArtistsText = QStringLiteral("INSERT INTO `Artists` (`ID`, \
                `Name`) "
-                                                             "VALUES (:artistId, \
:name)"); +                                                "VALUES (:artistId, \
:name)");  
         auto result = d->mInsertArtistsQuery.prepare(insertArtistsText);
 
@@ -1334,7 +1343,7 @@ void DatabaseInterface::initRequest()
                                                    "tracks.`AlbumID` = :albumId AND \
                "
                                                    "artist.`ID` = tracks.`ArtistID` \
                AND "
                                                    "album.`ID` = :albumId AND "
-                                                   "tracksMapping.`Priority` = 1 "
+                                                   "tracksMapping.`Priority` = \
                (SELECT MIN(`Priority`) FROM `TracksMapping` WHERE `TrackID` = \
                tracks.`ID`) "
                                                    "ORDER BY tracks.`DiscNumber` \
                ASC, "
                                                    "tracks.`TrackNumber` ASC");
 
@@ -1367,7 +1376,7 @@ void DatabaseInterface::initRequest()
                                                          "artist.`ID` = \
                tracks.`ArtistID` AND "
                                                          "tracks.`AlbumID` = \
                album.`ID` AND "
                                                          "tracksMapping.`TrackID` = \
                tracks.`ID` AND "
-                                                         "tracksMapping.`Priority` = \
1"); +                                                         \
"tracksMapping.`Priority` = (SELECT MIN(`Priority`) FROM `TracksMapping` WHERE \
`TrackID` = tracks.`ID`)");  
         auto result = \
d->mSelectTrackFromIdQuery.prepare(selectTrackFromIdQueryText);  
@@ -1411,7 +1420,7 @@ void DatabaseInterface::initRequest()
 
     {
         auto insertAlbumWithoutArtistQueryText = QStringLiteral("INSERT INTO Albums \
                (`ID`, `Title`, `CoverFileName`, `TracksCount`, `IsSingleDiscAlbum`) \
                "
-                                                   "VALUES (:albumId, :title, \
:coverFileName, :tracksCount, :isSingleDiscAlbum)"); +                                \
"VALUES (:albumId, :title, :coverFileName, :tracksCount, :isSingleDiscAlbum)");  
         auto result = \
d->mInsertAlbumWithoutArtistQuery.prepare(insertAlbumWithoutArtistQueryText);  
@@ -1422,7 +1431,7 @@ void DatabaseInterface::initRequest()
 
     {
         auto insertTrackMappingQueryText = QStringLiteral("INSERT INTO \
                `TracksMapping` (`FileName`, `DiscoverID`, `Priority`, `TrackValid`) \
                "
-                                                   "VALUES (:fileName, :discoverId, \
:priority, 1)"); +                                                          "VALUES \
(:fileName, :discoverId, :priority, 1)");  
         auto result = d->mInsertTrackMapping.prepare(insertTrackMappingQueryText);
 
@@ -1452,6 +1461,57 @@ void DatabaseInterface::initRequest()
         }
     }
 
+    {
+        auto removeTracksMappingFromSourceQueryText = QStringLiteral("DELETE FROM \
`TracksMapping` " +                                                                   \
"WHERE `FileName` = :fileName AND `DiscoverID` = :sourceId"); +
+        auto result = \
d->mRemoveTracksMappingFromSource.prepare(removeTracksMappingFromSourceQueryText); +
+        if (!result) {
+            qDebug() << "DatabaseInterface::initRequest" << \
removeTracksMappingFromSourceQueryText << \
d->mRemoveTracksMappingFromSource.lastError(); +        }
+    }
+
+    {
+        auto removeTracksMappingQueryText = QStringLiteral("DELETE FROM \
`TracksMapping` " +                                                           "WHERE \
`FileName` = :fileName"); +
+        auto result = d->mRemoveTracksMapping.prepare(removeTracksMappingQueryText);
+
+        if (!result) {
+            qDebug() << "DatabaseInterface::initRequest" << \
removeTracksMappingQueryText << d->mRemoveTracksMapping.lastError(); +        }
+    }
+
+    {
+        auto selectTracksWithoutMappingQueryText = QStringLiteral("SELECT "
+                                                                  "tracks.`Id`, "
+                                                                  "tracks.`Title`, "
+                                                                  "tracks.`AlbumID`, \
" +                                                                  "artist.`Name`, \
" +                                                                  \
"artistAlbum.`Name`, " +                                                              \
"\"\" as FileName, " +                                                                \
"tracks.`TrackNumber`, " +                                                            \
"tracks.`DiscNumber`, " +                                                             \
"tracks.`Duration`, " +                                                               \
"album.`Title`, " +                                                                  \
"tracks.`Rating`, " +                                                                 \
"album.`CoverFileName`, " +                                                           \
"album.`IsSingleDiscAlbum` " +                                                        \
"FROM `Tracks` tracks, `Artists` artist, `Albums` album " +                           \
"LEFT JOIN `Artists` artistAlbum ON artistAlbum.`ID` = album.`ArtistID` " +           \
"WHERE " +                                                                  \
"artist.`ID` = tracks.`ArtistID` AND " +                                              \
"tracks.`AlbumID` = album.`ID` AND " +                                                \
"tracks.`ID` NOT IN (SELECT tracksMapping2.`TrackID` FROM `TracksMapping` \
tracksMapping2)"); +
+        auto result = \
d->mSelectTracksWithoutMappingQuery.prepare(selectTracksWithoutMappingQueryText); +
+        if (!result) {
+            qDebug() << "DatabaseInterface::initRequest" << \
d->mSelectTracksWithoutMappingQuery.lastError(); +        }
+    }
+
     {
         auto selectTracksMappingQueryText = QStringLiteral("SELECT `TrackID`, \
`FileName`, `DiscoverID`, `Priority` FROM `TracksMapping` WHERE `FileName` = \
:fileName");  
@@ -1499,7 +1559,8 @@ void DatabaseInterface::initRequest()
 
     {
         auto findInvalidTrackFilesText = QStringLiteral("SELECT "
-                                                        "tracksMapping.`FileName` "
+                                                        "tracksMapping.`FileName`, "
+                                                        "tracksMapping.`DiscoverID` \
"  "FROM "
                                                         "`TracksMapping` \
tracksMapping "  "WHERE "
@@ -1514,7 +1575,7 @@ void DatabaseInterface::initRequest()
 
     {
         auto insertMusicSourceQueryText = QStringLiteral("INSERT OR IGNORE INTO \
                `DiscoverSource` (`ID`, `Name`) "
-                                                   "VALUES (:discoverId, :name)");
+                                                         "VALUES (:discoverId, \
:name)");  
         auto result = d->mInsertMusicSource.prepare(insertMusicSourceQueryText);
 
@@ -1543,7 +1604,7 @@ void DatabaseInterface::initRequest()
                                                    "artist.`Name` = :artist AND "
                                                    "artist.`ID` = tracks.`ArtistID` \
                AND "
                                                    "tracksMapping.`TrackID` = \
                tracks.`ID` AND "
-                                                   "tracksMapping.`Priority` = 1");
+                                                   "tracksMapping.`Priority` = \
(SELECT MIN(`Priority`) FROM `TracksMapping` WHERE `TrackID` = tracks.`ID`)");  
         auto result = \
d->mSelectTrackIdFromTitleAlbumIdArtistQuery.prepare(selectTrackQueryText);  
@@ -1619,9 +1680,9 @@ void DatabaseInterface::initRequest()
 
     {
         auto updateAlbumArtUriFromAlbumIdQueryText = QStringLiteral("UPDATE `Albums` \
                "
-                                                                     "SET \
                `CoverFileName` = :coverFileName "
-                                                                     "WHERE "
-                                                                     "`ID` = \
:albumId"); +                                                                    "SET \
`CoverFileName` = :coverFileName " +                                                  \
"WHERE " +                                                                    "`ID` = \
:albumId");  
         auto result = \
d->mUpdateAlbumArtUriFromAlbumIdQuery.prepare(updateAlbumArtUriFromAlbumIdQueryText); \
 @@ -1633,9 +1694,9 @@ void DatabaseInterface::initRequest()
 
     {
         auto updateAlbumArtistFromAlbumIdQueryText = QStringLiteral("UPDATE `Albums` \
                "
-                                                                     "SET `ArtistID` \
                = :artistId "
-                                                                     "WHERE "
-                                                                     "`ID` = \
:albumId"); +                                                                    "SET \
`ArtistID` = :artistId " +                                                            \
"WHERE " +                                                                    "`ID` = \
:albumId");  
         auto result = \
d->mUpdateAlbumArtistFromAlbumIdQuery.prepare(updateAlbumArtistFromAlbumIdQueryText); \
 @@ -1667,7 +1728,7 @@ void DatabaseInterface::initRequest()
                                                               "tracks.`AlbumID` = \
                album.`ID` AND "
                                                               "artist.`ID` = \
                tracks.`ArtistID` AND "
                                                               \
                "tracksMapping.`TrackID` = tracks.`ID` AND "
-                                                              \
"tracksMapping.`Priority` = 1 " +                                                     \
"tracksMapping.`Priority` = (SELECT MIN(`Priority`) FROM `TracksMapping` WHERE \
                `TrackID` = tracks.`ID`) "
                                                               "ORDER BY \
                tracks.`Title` ASC, "
                                                               "album.`Title` ASC");
 
@@ -1697,10 +1758,10 @@ void DatabaseInterface::initRequest()
 
     {
         auto selectArtistQueryText = QStringLiteral("SELECT `ID`, "
-                                                     "`Name` "
-                                                     "FROM `Artists` "
-                                                     "WHERE "
-                                                     "`ID` = :artistId");
+                                                    "`Name` "
+                                                    "FROM `Artists` "
+                                                    "WHERE "
+                                                    "`ID` = :artistId");
 
         auto result = d->mSelectArtistQuery.prepare(selectArtistQueryText);
 
@@ -1732,7 +1793,7 @@ void DatabaseInterface::initRequest()
                                                                "artist.`ID` = \
                tracks.`ArtistID` AND "
                                                                \
                "tracksMapping.`TrackID` = tracks.`ID` AND "
                                                                \
                "tracksMapping.`FileName` = :filePath AND "
-                                                               \
"tracksMapping.`Priority` = 1"); +                                                    \
"tracksMapping.`Priority` = (SELECT MIN(`Priority`) FROM `TracksMapping` WHERE \
`TrackID` = tracks.`ID`)");  
         auto result = \
d->mSelectTrackFromFilePathQuery.prepare(selectTrackFromFilePathQueryText);  
@@ -2204,32 +2265,71 @@ MusicAudioTrack \
DatabaseInterface::buildTrackFromDatabaseRecord(const QSqlRecord  
 void DatabaseInterface::internalRemoveTracksList(const QList<QUrl> &removedTracks)
 {
-    QList<MusicAudioTrack> willRemoveTrack;
+    for (const auto &removedTrackFileName : removedTracks) {
+        d->mRemoveTracksMapping.bindValue(QStringLiteral(":fileName"), \
removedTrackFileName.toString()); +
+        auto result = d->mRemoveTracksMapping.exec();
+
+        if (!result || !d->mRemoveTracksMapping.isActive()) {
+            qDebug() << "DatabaseInterface::internalRemoveTracksList" << \
d->mRemoveTracksMapping.lastQuery(); +            qDebug() << \
"DatabaseInterface::internalRemoveTracksList" << \
d->mRemoveTracksMapping.boundValues(); +            qDebug() << \
"DatabaseInterface::internalRemoveTracksList" << d->mRemoveTracksMapping.lastError(); \
                
-    qDebug() << "DatabaseInterface::internalRemoveTracksList" << removedTracks;
+            continue;
+        }
+
+        d->mRemoveTracksMapping.finish();
+    }
 
+    internalRemoveTracksWithoutMapping();
+}
+
+void DatabaseInterface::internalRemoveTracksList(const QList<QUrl> &removedTracks, \
qulonglong sourceId) +{
     for (const auto &removedTrackFileName : removedTracks) {
-        d->mSelectTrackFromFilePathQuery.bindValue(QStringLiteral(":filePath"), \
removedTrackFileName.toString()); +        \
d->mRemoveTracksMappingFromSource.bindValue(QStringLiteral(":fileName"), \
removedTrackFileName.toString()); +        \
d->mRemoveTracksMappingFromSource.bindValue(QStringLiteral(":sourceId"), sourceId);  
-        auto result = d->mSelectTrackFromFilePathQuery.exec();
+        auto result = d->mRemoveTracksMappingFromSource.exec();
 
-        if (!result || !d->mSelectTrackFromFilePathQuery.isSelect() || \
                !d->mSelectTrackFromFilePathQuery.isActive()) {
-            qDebug() << "DatabaseInterface::removeTracksList" << \
                d->mSelectTrackFromFilePathQuery.lastQuery();
-            qDebug() << "DatabaseInterface::removeTracksList" << \
                d->mSelectTrackFromFilePathQuery.boundValues();
-            qDebug() << "DatabaseInterface::removeTracksList" << \
d->mSelectTrackFromFilePathQuery.lastError(); +        if (!result || \
!d->mRemoveTracksMappingFromSource.isActive()) { +            qDebug() << \
"DatabaseInterface::removeTracksList" << \
d->mRemoveTracksMappingFromSource.lastQuery(); +            qDebug() << \
"DatabaseInterface::removeTracksList" << \
d->mRemoveTracksMappingFromSource.boundValues(); +            qDebug() << \
"DatabaseInterface::removeTracksList" << \
d->mRemoveTracksMappingFromSource.lastError();  
             continue;
         }
 
-        while (d->mSelectTrackFromFilePathQuery.next()) {
-            const auto &currentRecord = d->mSelectTrackFromFilePathQuery.record();
+        d->mRemoveTracksMappingFromSource.finish();
+    }
 
-            willRemoveTrack.push_back(buildTrackFromDatabaseRecord(currentRecord));
-        }
+    internalRemoveTracksWithoutMapping();
+}
+
+void DatabaseInterface::internalRemoveTracksWithoutMapping()
+{
+    auto queryResult = d->mSelectTracksWithoutMappingQuery.exec();
+
+    if (!queryResult || !d->mSelectTracksWithoutMappingQuery.isSelect() || \
!d->mSelectTracksWithoutMappingQuery.isActive()) { +        qDebug() << \
"DatabaseInterface::insertArtist" << d->mSelectTracksWithoutMappingQuery.lastQuery(); \
+        qDebug() << "DatabaseInterface::insertArtist" << \
d->mSelectTracksWithoutMappingQuery.boundValues(); +        qDebug() << \
"DatabaseInterface::insertArtist" << d->mSelectTracksWithoutMappingQuery.lastError(); \
+ +        d->mSelectTracksWithoutMappingQuery.finish();
 
-        d->mSelectTrackFromFilePathQuery.finish();
+        return;
     }
 
+    QList<MusicAudioTrack> willRemoveTrack;
+
+    while (d->mSelectTracksWithoutMappingQuery.next()) {
+        const auto &currentRecord = d->mSelectTracksWithoutMappingQuery.record();
+
+        willRemoveTrack.push_back(buildTrackFromDatabaseRecord(currentRecord));
+    }
+
+    d->mSelectTracksWithoutMappingQuery.finish();
+
     QSet<qulonglong> modifiedAlbums;
 
     for (const auto &oneRemovedTrack : willRemoveTrack) {
diff --git a/src/databaseinterface.h b/src/databaseinterface.h
index 87719d1..6a4b8cd 100644
--- a/src/databaseinterface.h
+++ b/src/databaseinterface.h
@@ -177,6 +177,10 @@ private:
 
     void internalRemoveTracksList(const QList<QUrl> &removedTracks);
 
+    void internalRemoveTracksList(const QList<QUrl> &removedTracks, qulonglong \
sourceId); +
+    void internalRemoveTracksWithoutMapping();
+
     std::unique_ptr<DatabaseInterfacePrivate> d;
 
 };


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic