[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