[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: [elisa] /: increase test coverage of DatabaseInterface and fix some bugs linked to removal
From: Matthieu Gallien <null () kde ! org>
Date: 2017-10-26 21:13:56
Message-ID: E1e7pTQ-0005Jy-RA () code ! kde ! org
[Download RAW message or body]
Git commit 1fa0b507319504a8cec50da06c2209ccc84ed5f9 by Matthieu Gallien.
Committed on 26/10/2017 at 21:12.
Pushed by mgallien into branch 'master'.
increase test coverage of DatabaseInterface and fix some bugs linked to removal
M +217 -2 autotests/databaseinterfacetest.cpp
M +111 -36 src/databaseinterface.cpp
M +2 -0 src/databaseinterface.h
https://commits.kde.org/elisa/1fa0b507319504a8cec50da06c2209ccc84ed5f9
diff --git a/autotests/databaseinterfacetest.cpp \
b/autotests/databaseinterfacetest.cpp index e276e88..870bee6 100644
--- a/autotests/databaseinterfacetest.cpp
+++ b/autotests/databaseinterfacetest.cpp
@@ -1648,11 +1648,11 @@ private Q_SLOTS:
musicDb.removeTracksList({firstTrack.resourceURI(), \
secondTrack.resourceURI(), thirdTrack.resourceURI(), fourthTrack.resourceURI()});
QCOMPARE(musicDb.allAlbums().count(), 2);
- QCOMPARE(musicDb.allArtists().count(), 4);
+ QCOMPARE(musicDb.allArtists().count(), 3);
QCOMPARE(musicDbArtistAddedSpy.count(), 6);
QCOMPARE(musicDbAlbumAddedSpy.count(), 3);
QCOMPARE(musicDbTrackAddedSpy.count(), 13);
- QCOMPARE(musicDbArtistRemovedSpy.count(), 2);
+ QCOMPARE(musicDbArtistRemovedSpy.count(), 3);
QCOMPARE(musicDbAlbumRemovedSpy.count(), 1);
QCOMPARE(musicDbTrackRemovedSpy.count(), 4);
QCOMPARE(musicDbArtistModifiedSpy.count(), 0);
@@ -2160,6 +2160,221 @@ private Q_SLOTS:
QCOMPARE(musicDbAlbumModifiedSpy.count(), 4);
QCOMPARE(musicDbTrackModifiedSpy.count(), 1);
}
+
+ void reloadDatabase()
+ {
+ QTemporaryFile mDatabaseFile;
+ mDatabaseFile.open();
+
+ qDebug() << "reloadDatabase" << mDatabaseFile.fileName();
+
+ {
+ DatabaseInterface musicDb;
+
+ QSignalSpy musicDbTrackAddedSpy(&musicDb, \
&DatabaseInterface::trackAdded); +
+ musicDb.init(QStringLiteral("testDb"), mDatabaseFile.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"), mDatabaseFile.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);
+
+ auto newTrack = MusicAudioTrack{true, QStringLiteral("$19"), \
QStringLiteral("0"), QStringLiteral("track6"), + \
QStringLiteral("artist6"), QStringLiteral("album1"), QStringLiteral("Various \
Artists"), 6, 1, QTime::fromMSecsSinceStartOfDay(19), \
{QUrl::fromLocalFile(QStringLiteral("/$19"))}, + \
{QUrl::fromLocalFile(QStringLiteral("file://image$19"))}, 5, true}; + auto \
newTracks = QList<MusicAudioTrack>(); + newTracks.push_back(newTrack);
+
+ auto newFiles2 = QList<QUrl>();
+ for (const auto &oneTrack : newTracks) {
+ newFiles2.push_back(oneTrack.resourceURI());
+ }
+
+ musicDb2.insertTracksList(newTracks, mNewCovers, \
QStringLiteral("autoTest")); +
+ QCOMPARE(musicDb2.allAlbums().count(), 3);
+ QCOMPARE(musicDb2.allArtists().count(), 7);
+ QCOMPARE(musicDb2.allTracks().count(), 14);
+ QCOMPARE(musicDbArtistAddedSpy2.count(), 7);
+ QCOMPARE(musicDbAlbumAddedSpy2.count(), 3);
+ QCOMPARE(musicDbTrackAddedSpy2.count(), 14);
+ QCOMPARE(musicDbArtistRemovedSpy2.count(), 0);
+ QCOMPARE(musicDbAlbumRemovedSpy2.count(), 0);
+ QCOMPARE(musicDbTrackRemovedSpy2.count(), 0);
+ QCOMPARE(musicDbArtistModifiedSpy2.count(), 0);
+ QCOMPARE(musicDbAlbumModifiedSpy2.count(), 1);
+ QCOMPARE(musicDbTrackModifiedSpy2.count(), 0);
+
+ auto invalidTracks = \
musicDb2.allInvalidTracksFromSource(QStringLiteral("autoTest")); +
+ QCOMPARE(invalidTracks.size(), 13);
+
+ auto tracksUrlsToRemove = QList<QUrl>();
+
+ for (const auto &oneTrack : invalidTracks) {
+ tracksUrlsToRemove.push_back(oneTrack.resourceURI());
+ }
+
+ musicDb2.removeTracksList(tracksUrlsToRemove);
+
+ QCOMPARE(musicDb2.allAlbums().count(), 1);
+ QCOMPARE(musicDb2.allArtists().count(), 2);
+ QCOMPARE(musicDb2.allTracks().count(), 1);
+ QCOMPARE(musicDbArtistAddedSpy2.count(), 7);
+ QCOMPARE(musicDbAlbumAddedSpy2.count(), 3);
+ QCOMPARE(musicDbTrackAddedSpy2.count(), 14);
+ QCOMPARE(musicDbArtistRemovedSpy2.count(), 5);
+ QCOMPARE(musicDbAlbumRemovedSpy2.count(), 2);
+ QCOMPARE(musicDbTrackRemovedSpy2.count(), 13);
+ QCOMPARE(musicDbArtistModifiedSpy2.count(), 0);
+ QCOMPARE(musicDbAlbumModifiedSpy2.count(), 2);
+ QCOMPARE(musicDbTrackModifiedSpy2.count(), 0);
+ }
+
+ void reloadDatabaseWithAllTracks()
+ {
+ QTemporaryFile mDatabaseFile;
+ mDatabaseFile.open();
+
+ qDebug() << "reloadDatabase" << mDatabaseFile.fileName();
+
+ {
+ DatabaseInterface musicDb;
+
+ QSignalSpy musicDbTrackAddedSpy(&musicDb, \
&DatabaseInterface::trackAdded); +
+ musicDb.init(QStringLiteral("testDb"), mDatabaseFile.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"), mDatabaseFile.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);
+
+ auto invalidTracks = \
musicDb2.allInvalidTracksFromSource(QStringLiteral("autoTest")); +
+ QCOMPARE(invalidTracks.size(), 0);
+
+ auto tracksUrlsToRemove = QList<QUrl>();
+
+ for (const auto &oneTrack : invalidTracks) {
+ tracksUrlsToRemove.push_back(oneTrack.resourceURI());
+ }
+
+ musicDb2.removeTracksList(tracksUrlsToRemove);
+
+ 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);
+ }
};
QTEST_GUILESS_MAIN(DatabaseInterfaceTests)
diff --git a/src/databaseinterface.cpp b/src/databaseinterface.cpp
index 0b70739..bb5c945 100644
--- a/src/databaseinterface.cpp
+++ b/src/databaseinterface.cpp
@@ -58,7 +58,8 @@ public:
mSelectTracksMapping(mTracksDatabase), \
mSelectTracksMappingPriority(mTracksDatabase),
mUpdateAlbumArtUriFromAlbumIdQuery(mTracksDatabase), \
mUpdateAlbumArtistFromAlbumIdQuery(mTracksDatabase),
mInsertAlbumWithoutArtistQuery(mTracksDatabase), \
mSelectTracksMappingPriorityByTrackId(mTracksDatabase),
- mSelectAllTrackFilesFromSourceQuery(mTracksDatabase), \
mFindInvalidTrackFilesQuery(mTracksDatabase) + \
mSelectAllTrackFilesFromSourceQuery(mTracksDatabase), \
mFindInvalidTrackFilesQuery(mTracksDatabase), + \
mSelectAlbumIdsFromArtist(mTracksDatabase) {
}
@@ -142,6 +143,8 @@ public:
QSqlQuery mFindInvalidTrackFilesQuery;
+ QSqlQuery mSelectAlbumIdsFromArtist;
+
qulonglong mAlbumId = 1;
qulonglong mArtistId = 1;
@@ -1675,6 +1678,23 @@ void DatabaseInterface::initRequest()
}
}
+ {
+ auto selectAlbumIdsFromArtistQueryText = QStringLiteral("SELECT "
+ "album.`ID` "
+ "FROM "
+ "`Albums` album, "
+ "`Artists` \
artistAlbum " + "WHERE \
" + "artistAlbum.`ID` \
= album.`ArtistID` AND " + \
"artistAlbum.`Name` = :artistName"); +
+ auto result = \
d->mSelectAlbumIdsFromArtist.prepare(selectAlbumIdsFromArtistQueryText); +
+ if (!result) {
+ qDebug() << "DatabaseInterface::initRequest" << \
d->mSelectAlbumIdsFromArtist.lastError(); + }
+ }
+
{
auto selectArtistQueryText = QStringLiteral("SELECT `ID`, "
"`Name` "
@@ -2084,56 +2104,73 @@ qulonglong DatabaseInterface::internalInsertTrack(const \
MusicAudioTrack &oneTrac
auto otherTrackId = internalTrackIdFromTitleAlbumArtist(oneTrack.title(), \
oneTrack.albumName(), oneTrack.artist()); bool isModifiedTrack = otherTrackId != 0;
+ bool isSameTrack = false;
if (isModifiedTrack) {
originTrackId = otherTrackId;
- removeTrackInDatabase(originTrackId);
+ const auto &oldTrack = internalTrackFromDatabaseId(originTrackId);
+
+ isSameTrack = (oldTrack.title() == oneTrack.title());
+ isSameTrack = isSameTrack && (oldTrack.albumName() == oneTrack.albumName());
+ isSameTrack = isSameTrack && (oldTrack.artist() == oneTrack.artist());
+ isSameTrack = isSameTrack && (oldTrack.trackNumber() == \
oneTrack.trackNumber()); + isSameTrack = isSameTrack && (oldTrack.discNumber() \
== oneTrack.discNumber()); + isSameTrack = isSameTrack && (oldTrack.duration() \
== oneTrack.duration()); + isSameTrack = isSameTrack && (oldTrack.rating() == \
oneTrack.rating()); + isSameTrack = isSameTrack && (oldTrack.resourceURI() == \
oneTrack.resourceURI()); +
+ if (!isSameTrack) {
+ removeTrackInDatabase(originTrackId);
+ }
} else {
originTrackId = d->mTrackId;
}
resultId = originTrackId;
- d->mInsertTrackQuery.bindValue(QStringLiteral(":trackId"), originTrackId);
- d->mInsertTrackQuery.bindValue(QStringLiteral(":title"), oneTrack.title());
- d->mInsertTrackQuery.bindValue(QStringLiteral(":album"), albumId);
- d->mInsertTrackQuery.bindValue(QStringLiteral(":artistId"), \
insertArtist(oneTrack.artist()));
- d->mInsertTrackQuery.bindValue(QStringLiteral(":trackNumber"), \
oneTrack.trackNumber());
- d->mInsertTrackQuery.bindValue(QStringLiteral(":discNumber"), \
oneTrack.discNumber());
- d->mInsertTrackQuery.bindValue(QStringLiteral(":trackDuration"), \
QVariant::fromValue<qlonglong>(oneTrack.duration().msecsSinceStartOfDay()));
- d->mInsertTrackQuery.bindValue(QStringLiteral(":trackRating"), \
oneTrack.rating());
- auto result = d->mInsertTrackQuery.exec();
+ if (!isSameTrack) {
+ d->mInsertTrackQuery.bindValue(QStringLiteral(":trackId"), originTrackId);
+ d->mInsertTrackQuery.bindValue(QStringLiteral(":title"), oneTrack.title());
+ d->mInsertTrackQuery.bindValue(QStringLiteral(":album"), albumId);
+ d->mInsertTrackQuery.bindValue(QStringLiteral(":artistId"), \
insertArtist(oneTrack.artist())); + \
d->mInsertTrackQuery.bindValue(QStringLiteral(":trackNumber"), \
oneTrack.trackNumber()); + \
d->mInsertTrackQuery.bindValue(QStringLiteral(":discNumber"), oneTrack.discNumber()); \
+ d->mInsertTrackQuery.bindValue(QStringLiteral(":trackDuration"), \
QVariant::fromValue<qlonglong>(oneTrack.duration().msecsSinceStartOfDay())); + \
d->mInsertTrackQuery.bindValue(QStringLiteral(":trackRating"), oneTrack.rating());
- if (result && d->mInsertTrackQuery.isActive()) {
- d->mInsertTrackQuery.finish();
+ auto result = d->mInsertTrackQuery.exec();
- if (!isModifiedTrack) {
- ++d->mTrackId;
- }
+ if (result && d->mInsertTrackQuery.isActive()) {
+ d->mInsertTrackQuery.finish();
- updateTrackOrigin(originTrackId, oneTrack.resourceURI());
+ if (!isModifiedTrack) {
+ ++d->mTrackId;
+ }
- if (isModifiedTrack) {
- Q_EMIT trackModified(internalTrackFromDatabaseId(originTrackId));
- modifiedAlbumIds.insert(albumId);
- } else {
- Q_EMIT trackAdded(originTrackId);
- }
+ updateTrackOrigin(originTrackId, oneTrack.resourceURI());
- if (updateAlbumFromId(albumId, covers[oneTrack.albumName()], oneTrack)) {
- modifiedAlbumIds.insert(albumId);
- }
+ if (isModifiedTrack) {
+ Q_EMIT trackModified(internalTrackFromDatabaseId(originTrackId));
+ modifiedAlbumIds.insert(albumId);
+ } else {
+ Q_EMIT trackAdded(originTrackId);
+ }
- if (updateTracksCount(albumId)) {
- modifiedAlbumIds.insert(albumId);
- }
- } else {
- d->mInsertTrackQuery.finish();
+ if (updateAlbumFromId(albumId, covers[oneTrack.albumName()], oneTrack)) \
{ + modifiedAlbumIds.insert(albumId);
+ }
+
+ if (updateTracksCount(albumId)) {
+ modifiedAlbumIds.insert(albumId);
+ }
+ } else {
+ d->mInsertTrackQuery.finish();
- qDebug() << "DatabaseInterface::modifyTracksList" << \
d->mInsertTrackQuery.lastQuery();
- qDebug() << "DatabaseInterface::modifyTracksList" << \
d->mInsertTrackQuery.boundValues();
- qDebug() << "DatabaseInterface::modifyTracksList" << \
d->mInsertTrackQuery.lastError(); + qDebug() << \
"DatabaseInterface::modifyTracksList" << d->mInsertTrackQuery.lastQuery(); + \
qDebug() << "DatabaseInterface::modifyTracksList" << \
d->mInsertTrackQuery.boundValues(); + qDebug() << \
"DatabaseInterface::modifyTracksList" << d->mInsertTrackQuery.lastError(); + }
}
return resultId;
@@ -2200,7 +2237,8 @@ void DatabaseInterface::internalRemoveTracksList(const \
QList<QUrl> &removedTrack Q_EMIT trackRemoved(oneRemovedTrack.databaseId());
const auto &modifiedAlbumId = \
internalAlbumIdFromTitle(oneRemovedTrack.albumName());
- const auto &allArtistTracks = \
internalTracksFromAuthor(oneRemovedTrack.artist()); + const auto \
&allTracksFromArtist = internalTracksFromAuthor(oneRemovedTrack.artist()); + \
const auto &allAlbumsFromArtist = \
internalAlbumIdsFromAuthor(oneRemovedTrack.artist());
const auto &removedArtistId = \
internalArtistIdFromName(oneRemovedTrack.artist());
const auto &removedArtist = internalArtistFromId(removedArtistId);
@@ -2209,7 +2247,7 @@ void DatabaseInterface::internalRemoveTracksList(const \
QList<QUrl> &removedTrack }
updateAlbumFromId(modifiedAlbumId, oneRemovedTrack.albumCover(), \
oneRemovedTrack);
- if (allArtistTracks.isEmpty()) {
+ if (allTracksFromArtist.isEmpty() && allAlbumsFromArtist.isEmpty()) {
removeArtistInDatabase(removedArtistId);
Q_EMIT artistRemoved(removedArtist);
}
@@ -2223,6 +2261,16 @@ void DatabaseInterface::internalRemoveTracksList(const \
QList<QUrl> &removedTrack } else {
removeAlbumInDatabase(modifiedAlbum.databaseId());
Q_EMIT albumRemoved(modifiedAlbum, modifiedAlbumId);
+
+ const auto &allTracksFromArtist = \
internalTracksFromAuthor(modifiedAlbum.artist()); + const auto \
&allAlbumsFromArtist = internalAlbumIdsFromAuthor(modifiedAlbum.artist()); + \
const auto &removedArtistId = internalArtistIdFromName(modifiedAlbum.artist()); + \
const auto &removedArtist = internalArtistFromId(removedArtistId); +
+ if (allTracksFromArtist.isEmpty() && allAlbumsFromArtist.isEmpty()) {
+ removeArtistInDatabase(removedArtistId);
+ Q_EMIT artistRemoved(removedArtist);
+ }
}
}
}
@@ -2757,5 +2805,32 @@ QList<MusicAudioTrack> \
DatabaseInterface::internalTracksFromAuthor(const QString return allTracks;
}
+QList<qulonglong> DatabaseInterface::internalAlbumIdsFromAuthor(const QString \
&artistName) const +{
+ auto allAlbumIds = QList<qulonglong>();
+
+ d->mSelectAlbumIdsFromArtist.bindValue(QStringLiteral(":artistName"), \
artistName); +
+ auto result = d->mSelectAlbumIdsFromArtist.exec();
+
+ if (!result || !d->mSelectAlbumIdsFromArtist.isSelect() || \
!d->mSelectAlbumIdsFromArtist.isActive()) { + qDebug() << \
"DatabaseInterface::tracksFromAuthor" << d->mSelectAlbumIdsFromArtist.lastQuery(); + \
qDebug() << "DatabaseInterface::tracksFromAuthor" << \
d->mSelectAlbumIdsFromArtist.boundValues(); + qDebug() << \
"DatabaseInterface::tracksFromAuthor" << d->mSelectAlbumIdsFromArtist.lastError(); +
+ return allAlbumIds;
+ }
+
+ while (d->mSelectAlbumIdsFromArtist.next()) {
+ const auto ¤tRecord = d->mSelectAlbumIdsFromArtist.record();
+
+ allAlbumIds.push_back(currentRecord.value(0).toULongLong());
+ }
+
+ d->mSelectAlbumIdsFromArtist.finish();
+
+ return allAlbumIds;
+}
+
#include "moc_databaseinterface.cpp"
diff --git a/src/databaseinterface.h b/src/databaseinterface.h
index a9b2a25..7ec7dd2 100644
--- a/src/databaseinterface.h
+++ b/src/databaseinterface.h
@@ -143,6 +143,8 @@ private:
QList<MusicAudioTrack> internalTracksFromAuthor(const QString &artistName) \
const;
+ QList<qulonglong> internalAlbumIdsFromAuthor(const QString &artistName) const;
+
void initDatabase() const;
void initRequest();
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic