[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