[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: [elisa] /: fix management of header when removing a track between two from the same album
From: Matthieu Gallien <matthieu_gallien () yahoo ! fr>
Date: 2016-10-31 21:56:27
Message-ID: E1c1KZ9-0007QZ-9C () code ! kde ! org
[Download RAW message or body]
Git commit e2e9f6116be0da007410b0241ac21a47e3f456f6 by Matthieu Gallien.
Committed on 31/10/2016 at 21:55.
Pushed by mgallien into branch 'master'.
fix management of header when removing a track between two from the same album
M +202 -15 autotests/mediaplaylisttest.cpp
M +2 -0 autotests/mediaplaylisttest.h
M +2 -2 src/mediaplaylist.cpp
http://commits.kde.org/elisa/e2e9f6116be0da007410b0241ac21a47e3f456f6
diff --git a/autotests/mediaplaylisttest.cpp b/autotests/mediaplaylisttest.cpp
index 6e6be5d..7827d02 100644
--- a/autotests/mediaplaylisttest.cpp
+++ b/autotests/mediaplaylisttest.cpp
@@ -398,7 +398,7 @@ void MediaPlayListTest::removeFirstTrackOfAlbum()
QCOMPARE(trackHasBeenAddedSpy.count(), 6);
QCOMPARE(databaseInterfaceChangedSpy.count(), 1);
QCOMPARE(persistentStateChangedSpy.count(), 7);
- QCOMPARE(dataChangedSpy.count(), 1);
+ QCOMPARE(dataChangedSpy.count(), 0);
QCOMPARE(myPlayList.data(myPlayList.index(0, 0), \
MediaPlayList::ColumnsRoles::HasAlbumHeader).toBool(), true);
QCOMPARE(myPlayList.data(myPlayList.index(1, 0), \
MediaPlayList::ColumnsRoles::HasAlbumHeader).toBool(), false); @@ -587,7 +587,7 @@ void \
MediaPlayListTest::testHasHeader() QCOMPARE(trackHasBeenAddedSpy.count(), 4);
QCOMPARE(databaseInterfaceChangedSpy.count(), 1);
QCOMPARE(persistentStateChangedSpy.count(), 5);
- QCOMPARE(dataChangedSpy.count(), 1);
+ QCOMPARE(dataChangedSpy.count(), 0);
QCOMPARE(myPlayList.data(myPlayList.index(0, 0), \
MediaPlayList::ColumnsRoles::HasAlbumHeader).toBool(), true);
QCOMPARE(myPlayList.data(myPlayList.index(1, 0), \
MediaPlayList::ColumnsRoles::HasAlbumHeader).toBool(), true); @@ -702,9 +702,9 @@ void \
MediaPlayListTest::testHasHeaderWithRestore() QCOMPARE(trackHasBeenAddedSpy.count(), 1);
QCOMPARE(databaseInterfaceChangedSpy.count(), 1);
QCOMPARE(persistentStateChangedSpy.count(), 1);
- QCOMPARE(dataChangedSpy.count(), 0);
+ QCOMPARE(dataChangedSpy.count(), 1);
- QCOMPARE(myPlayList.data(myPlayList.index(0, 0), \
MediaPlayList::ColumnsRoles::HasAlbumHeader).toBool(), false); + \
QCOMPARE(myPlayList.data(myPlayList.index(0, 0), \
MediaPlayList::ColumnsRoles::HasAlbumHeader).toBool(), true);
myPlayList.enqueue({QStringLiteral("track1"), QStringLiteral("album1"), \
QStringLiteral("artist1")});
@@ -717,10 +717,10 @@ void MediaPlayListTest::testHasHeaderWithRestore()
QCOMPARE(trackHasBeenAddedSpy.count(), 2);
QCOMPARE(databaseInterfaceChangedSpy.count(), 1);
QCOMPARE(persistentStateChangedSpy.count(), 2);
- QCOMPARE(dataChangedSpy.count(), 0);
+ QCOMPARE(dataChangedSpy.count(), 2);
- QCOMPARE(myPlayList.data(myPlayList.index(0, 0), \
MediaPlayList::ColumnsRoles::HasAlbumHeader).toBool(), false);
- QCOMPARE(myPlayList.data(myPlayList.index(1, 0), \
MediaPlayList::ColumnsRoles::HasAlbumHeader).toBool(), false); + \
QCOMPARE(myPlayList.data(myPlayList.index(0, 0), \
MediaPlayList::ColumnsRoles::HasAlbumHeader).toBool(), true); + \
QCOMPARE(myPlayList.data(myPlayList.index(1, 0), \
MediaPlayList::ColumnsRoles::HasAlbumHeader).toBool(), true);
myPlayList.enqueue({QStringLiteral("track2"), QStringLiteral("album2"), \
QStringLiteral("artist1")});
@@ -733,11 +733,11 @@ void MediaPlayListTest::testHasHeaderWithRestore()
QCOMPARE(trackHasBeenAddedSpy.count(), 3);
QCOMPARE(databaseInterfaceChangedSpy.count(), 1);
QCOMPARE(persistentStateChangedSpy.count(), 3);
- QCOMPARE(dataChangedSpy.count(), 0);
+ QCOMPARE(dataChangedSpy.count(), 3);
- QCOMPARE(myPlayList.data(myPlayList.index(0, 0), \
MediaPlayList::ColumnsRoles::HasAlbumHeader).toBool(), false);
- QCOMPARE(myPlayList.data(myPlayList.index(1, 0), \
MediaPlayList::ColumnsRoles::HasAlbumHeader).toBool(), false);
- QCOMPARE(myPlayList.data(myPlayList.index(2, 0), \
MediaPlayList::ColumnsRoles::HasAlbumHeader).toBool(), false); + \
QCOMPARE(myPlayList.data(myPlayList.index(0, 0), \
MediaPlayList::ColumnsRoles::HasAlbumHeader).toBool(), true); + \
QCOMPARE(myPlayList.data(myPlayList.index(1, 0), \
MediaPlayList::ColumnsRoles::HasAlbumHeader).toBool(), true); + \
QCOMPARE(myPlayList.data(myPlayList.index(2, 0), \
MediaPlayList::ColumnsRoles::HasAlbumHeader).toBool(), true);
myPlayList.enqueue({QStringLiteral("track3"), QStringLiteral("album2"), \
QStringLiteral("artist1")});
@@ -750,11 +750,11 @@ void MediaPlayListTest::testHasHeaderWithRestore()
QCOMPARE(trackHasBeenAddedSpy.count(), 4);
QCOMPARE(databaseInterfaceChangedSpy.count(), 1);
QCOMPARE(persistentStateChangedSpy.count(), 4);
- QCOMPARE(dataChangedSpy.count(), 0);
+ QCOMPARE(dataChangedSpy.count(), 4);
- QCOMPARE(myPlayList.data(myPlayList.index(0, 0), \
MediaPlayList::ColumnsRoles::HasAlbumHeader).toBool(), false);
- QCOMPARE(myPlayList.data(myPlayList.index(1, 0), \
MediaPlayList::ColumnsRoles::HasAlbumHeader).toBool(), false);
- QCOMPARE(myPlayList.data(myPlayList.index(2, 0), \
MediaPlayList::ColumnsRoles::HasAlbumHeader).toBool(), false); + \
QCOMPARE(myPlayList.data(myPlayList.index(0, 0), \
MediaPlayList::ColumnsRoles::HasAlbumHeader).toBool(), true); + \
QCOMPARE(myPlayList.data(myPlayList.index(1, 0), \
MediaPlayList::ColumnsRoles::HasAlbumHeader).toBool(), true); + \
QCOMPARE(myPlayList.data(myPlayList.index(2, 0), \
MediaPlayList::ColumnsRoles::HasAlbumHeader).toBool(), true);
QCOMPARE(myPlayList.data(myPlayList.index(3, 0), \
MediaPlayList::ColumnsRoles::HasAlbumHeader).toBool(), false);
myDatabaseContent.insertTracksList(newTracks, newCovers);
@@ -776,6 +776,193 @@ void MediaPlayListTest::testHasHeaderWithRestore()
QCOMPARE(myPlayList.data(myPlayList.index(3, 0), \
MediaPlayList::ColumnsRoles::HasAlbumHeader).toBool(), false); }
+void MediaPlayListTest::testHasHeaderWithRemove()
+{
+ MediaPlayList myPlayList;
+ DatabaseInterface myDatabaseContent;
+ DatabaseInterface myDatabaseView;
+
+ QSignalSpy rowsAboutToBeMovedSpy(&myPlayList, &MediaPlayList::rowsAboutToBeMoved);
+ QSignalSpy rowsAboutToBeRemovedSpy(&myPlayList, &MediaPlayList::rowsAboutToBeRemoved);
+ QSignalSpy rowsAboutToBeInsertedSpy(&myPlayList, &MediaPlayList::rowsAboutToBeInserted);
+ QSignalSpy rowsMovedSpy(&myPlayList, &MediaPlayList::rowsMoved);
+ QSignalSpy rowsRemovedSpy(&myPlayList, &MediaPlayList::rowsRemoved);
+ QSignalSpy rowsInsertedSpy(&myPlayList, &MediaPlayList::rowsInserted);
+ QSignalSpy trackHasBeenAddedSpy(&myPlayList, &MediaPlayList::trackHasBeenAdded);
+ QSignalSpy databaseInterfaceChangedSpy(&myPlayList, \
&MediaPlayList::databaseInterfaceChanged); + QSignalSpy \
persistentStateChangedSpy(&myPlayList, &MediaPlayList::persistentStateChanged); + QSignalSpy \
dataChangedSpy(&myPlayList, &MediaPlayList::dataChanged); +
+ QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
+ QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
+ QCOMPARE(rowsAboutToBeInsertedSpy.count(), 0);
+ QCOMPARE(rowsRemovedSpy.count(), 0);
+ QCOMPARE(rowsMovedSpy.count(), 0);
+ QCOMPARE(rowsInsertedSpy.count(), 0);
+ QCOMPARE(trackHasBeenAddedSpy.count(), 0);
+ QCOMPARE(databaseInterfaceChangedSpy.count(), 0);
+ QCOMPARE(persistentStateChangedSpy.count(), 0);
+ QCOMPARE(dataChangedSpy.count(), 0);
+
+ myDatabaseContent.init(QStringLiteral("testDbDirectContent"));
+ myDatabaseContent.initDatabase();
+ myDatabaseContent.initRequest();
+
+ myDatabaseView.init(QStringLiteral("testDbDirectView"));
+ myDatabaseView.initDatabase();
+ myDatabaseView.initRequest();
+
+ connect(&myDatabaseContent, &DatabaseInterface::databaseChanged,
+ &myDatabaseView, &DatabaseInterface::databaseHasChanged);
+
+ myPlayList.setDatabaseInterface(&myDatabaseView);
+
+ QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
+ QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
+ QCOMPARE(rowsAboutToBeInsertedSpy.count(), 0);
+ QCOMPARE(rowsRemovedSpy.count(), 0);
+ QCOMPARE(rowsMovedSpy.count(), 0);
+ QCOMPARE(rowsInsertedSpy.count(), 0);
+ QCOMPARE(trackHasBeenAddedSpy.count(), 0);
+ QCOMPARE(databaseInterfaceChangedSpy.count(), 1);
+ QCOMPARE(persistentStateChangedSpy.count(), 0);
+ QCOMPARE(dataChangedSpy.count(), 0);
+
+ QCOMPARE(myPlayList.databaseInterface(), &myDatabaseView);
+
+ auto newTracks = QHash<QString, QVector<MusicAudioTrack>>();
+ auto newCovers = QHash<QString, QUrl>();
+
+ newTracks[QStringLiteral("album1")] = {
+ {true, QStringLiteral("$1"), QStringLiteral("0"), QStringLiteral("track1"),
+ QStringLiteral("artist1"), QStringLiteral("album1"), 1, {}, \
{QUrl::fromLocalFile(QStringLiteral("$1"))}}, + {true, QStringLiteral("$2"), \
QStringLiteral("0"), QStringLiteral("track2"), + QStringLiteral("artist1"), \
QStringLiteral("album1"), 1, {}, {QUrl::fromLocalFile(QStringLiteral("$2"))}}, + {true, \
QStringLiteral("$3"), QStringLiteral("0"), QStringLiteral("track3"), + \
QStringLiteral("artist1"), QStringLiteral("album1"), 1, {}, \
{QUrl::fromLocalFile(QStringLiteral("$3"))}}, + {true, QStringLiteral("$4"), \
QStringLiteral("0"), QStringLiteral("track4"), + QStringLiteral("artist1"), \
QStringLiteral("album1"), 1, {}, {QUrl::fromLocalFile(QStringLiteral("$4"))}}, + };
+
+ newTracks[QStringLiteral("album2")] = {
+ {true, QStringLiteral("$5"), QStringLiteral("0"), QStringLiteral("track1"),
+ QStringLiteral("artist1"), QStringLiteral("album2"), 1, {}, \
{QUrl::fromLocalFile(QStringLiteral("$5"))}}, + {true, QStringLiteral("$6"), \
QStringLiteral("0"), QStringLiteral("track2"), + QStringLiteral("artist1"), \
QStringLiteral("album2"), 1, {}, {QUrl::fromLocalFile(QStringLiteral("$6"))}}, + {true, \
QStringLiteral("$7"), QStringLiteral("0"), QStringLiteral("track3"), + \
QStringLiteral("artist1"), QStringLiteral("album2"), 1, {}, \
{QUrl::fromLocalFile(QStringLiteral("$7"))}}, + {true, QStringLiteral("$8"), \
QStringLiteral("0"), QStringLiteral("track4"), + QStringLiteral("artist1"), \
QStringLiteral("album2"), 1, {}, {QUrl::fromLocalFile(QStringLiteral("$8"))}}, + {true, \
QStringLiteral("$9"), QStringLiteral("0"), QStringLiteral("track5"), + \
QStringLiteral("artist1"), QStringLiteral("album2"), 1, {}, \
{QUrl::fromLocalFile(QStringLiteral("$9"))}}, + {true, QStringLiteral("$10"), \
QStringLiteral("0"), QStringLiteral("track6"), + QStringLiteral("artist1"), \
QStringLiteral("album2"), 1, {}, {QUrl::fromLocalFile(QStringLiteral("$10"))}} + };
+
+ newCovers[QStringLiteral("album1")] = QUrl::fromLocalFile(QStringLiteral("album1"));
+ newCovers[QStringLiteral("album2")] = QUrl::fromLocalFile(QStringLiteral("album2"));
+
+ myDatabaseContent.insertTracksList(newTracks, newCovers);
+
+ QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
+ QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
+ QCOMPARE(rowsAboutToBeInsertedSpy.count(), 0);
+ QCOMPARE(rowsRemovedSpy.count(), 0);
+ QCOMPARE(rowsMovedSpy.count(), 0);
+ QCOMPARE(rowsInsertedSpy.count(), 0);
+ QCOMPARE(trackHasBeenAddedSpy.count(), 0);
+ QCOMPARE(databaseInterfaceChangedSpy.count(), 1);
+ QCOMPARE(persistentStateChangedSpy.count(), 0);
+ QCOMPARE(dataChangedSpy.count(), 0);
+
+ auto firstTrackId = myDatabaseView.trackIdFromTitleAlbumArtist(QStringLiteral("track1"), \
QStringLiteral("album2"), QStringLiteral("artist1")); + myPlayList.enqueue(firstTrackId);
+
+ QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
+ QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
+ QCOMPARE(rowsAboutToBeInsertedSpy.count(), 1);
+ QCOMPARE(rowsRemovedSpy.count(), 0);
+ QCOMPARE(rowsMovedSpy.count(), 0);
+ QCOMPARE(rowsInsertedSpy.count(), 1);
+ QCOMPARE(trackHasBeenAddedSpy.count(), 1);
+ QCOMPARE(databaseInterfaceChangedSpy.count(), 1);
+ QCOMPARE(persistentStateChangedSpy.count(), 1);
+ QCOMPARE(dataChangedSpy.count(), 0);
+
+ QCOMPARE(myPlayList.data(myPlayList.index(0, 0), \
MediaPlayList::ColumnsRoles::HasAlbumHeader).toBool(), true); +
+ auto secondTrackId = myDatabaseView.trackIdFromTitleAlbumArtist(QStringLiteral("track2"), \
QStringLiteral("album2"), QStringLiteral("artist1")); + myPlayList.enqueue(secondTrackId);
+
+ QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
+ QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
+ QCOMPARE(rowsAboutToBeInsertedSpy.count(), 2);
+ QCOMPARE(rowsRemovedSpy.count(), 0);
+ QCOMPARE(rowsMovedSpy.count(), 0);
+ QCOMPARE(rowsInsertedSpy.count(), 2);
+ QCOMPARE(trackHasBeenAddedSpy.count(), 2);
+ QCOMPARE(databaseInterfaceChangedSpy.count(), 1);
+ QCOMPARE(persistentStateChangedSpy.count(), 2);
+ QCOMPARE(dataChangedSpy.count(), 0);
+
+ QCOMPARE(myPlayList.data(myPlayList.index(0, 0), \
MediaPlayList::ColumnsRoles::HasAlbumHeader).toBool(), true); + \
QCOMPARE(myPlayList.data(myPlayList.index(1, 0), \
MediaPlayList::ColumnsRoles::HasAlbumHeader).toBool(), false); +
+ auto thirdTrackId = myDatabaseView.trackIdFromTitleAlbumArtist(QStringLiteral("track1"), \
QStringLiteral("album1"), QStringLiteral("artist1")); + myPlayList.enqueue(thirdTrackId);
+
+ QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
+ QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
+ QCOMPARE(rowsAboutToBeInsertedSpy.count(), 3);
+ QCOMPARE(rowsRemovedSpy.count(), 0);
+ QCOMPARE(rowsMovedSpy.count(), 0);
+ QCOMPARE(rowsInsertedSpy.count(), 3);
+ QCOMPARE(trackHasBeenAddedSpy.count(), 3);
+ QCOMPARE(databaseInterfaceChangedSpy.count(), 1);
+ QCOMPARE(persistentStateChangedSpy.count(), 3);
+ QCOMPARE(dataChangedSpy.count(), 0);
+
+ QCOMPARE(myPlayList.data(myPlayList.index(0, 0), \
MediaPlayList::ColumnsRoles::HasAlbumHeader).toBool(), true); + \
QCOMPARE(myPlayList.data(myPlayList.index(1, 0), \
MediaPlayList::ColumnsRoles::HasAlbumHeader).toBool(), false); + \
QCOMPARE(myPlayList.data(myPlayList.index(2, 0), \
MediaPlayList::ColumnsRoles::HasAlbumHeader).toBool(), true); +
+ auto fourthTrackId = myDatabaseView.trackIdFromTitleAlbumArtist(QStringLiteral("track3"), \
QStringLiteral("album2"), QStringLiteral("artist1")); + myPlayList.enqueue(fourthTrackId);
+
+ QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
+ QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
+ QCOMPARE(rowsAboutToBeInsertedSpy.count(), 4);
+ QCOMPARE(rowsRemovedSpy.count(), 0);
+ QCOMPARE(rowsMovedSpy.count(), 0);
+ QCOMPARE(rowsInsertedSpy.count(), 4);
+ QCOMPARE(trackHasBeenAddedSpy.count(), 4);
+ QCOMPARE(databaseInterfaceChangedSpy.count(), 1);
+ QCOMPARE(persistentStateChangedSpy.count(), 4);
+ QCOMPARE(dataChangedSpy.count(), 0);
+
+ QCOMPARE(myPlayList.data(myPlayList.index(0, 0), \
MediaPlayList::ColumnsRoles::HasAlbumHeader).toBool(), true); + \
QCOMPARE(myPlayList.data(myPlayList.index(1, 0), \
MediaPlayList::ColumnsRoles::HasAlbumHeader).toBool(), false); + \
QCOMPARE(myPlayList.data(myPlayList.index(2, 0), \
MediaPlayList::ColumnsRoles::HasAlbumHeader).toBool(), true); + \
QCOMPARE(myPlayList.data(myPlayList.index(3, 0), \
MediaPlayList::ColumnsRoles::HasAlbumHeader).toBool(), true); +
+ myPlayList.removeRows(2, 1);
+
+ QCOMPARE(rowsAboutToBeRemovedSpy.count(), 1);
+ QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
+ QCOMPARE(rowsAboutToBeInsertedSpy.count(), 4);
+ QCOMPARE(rowsRemovedSpy.count(), 1);
+ QCOMPARE(rowsMovedSpy.count(), 0);
+ QCOMPARE(rowsInsertedSpy.count(), 4);
+ QCOMPARE(trackHasBeenAddedSpy.count(), 4);
+ QCOMPARE(databaseInterfaceChangedSpy.count(), 1);
+ QCOMPARE(persistentStateChangedSpy.count(), 5);
+ QCOMPARE(dataChangedSpy.count(), 1);
+
+ QCOMPARE(myPlayList.data(myPlayList.index(0, 0), \
MediaPlayList::ColumnsRoles::HasAlbumHeader).toBool(), true); + \
QCOMPARE(myPlayList.data(myPlayList.index(1, 0), \
MediaPlayList::ColumnsRoles::HasAlbumHeader).toBool(), false); + \
QCOMPARE(myPlayList.data(myPlayList.index(2, 0), \
MediaPlayList::ColumnsRoles::HasAlbumHeader).toBool(), false); +}
+
QTEST_MAIN(MediaPlayListTest)
diff --git a/autotests/mediaplaylisttest.h b/autotests/mediaplaylisttest.h
index 33a009f..8db94db 100644
--- a/autotests/mediaplaylisttest.h
+++ b/autotests/mediaplaylisttest.h
@@ -47,6 +47,8 @@ private Q_SLOTS:
void testHasHeaderWithRestore();
+ void testHasHeaderWithRemove();
+
};
#endif // MEDIAPLAYLISTTEST_H
diff --git a/src/mediaplaylist.cpp b/src/mediaplaylist.cpp
index 937955a..6bdbcff 100644
--- a/src/mediaplaylist.cpp
+++ b/src/mediaplaylist.cpp
@@ -222,8 +222,8 @@ bool MediaPlayList::removeRows(int row, int count, const QModelIndex \
&parent)
bool willChangeData = false;
- if (rowCount() > row + count) {
- auto currentAlbum = d->mMusicDatabase->trackDataFromDatabaseId(d->mData[row + count - \
1].mId, DatabaseInterface::TrackData::Album).toString(); + if (rowCount() > row + count && \
row > 0) { + auto currentAlbum = d->mMusicDatabase->trackDataFromDatabaseId(d->mData[row \
- 1].mId, DatabaseInterface::TrackData::Album).toString();
auto nextAlbum = d->mMusicDatabase->trackDataFromDatabaseId(d->mData[row + count].mId, \
DatabaseInterface::TrackData::Album).toString();
if (currentAlbum == nextAlbum) {
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic