[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