1 /*
2 SPDX-FileCopyrightText: 2016 (c) Matthieu Gallien <matthieu_gallien@yahoo.fr>
3 SPDX-FileCopyrightText: 2020 (c) Alexander Stippich <a.stippich@gmx.net>
4
5 SPDX-License-Identifier: LGPL-3.0-or-later
6 */
7
8 #include "mediaplaylistproxymodeltest.h"
9 #include "mediaplaylisttestconfig.h"
10
11 #include "datatypes.h"
12 #include "mediaplaylist.h"
13 #include "mediaplaylistproxymodel.h"
14 #include "databaseinterface.h"
15 #include "trackslistener.h"
16
17 #include "config-upnp-qt.h"
18
19 #include <QtTest>
20 #include <QUrl>
21 #include <QTime>
22 #include <QTemporaryFile>
23 #include <QAbstractItemModelTester>
24
MediaPlayListProxyModelTest(QObject * parent)25 MediaPlayListProxyModelTest::MediaPlayListProxyModelTest(QObject *parent) : QObject(parent)
26 {
27 }
28
initTestCase()29 void MediaPlayListProxyModelTest::initTestCase()
30 {
31 qRegisterMetaType<QHash<QString,QUrl>>("QHash<QString,QUrl>");
32 qRegisterMetaType<QVector<qlonglong>>("QVector<qlonglong>");
33 qRegisterMetaType<QHash<qlonglong,int>>("QHash<qlonglong,int>");
34 qRegisterMetaType<ElisaUtils::PlayListEntryType>("PlayListEntryType");
35 }
36
simpleInitialCase()37 void MediaPlayListProxyModelTest::simpleInitialCase()
38 {
39 MediaPlayList myPlayList;
40 QAbstractItemModelTester testModel(&myPlayList);
41 MediaPlayListProxyModel myPlayListProxyModel;
42 myPlayListProxyModel.setPlayListModel(&myPlayList);
43 QAbstractItemModelTester testProxyModel(&myPlayListProxyModel);
44 DatabaseInterface myDatabaseContent;
45 TracksListener myListener(&myDatabaseContent);
46
47 QSignalSpy rowsAboutToBeMovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsAboutToBeMoved);
48 QSignalSpy rowsAboutToBeRemovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsAboutToBeRemoved);
49 QSignalSpy rowsAboutToBeInsertedSpy(&myPlayListProxyModel, &MediaPlayList::rowsAboutToBeInserted);
50 QSignalSpy rowsMovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsMoved);
51 QSignalSpy rowsRemovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsRemoved);
52 QSignalSpy rowsInsertedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsInserted);
53 QSignalSpy persistentStateChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::persistentStateChanged);
54 QSignalSpy dataChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::dataChanged);
55 QSignalSpy newTrackByNameInListSpy(&myPlayList, &MediaPlayList::newTrackByNameInList);
56 QSignalSpy newEntryInListSpy(&myPlayList, &MediaPlayList::newEntryInList);
57 QSignalSpy newUrlInListSpy(&myPlayList, &MediaPlayList::newUrlInList);
58
59 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
60 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
61 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 0);
62 QCOMPARE(rowsRemovedSpy.count(), 0);
63 QCOMPARE(rowsMovedSpy.count(), 0);
64 QCOMPARE(rowsInsertedSpy.count(), 0);
65 QCOMPARE(persistentStateChangedSpy.count(), 0);
66 QCOMPARE(dataChangedSpy.count(), 0);
67 QCOMPARE(newTrackByNameInListSpy.count(), 0);
68 QCOMPARE(newEntryInListSpy.count(), 0);
69
70 myDatabaseContent.init(QStringLiteral("testDbDirectContent"));
71
72 connect(&myListener, &TracksListener::trackHasChanged,
73 &myPlayList, &MediaPlayList::trackChanged,
74 Qt::QueuedConnection);
75 connect(&myListener, &TracksListener::tracksListAdded,
76 &myPlayList, &MediaPlayList::tracksListAdded,
77 Qt::QueuedConnection);
78 connect(&myPlayList, &MediaPlayList::newEntryInList,
79 &myListener, &TracksListener::newEntryInList,
80 Qt::QueuedConnection);
81 connect(&myPlayList, &MediaPlayList::newUrlInList,
82 &myListener, &TracksListener::newUrlInList,
83 Qt::QueuedConnection);
84 connect(&myPlayList, &MediaPlayList::newTrackByNameInList,
85 &myListener, &TracksListener::trackByNameInList,
86 Qt::QueuedConnection);
87 connect(&myDatabaseContent, &DatabaseInterface::tracksAdded,
88 &myListener, &TracksListener::tracksAdded);
89
90 myDatabaseContent.insertTracksList(mNewTracks, mNewCovers);
91
92 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
93 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
94 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 0);
95 QCOMPARE(rowsRemovedSpy.count(), 0);
96 QCOMPARE(rowsMovedSpy.count(), 0);
97 QCOMPARE(rowsInsertedSpy.count(), 0);
98 QCOMPARE(persistentStateChangedSpy.count(), 0);
99 QCOMPARE(dataChangedSpy.count(), 0);
100 QCOMPARE(newTrackByNameInListSpy.count(), 0);
101 QCOMPARE(newEntryInListSpy.count(), 0);
102
103 auto newTrackID = myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track6"), QStringLiteral("artist1 and artist2"), QStringLiteral("album2"), 6, 1);
104 auto newTrackData = myDatabaseContent.trackDataFromDatabaseId(newTrackID);
105 myPlayListProxyModel.enqueue({{{{DataTypes::DatabaseIdRole, newTrackID}, {DataTypes::ElementTypeRole, ElisaUtils::Track}}, {}, {}}}, {}, {});
106
107 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
108 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
109 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 1);
110 QCOMPARE(rowsRemovedSpy.count(), 0);
111 QCOMPARE(rowsMovedSpy.count(), 0);
112 QCOMPARE(rowsInsertedSpy.count(), 1);
113 QCOMPARE(persistentStateChangedSpy.count(), 1);
114 QCOMPARE(dataChangedSpy.count(), 0);
115 QCOMPARE(newTrackByNameInListSpy.count(), 0);
116 QCOMPARE(newEntryInListSpy.count(), 1);
117
118 QCOMPARE(dataChangedSpy.wait(), true);
119
120 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
121 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
122 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 1);
123 QCOMPARE(rowsRemovedSpy.count(), 0);
124 QCOMPARE(rowsMovedSpy.count(), 0);
125 QCOMPARE(rowsInsertedSpy.count(), 1);
126 QCOMPARE(persistentStateChangedSpy.count(), 1);
127 QCOMPARE(dataChangedSpy.count(), 1);
128 QCOMPARE(newTrackByNameInListSpy.count(), 0);
129 QCOMPARE(newEntryInListSpy.count(), 1);
130 }
131
enqueueAlbumCase()132 void MediaPlayListProxyModelTest::enqueueAlbumCase()
133 {
134 MediaPlayList myPlayList;
135 QAbstractItemModelTester testModel(&myPlayList);
136 MediaPlayListProxyModel myPlayListProxyModel;
137 myPlayListProxyModel.setPlayListModel(&myPlayList);
138 QAbstractItemModelTester testProxyModel(&myPlayListProxyModel);
139 DatabaseInterface myDatabaseContent;
140 TracksListener myListener(&myDatabaseContent);
141
142 QSignalSpy rowsAboutToBeMovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsAboutToBeMoved);
143 QSignalSpy rowsAboutToBeRemovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsAboutToBeRemoved);
144 QSignalSpy rowsAboutToBeInsertedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsAboutToBeInserted);
145 QSignalSpy rowsMovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsMoved);
146 QSignalSpy rowsRemovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsRemoved);
147 QSignalSpy rowsInsertedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsInserted);
148 QSignalSpy persistentStateChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::persistentStateChanged);
149 QSignalSpy dataChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::dataChanged);
150 QSignalSpy newTrackByNameInListSpy(&myPlayList, &MediaPlayList::newTrackByNameInList);
151 QSignalSpy newEntryInListSpy(&myPlayList, &MediaPlayList::newEntryInList);
152 QSignalSpy newUrlInListSpy(&myPlayList, &MediaPlayList::newUrlInList);
153
154 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
155 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
156 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 0);
157 QCOMPARE(rowsRemovedSpy.count(), 0);
158 QCOMPARE(rowsMovedSpy.count(), 0);
159 QCOMPARE(rowsInsertedSpy.count(), 0);
160 QCOMPARE(dataChangedSpy.count(), 0);
161 QCOMPARE(newTrackByNameInListSpy.count(), 0);
162 QCOMPARE(newEntryInListSpy.count(), 0);
163
164 myDatabaseContent.init(QStringLiteral("testDbDirectContent"));
165
166 connect(&myListener, &TracksListener::trackHasChanged,
167 &myPlayList, &MediaPlayList::trackChanged,
168 Qt::QueuedConnection);
169 connect(&myListener, &TracksListener::tracksListAdded,
170 &myPlayList, &MediaPlayList::tracksListAdded,
171 Qt::QueuedConnection);
172 connect(&myPlayList, &MediaPlayList::newTrackByNameInList,
173 &myListener, &TracksListener::trackByNameInList,
174 Qt::QueuedConnection);
175 connect(&myPlayList, &MediaPlayList::newEntryInList,
176 &myListener, &TracksListener::newEntryInList,
177 Qt::QueuedConnection);
178 connect(&myPlayList, &MediaPlayList::newUrlInList,
179 &myListener, &TracksListener::newUrlInList,
180 Qt::QueuedConnection);
181 connect(&myDatabaseContent, &DatabaseInterface::tracksAdded,
182 &myListener, &TracksListener::tracksAdded);
183
184 myDatabaseContent.insertTracksList(mNewTracks, mNewCovers);
185
186 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
187 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
188 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 0);
189 QCOMPARE(rowsRemovedSpy.count(), 0);
190 QCOMPARE(rowsMovedSpy.count(), 0);
191 QCOMPARE(rowsInsertedSpy.count(), 0);
192 QCOMPARE(dataChangedSpy.count(), 0);
193 QCOMPARE(newTrackByNameInListSpy.count(), 0);
194 QCOMPARE(newEntryInListSpy.count(), 0);
195
196 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Album}, {DataTypes::DatabaseIdRole, myDatabaseContent.albumIdFromTitleAndArtist(QStringLiteral("album2"), QStringLiteral("artist1"), QStringLiteral("/"))}},
197 QStringLiteral("album2"), {}}}, {}, {});
198
199 QVERIFY(rowsAboutToBeInsertedSpy.wait());
200
201 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 1);
202 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
203 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 2);
204 QCOMPARE(rowsRemovedSpy.count(), 1);
205 QCOMPARE(rowsMovedSpy.count(), 0);
206 QCOMPARE(rowsInsertedSpy.count(), 2);
207 QCOMPARE(persistentStateChangedSpy.count(), 3);
208 QCOMPARE(dataChangedSpy.count(), 0);
209 QCOMPARE(newTrackByNameInListSpy.count(), 0);
210 QCOMPARE(newEntryInListSpy.count(), 1);
211
212 QCOMPARE(myPlayListProxyModel.rowCount(), 6);
213
214 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::TitleRole).toString(), QStringLiteral("track1"));
215 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::AlbumRole).toString(), QStringLiteral("album2"));
216 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ArtistRole).toString(), QStringLiteral("artist1"));
217 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::TrackNumberRole).toInt(), 1);
218 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::DiscNumberRole).toInt(), 1);
219 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::DurationRole).toTime().msecsSinceStartOfDay(), 5);
220 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::AlbumIdRole).toULongLong(), 2);
221 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::TitleRole).toString(), QStringLiteral("track2"));
222 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::AlbumRole).toString(), QStringLiteral("album2"));
223 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::ArtistRole).toString(), QStringLiteral("artist1"));
224 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::TrackNumberRole).toInt(), 2);
225 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::DiscNumberRole).toInt(), 1);
226 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::DurationRole).toTime().msecsSinceStartOfDay(), 6);
227 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::AlbumIdRole).toULongLong(), 2);
228 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::TitleRole).toString(), QStringLiteral("track3"));
229 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::AlbumRole).toString(), QStringLiteral("album2"));
230 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::ArtistRole).toString(), QStringLiteral("artist1"));
231 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::TrackNumberRole).toInt(), 3);
232 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::DiscNumberRole).toInt(), 1);
233 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::DurationRole).toTime().msecsSinceStartOfDay(), 7);
234 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::AlbumIdRole).toULongLong(), 2);
235 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(3, 0), MediaPlayList::TitleRole).toString(), QStringLiteral("track4"));
236 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(3, 0), MediaPlayList::AlbumRole).toString(), QStringLiteral("album2"));
237 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(3, 0), MediaPlayList::ArtistRole).toString(), QStringLiteral("artist1"));
238 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(3, 0), MediaPlayList::TrackNumberRole).toInt(), 4);
239 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(3, 0), MediaPlayList::DiscNumberRole).toInt(), 1);
240 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(3, 0), MediaPlayList::DurationRole).toTime().msecsSinceStartOfDay(), 8);
241 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(3, 0), MediaPlayList::AlbumIdRole).toULongLong(), 2);
242 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(4, 0), MediaPlayList::TitleRole).toString(), QStringLiteral("track5"));
243 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(4, 0), MediaPlayList::AlbumRole).toString(), QStringLiteral("album2"));
244 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(4, 0), MediaPlayList::ArtistRole).toString(), QStringLiteral("artist1"));
245 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(4, 0), MediaPlayList::TrackNumberRole).toInt(), 5);
246 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(4, 0), MediaPlayList::DiscNumberRole).toInt(), 1);
247 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(4, 0), MediaPlayList::DurationRole).toTime().msecsSinceStartOfDay(), 9);
248 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(4, 0), MediaPlayList::AlbumIdRole).toULongLong(), 2);
249 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(5, 0), MediaPlayList::TitleRole).toString(), QStringLiteral("track6"));
250 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(5, 0), MediaPlayList::AlbumRole).toString(), QStringLiteral("album2"));
251 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(5, 0), MediaPlayList::ArtistRole).toString(), QStringLiteral("artist1 and artist2"));
252 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(5, 0), MediaPlayList::TrackNumberRole).toInt(), 6);
253 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(5, 0), MediaPlayList::DiscNumberRole).toInt(), 1);
254 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(5, 0), MediaPlayList::DurationRole).toTime().msecsSinceStartOfDay(), 10);
255 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(5, 0), MediaPlayList::AlbumIdRole).toULongLong(), 2);
256 }
257
enqueueArtistCase()258 void MediaPlayListProxyModelTest::enqueueArtistCase()
259 {
260 MediaPlayList myPlayList;
261 QAbstractItemModelTester testModel(&myPlayList);
262 MediaPlayListProxyModel myPlayListProxyModel;
263 myPlayListProxyModel.setPlayListModel(&myPlayList);
264 QAbstractItemModelTester testProxyModel(&myPlayListProxyModel);
265 DatabaseInterface myDatabaseContent;
266 TracksListener myListener(&myDatabaseContent);
267
268 QSignalSpy rowsAboutToBeMovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsAboutToBeMoved);
269 QSignalSpy rowsAboutToBeRemovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsAboutToBeRemoved);
270 QSignalSpy rowsAboutToBeInsertedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsAboutToBeInserted);
271 QSignalSpy rowsMovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsMoved);
272 QSignalSpy rowsRemovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsRemoved);
273 QSignalSpy rowsInsertedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsInserted);
274 QSignalSpy persistentStateChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::persistentStateChanged);
275 QSignalSpy dataChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::dataChanged);
276 QSignalSpy newTrackByNameInListSpy(&myPlayList, &MediaPlayList::newTrackByNameInList);
277 QSignalSpy newEntryInListSpy(&myPlayList, &MediaPlayList::newEntryInList);
278 QSignalSpy newUrlInListSpy(&myPlayList, &MediaPlayList::newUrlInList);
279
280 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
281 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
282 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 0);
283 QCOMPARE(rowsRemovedSpy.count(), 0);
284 QCOMPARE(rowsMovedSpy.count(), 0);
285 QCOMPARE(rowsInsertedSpy.count(), 0);
286 QCOMPARE(persistentStateChangedSpy.count(), 0);
287 QCOMPARE(dataChangedSpy.count(), 0);
288 QCOMPARE(newTrackByNameInListSpy.count(), 0);
289 QCOMPARE(newEntryInListSpy.count(), 0);
290
291 myDatabaseContent.init(QStringLiteral("testDbDirectContent"));
292
293 connect(&myListener, &TracksListener::trackHasChanged,
294 &myPlayList, &MediaPlayList::trackChanged,
295 Qt::QueuedConnection);
296 connect(&myListener, &TracksListener::tracksListAdded,
297 &myPlayList, &MediaPlayList::tracksListAdded,
298 Qt::QueuedConnection);
299 connect(&myPlayList, &MediaPlayList::newTrackByNameInList,
300 &myListener, &TracksListener::trackByNameInList,
301 Qt::QueuedConnection);
302 connect(&myPlayList, &MediaPlayList::newEntryInList,
303 &myListener, &TracksListener::newEntryInList,
304 Qt::QueuedConnection);
305 connect(&myPlayList, &MediaPlayList::newUrlInList,
306 &myListener, &TracksListener::newUrlInList,
307 Qt::QueuedConnection);
308 connect(&myDatabaseContent, &DatabaseInterface::tracksAdded,
309 &myListener, &TracksListener::tracksAdded);
310
311 myDatabaseContent.insertTracksList(mNewTracks, mNewCovers);
312
313 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
314 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
315 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 0);
316 QCOMPARE(rowsRemovedSpy.count(), 0);
317 QCOMPARE(rowsMovedSpy.count(), 0);
318 QCOMPARE(rowsInsertedSpy.count(), 0);
319 QCOMPARE(persistentStateChangedSpy.count(), 0);
320 QCOMPARE(dataChangedSpy.count(), 0);
321 QCOMPARE(newTrackByNameInListSpy.count(), 0);
322 QCOMPARE(newEntryInListSpy.count(), 0);
323
324 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Artist}}, QStringLiteral("artist1"), {}}}, {}, {});
325
326 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
327 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
328 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 1);
329 QCOMPARE(rowsRemovedSpy.count(), 0);
330 QCOMPARE(rowsMovedSpy.count(), 0);
331 QCOMPARE(rowsInsertedSpy.count(), 1);
332 QCOMPARE(persistentStateChangedSpy.count(), 1);
333 QCOMPARE(dataChangedSpy.count(), 0);
334 QCOMPARE(newTrackByNameInListSpy.count(), 0);
335 QCOMPARE(newEntryInListSpy.count(), 1);
336
337 QCOMPARE(myPlayListProxyModel.rowCount(), 1);
338
339 QCOMPARE(rowsAboutToBeInsertedSpy.wait(), true);
340
341 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 1);
342 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
343 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 2);
344 QCOMPARE(rowsRemovedSpy.count(), 1);
345 QCOMPARE(rowsMovedSpy.count(), 0);
346 QCOMPARE(rowsInsertedSpy.count(), 2);
347 QCOMPARE(persistentStateChangedSpy.count(), 3);
348 QCOMPARE(dataChangedSpy.count(), 0);
349 QCOMPARE(newTrackByNameInListSpy.count(), 0);
350 QCOMPARE(newEntryInListSpy.count(), 1);
351
352 QCOMPARE(myPlayListProxyModel.rowCount(), 6);
353
354 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::TitleRole).toString(), QStringLiteral("track1"));
355 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::AlbumRole).toString(), QStringLiteral("album1"));
356 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ArtistRole).toString(), QStringLiteral("artist1"));
357 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::TrackNumberRole).toInt(), 1);
358 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::DiscNumberRole).toInt(), 1);
359 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::DurationRole).toTime().msecsSinceStartOfDay(), 1);
360 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::AlbumIdRole).toULongLong(), 1);
361 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::TitleRole).toString(), QStringLiteral("track1"));
362 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::AlbumRole).toString(), QStringLiteral("album2"));
363 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::ArtistRole).toString(), QStringLiteral("artist1"));
364 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::TrackNumberRole).toInt(), 1);
365 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::DiscNumberRole).toInt(), 1);
366 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::DurationRole).toTime().msecsSinceStartOfDay(), 5);
367 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::AlbumIdRole).toULongLong(), 2);
368 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::TitleRole).toString(), QStringLiteral("track2"));
369 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::AlbumRole).toString(), QStringLiteral("album2"));
370 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::ArtistRole).toString(), QStringLiteral("artist1"));
371 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::TrackNumberRole).toInt(), 2);
372 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::DiscNumberRole).toInt(), 1);
373 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::DurationRole).toTime().msecsSinceStartOfDay(), 6);
374 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::AlbumIdRole).toULongLong(), 2);
375 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(3, 0), MediaPlayList::TitleRole).toString(), QStringLiteral("track3"));
376 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(3, 0), MediaPlayList::AlbumRole).toString(), QStringLiteral("album2"));
377 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(3, 0), MediaPlayList::ArtistRole).toString(), QStringLiteral("artist1"));
378 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(3, 0), MediaPlayList::TrackNumberRole).toInt(), 3);
379 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(3, 0), MediaPlayList::DiscNumberRole).toInt(), 1);
380 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(3, 0), MediaPlayList::DurationRole).toTime().msecsSinceStartOfDay(), 7);
381 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(3, 0), MediaPlayList::AlbumIdRole).toULongLong(), 2);
382 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(4, 0), MediaPlayList::TitleRole).toString(), QStringLiteral("track4"));
383 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(4, 0), MediaPlayList::AlbumRole).toString(), QStringLiteral("album2"));
384 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(4, 0), MediaPlayList::ArtistRole).toString(), QStringLiteral("artist1"));
385 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(4, 0), MediaPlayList::TrackNumberRole).toInt(), 4);
386 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(4, 0), MediaPlayList::DiscNumberRole).toInt(), 1);
387 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(4, 0), MediaPlayList::DurationRole).toTime().msecsSinceStartOfDay(), 8);
388 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(4, 0), MediaPlayList::AlbumIdRole).toULongLong(), 2);
389 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(5, 0), MediaPlayList::TitleRole).toString(), QStringLiteral("track5"));
390 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(5, 0), MediaPlayList::AlbumRole).toString(), QStringLiteral("album2"));
391 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(5, 0), MediaPlayList::ArtistRole).toString(), QStringLiteral("artist1"));
392 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(5, 0), MediaPlayList::TrackNumberRole).toInt(), 5);
393 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(5, 0), MediaPlayList::DiscNumberRole).toInt(), 1);
394 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(5, 0), MediaPlayList::DurationRole).toTime().msecsSinceStartOfDay(), 9);
395 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(5, 0), MediaPlayList::AlbumIdRole).toULongLong(), 2);
396 }
397
enqueueMultipleAlbumsCase()398 void MediaPlayListProxyModelTest::enqueueMultipleAlbumsCase()
399 {
400 MediaPlayList myPlayList;
401 QAbstractItemModelTester testModel(&myPlayList);
402 MediaPlayListProxyModel myPlayListProxyModel;
403 myPlayListProxyModel.setPlayListModel(&myPlayList);
404 QAbstractItemModelTester testProxyModel(&myPlayListProxyModel);
405 DatabaseInterface myDatabaseContent;
406 TracksListener myListener(&myDatabaseContent);
407
408 QSignalSpy rowsAboutToBeMovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsAboutToBeMoved);
409 QSignalSpy rowsAboutToBeRemovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsAboutToBeRemoved);
410 QSignalSpy rowsAboutToBeInsertedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsAboutToBeInserted);
411 QSignalSpy rowsMovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsMoved);
412 QSignalSpy rowsRemovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsRemoved);
413 QSignalSpy rowsInsertedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsInserted);
414 QSignalSpy persistentStateChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::persistentStateChanged);
415 QSignalSpy dataChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::dataChanged);
416 QSignalSpy newTrackByNameInListSpy(&myPlayList, &MediaPlayList::newTrackByNameInList);
417 QSignalSpy newEntryInListSpy(&myPlayList, &MediaPlayList::newEntryInList);
418 QSignalSpy newUrlInListSpy(&myPlayList, &MediaPlayList::newUrlInList);
419
420 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
421 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
422 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 0);
423 QCOMPARE(rowsRemovedSpy.count(), 0);
424 QCOMPARE(rowsMovedSpy.count(), 0);
425 QCOMPARE(rowsInsertedSpy.count(), 0);
426 QCOMPARE(dataChangedSpy.count(), 0);
427 QCOMPARE(newTrackByNameInListSpy.count(), 0);
428 QCOMPARE(newEntryInListSpy.count(), 0);
429
430 myDatabaseContent.init(QStringLiteral("testDbDirectContent"));
431
432 connect(&myListener, &TracksListener::trackHasChanged,
433 &myPlayList, &MediaPlayList::trackChanged,
434 Qt::QueuedConnection);
435 connect(&myListener, &TracksListener::tracksListAdded,
436 &myPlayList, &MediaPlayList::tracksListAdded,
437 Qt::QueuedConnection);
438 connect(&myPlayList, &MediaPlayList::newTrackByNameInList,
439 &myListener, &TracksListener::trackByNameInList,
440 Qt::QueuedConnection);
441 connect(&myPlayList, &MediaPlayList::newEntryInList,
442 &myListener, &TracksListener::newEntryInList,
443 Qt::QueuedConnection);
444 connect(&myPlayList, &MediaPlayList::newUrlInList,
445 &myListener, &TracksListener::newUrlInList,
446 Qt::QueuedConnection);
447 connect(&myDatabaseContent, &DatabaseInterface::tracksAdded,
448 &myListener, &TracksListener::tracksAdded);
449
450 myDatabaseContent.insertTracksList(mNewTracks, mNewCovers);
451
452 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
453 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
454 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 0);
455 QCOMPARE(rowsRemovedSpy.count(), 0);
456 QCOMPARE(rowsMovedSpy.count(), 0);
457 QCOMPARE(rowsInsertedSpy.count(), 0);
458 QCOMPARE(dataChangedSpy.count(), 0);
459 QCOMPARE(newTrackByNameInListSpy.count(), 0);
460 QCOMPARE(newEntryInListSpy.count(), 0);
461
462 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Album},
463 {DataTypes::DatabaseIdRole, myDatabaseContent.albumIdFromTitleAndArtist(QStringLiteral("album2"), QStringLiteral("artist1"), QStringLiteral("/"))}},
464 QStringLiteral("album2"), {}},
465 {{{DataTypes::ElementTypeRole, ElisaUtils::Album},
466 {DataTypes::DatabaseIdRole, myDatabaseContent.albumIdFromTitleAndArtist(QStringLiteral("album3"), QStringLiteral("artist2"), QStringLiteral("/"))}},
467 QStringLiteral("album3"), {}}}, {}, {});
468
469 QVERIFY(rowsAboutToBeInsertedSpy.wait());
470
471 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 2);
472 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
473 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 3);
474 QCOMPARE(rowsRemovedSpy.count(), 2);
475 QCOMPARE(rowsMovedSpy.count(), 0);
476 QCOMPARE(rowsInsertedSpy.count(), 3);
477 QCOMPARE(persistentStateChangedSpy.count(), 5);
478 QCOMPARE(dataChangedSpy.count(), 0);
479 QCOMPARE(newTrackByNameInListSpy.count(), 0);
480 QCOMPARE(newEntryInListSpy.count(), 2);
481
482 QCOMPARE(myPlayListProxyModel.rowCount(), 9);
483
484 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::TitleRole).toString(), QStringLiteral("track1"));
485 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::AlbumRole).toString(), QStringLiteral("album2"));
486 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ArtistRole).toString(), QStringLiteral("artist1"));
487 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::TrackNumberRole).toInt(), 1);
488 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::DiscNumberRole).toInt(), 1);
489 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::DurationRole).toTime().msecsSinceStartOfDay(), 5);
490 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::AlbumIdRole).toULongLong(), 2);
491 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::TitleRole).toString(), QStringLiteral("track2"));
492 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::AlbumRole).toString(), QStringLiteral("album2"));
493 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::ArtistRole).toString(), QStringLiteral("artist1"));
494 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::TrackNumberRole).toInt(), 2);
495 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::DiscNumberRole).toInt(), 1);
496 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::DurationRole).toTime().msecsSinceStartOfDay(), 6);
497 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::AlbumIdRole).toULongLong(), 2);
498 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::TitleRole).toString(), QStringLiteral("track3"));
499 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::AlbumRole).toString(), QStringLiteral("album2"));
500 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::ArtistRole).toString(), QStringLiteral("artist1"));
501 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::TrackNumberRole).toInt(), 3);
502 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::DiscNumberRole).toInt(), 1);
503 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::DurationRole).toTime().msecsSinceStartOfDay(), 7);
504 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::AlbumIdRole).toULongLong(), 2);
505 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(3, 0), MediaPlayList::TitleRole).toString(), QStringLiteral("track4"));
506 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(3, 0), MediaPlayList::AlbumRole).toString(), QStringLiteral("album2"));
507 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(3, 0), MediaPlayList::ArtistRole).toString(), QStringLiteral("artist1"));
508 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(3, 0), MediaPlayList::TrackNumberRole).toInt(), 4);
509 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(3, 0), MediaPlayList::DiscNumberRole).toInt(), 1);
510 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(3, 0), MediaPlayList::DurationRole).toTime().msecsSinceStartOfDay(), 8);
511 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(3, 0), MediaPlayList::AlbumIdRole).toULongLong(), 2);
512 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(4, 0), MediaPlayList::TitleRole).toString(), QStringLiteral("track5"));
513 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(4, 0), MediaPlayList::AlbumRole).toString(), QStringLiteral("album2"));
514 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(4, 0), MediaPlayList::ArtistRole).toString(), QStringLiteral("artist1"));
515 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(4, 0), MediaPlayList::TrackNumberRole).toInt(), 5);
516 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(4, 0), MediaPlayList::DiscNumberRole).toInt(), 1);
517 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(4, 0), MediaPlayList::DurationRole).toTime().msecsSinceStartOfDay(), 9);
518 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(4, 0), MediaPlayList::AlbumIdRole).toULongLong(), 2);
519 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(5, 0), MediaPlayList::TitleRole).toString(), QStringLiteral("track6"));
520 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(5, 0), MediaPlayList::AlbumRole).toString(), QStringLiteral("album2"));
521 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(5, 0), MediaPlayList::ArtistRole).toString(), QStringLiteral("artist1 and artist2"));
522 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(5, 0), MediaPlayList::TrackNumberRole).toInt(), 6);
523 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(5, 0), MediaPlayList::DiscNumberRole).toInt(), 1);
524 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(5, 0), MediaPlayList::DurationRole).toTime().msecsSinceStartOfDay(), 10);
525 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(5, 0), MediaPlayList::AlbumIdRole).toULongLong(), 2);
526 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(6, 0), MediaPlayList::TitleRole).toString(), QStringLiteral("track1"));
527 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(6, 0), MediaPlayList::AlbumRole).toString(), QStringLiteral("album3"));
528 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(6, 0), MediaPlayList::ArtistRole).toString(), QStringLiteral("artist2"));
529 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(6, 0), MediaPlayList::TrackNumberRole).toInt(), 1);
530 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(6, 0), MediaPlayList::DiscNumberRole).toInt(), 1);
531 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(6, 0), MediaPlayList::DurationRole).toTime().msecsSinceStartOfDay(), 11);
532 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(6, 0), MediaPlayList::AlbumIdRole).toULongLong(), 3);
533 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(7, 0), MediaPlayList::TitleRole).toString(), QStringLiteral("track2"));
534 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(7, 0), MediaPlayList::AlbumRole).toString(), QStringLiteral("album3"));
535 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(7, 0), MediaPlayList::ArtistRole).toString(), QStringLiteral("artist2"));
536 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(7, 0), MediaPlayList::TrackNumberRole).toInt(), 2);
537 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(7, 0), MediaPlayList::DiscNumberRole).toInt(), 1);
538 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(7, 0), MediaPlayList::DurationRole).toTime().msecsSinceStartOfDay(), 12);
539 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(7, 0), MediaPlayList::AlbumIdRole).toULongLong(), 3);
540 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(8, 0), MediaPlayList::TitleRole).toString(), QStringLiteral("track3"));
541 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(8, 0), MediaPlayList::AlbumRole).toString(), QStringLiteral("album3"));
542 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(8, 0), MediaPlayList::ArtistRole).toString(), QStringLiteral("artist2"));
543 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(8, 0), MediaPlayList::TrackNumberRole).toInt(), 3);
544 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(8, 0), MediaPlayList::DiscNumberRole).toInt(), 1);
545 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(8, 0), MediaPlayList::DurationRole).toTime().msecsSinceStartOfDay(), 13);
546 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(8, 0), MediaPlayList::AlbumIdRole).toULongLong(), 3);
547 }
548
enqueueTrackByUrl()549 void MediaPlayListProxyModelTest::enqueueTrackByUrl()
550 {
551 MediaPlayList myPlayList;
552 QAbstractItemModelTester testModel(&myPlayList);
553 MediaPlayListProxyModel myPlayListProxyModel;
554 myPlayListProxyModel.setPlayListModel(&myPlayList);
555 QAbstractItemModelTester testProxyModel(&myPlayListProxyModel);
556 DatabaseInterface myDatabaseContent;
557 TracksListener myListener(&myDatabaseContent);
558
559 QSignalSpy rowsAboutToBeMovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsAboutToBeMoved);
560 QSignalSpy rowsAboutToBeRemovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsAboutToBeRemoved);
561 QSignalSpy rowsAboutToBeInsertedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsAboutToBeInserted);
562 QSignalSpy rowsMovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsMoved);
563 QSignalSpy rowsRemovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsRemoved);
564 QSignalSpy rowsInsertedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsInserted);
565 QSignalSpy persistentStateChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::persistentStateChanged);
566 QSignalSpy dataChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::dataChanged);
567 QSignalSpy newTrackByNameInListSpy(&myPlayList, &MediaPlayList::newTrackByNameInList);
568 QSignalSpy newEntryInListSpy(&myPlayList, &MediaPlayList::newEntryInList);
569 QSignalSpy newUrlInListSpy(&myPlayList, &MediaPlayList::newUrlInList);
570
571 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
572 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
573 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 0);
574 QCOMPARE(rowsRemovedSpy.count(), 0);
575 QCOMPARE(rowsMovedSpy.count(), 0);
576 QCOMPARE(rowsInsertedSpy.count(), 0);
577 QCOMPARE(persistentStateChangedSpy.count(), 0);
578 QCOMPARE(dataChangedSpy.count(), 0);
579 QCOMPARE(newTrackByNameInListSpy.count(), 0);
580 QCOMPARE(newEntryInListSpy.count(), 0);
581 QCOMPARE(newUrlInListSpy.count(), 0);
582
583 myDatabaseContent.init(QStringLiteral("testDbDirectContent"));
584
585 connect(&myListener, &TracksListener::trackHasChanged,
586 &myPlayList, &MediaPlayList::trackChanged,
587 Qt::QueuedConnection);
588 connect(&myListener, &TracksListener::tracksListAdded,
589 &myPlayList, &MediaPlayList::tracksListAdded,
590 Qt::QueuedConnection);
591 connect(&myPlayList, &MediaPlayList::newEntryInList,
592 &myListener, &TracksListener::newEntryInList,
593 Qt::QueuedConnection);
594 connect(&myPlayList, &MediaPlayList::newUrlInList,
595 &myListener, &TracksListener::newUrlInList,
596 Qt::QueuedConnection);
597 connect(&myPlayList, &MediaPlayList::newTrackByNameInList,
598 &myListener, &TracksListener::trackByNameInList,
599 Qt::QueuedConnection);
600 connect(&myDatabaseContent, &DatabaseInterface::tracksAdded,
601 &myListener, &TracksListener::tracksAdded);
602
603 myDatabaseContent.insertTracksList(mNewTracks, mNewCovers);
604
605 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
606 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
607 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 0);
608 QCOMPARE(rowsRemovedSpy.count(), 0);
609 QCOMPARE(rowsMovedSpy.count(), 0);
610 QCOMPARE(rowsInsertedSpy.count(), 0);
611 QCOMPARE(persistentStateChangedSpy.count(), 0);
612 QCOMPARE(dataChangedSpy.count(), 0);
613 QCOMPARE(newTrackByNameInListSpy.count(), 0);
614 QCOMPARE(newEntryInListSpy.count(), 0);
615 QCOMPARE(newUrlInListSpy.count(), 0);
616
617 auto newTrackID = myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track6"), QStringLiteral("artist1 and artist2"), QStringLiteral("album2"), 6, 1);
618 auto trackData = myDatabaseContent.trackDataFromDatabaseId(newTrackID);
619 myPlayListProxyModel.enqueue({{DataTypes::ElementTypeRole, ElisaUtils::Track},
620 {DataTypes::ResourceRole, trackData.resourceURI()}}, {}, {}, {});
621
622 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
623 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
624 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 1);
625 QCOMPARE(rowsRemovedSpy.count(), 0);
626 QCOMPARE(rowsMovedSpy.count(), 0);
627 QCOMPARE(rowsInsertedSpy.count(), 1);
628 QCOMPARE(persistentStateChangedSpy.count(), 1);
629 QCOMPARE(dataChangedSpy.count(), 0);
630 QCOMPARE(newTrackByNameInListSpy.count(), 0);
631 QCOMPARE(newEntryInListSpy.count(), 0);
632 QCOMPARE(newUrlInListSpy.count(), 1);
633
634 QCOMPARE(dataChangedSpy.wait(), true);
635
636 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
637 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
638 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 1);
639 QCOMPARE(rowsRemovedSpy.count(), 0);
640 QCOMPARE(rowsMovedSpy.count(), 0);
641 QCOMPARE(rowsInsertedSpy.count(), 1);
642 QCOMPARE(persistentStateChangedSpy.count(), 1);
643 QCOMPARE(dataChangedSpy.count(), 1);
644 QCOMPARE(newTrackByNameInListSpy.count(), 0);
645 QCOMPARE(newEntryInListSpy.count(), 0);
646 QCOMPARE(newUrlInListSpy.count(), 1);
647 }
648
enqueueTracksByUrl()649 void MediaPlayListProxyModelTest::enqueueTracksByUrl()
650 {
651 MediaPlayList myPlayList;
652 QAbstractItemModelTester testModel(&myPlayList);
653 MediaPlayListProxyModel myPlayListProxyModel;
654 myPlayListProxyModel.setPlayListModel(&myPlayList);
655 QAbstractItemModelTester testProxyModel(&myPlayListProxyModel);
656 DatabaseInterface myDatabaseContent;
657 TracksListener myListener(&myDatabaseContent);
658
659 QSignalSpy rowsAboutToBeMovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsAboutToBeMoved);
660 QSignalSpy rowsAboutToBeRemovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsAboutToBeRemoved);
661 QSignalSpy rowsAboutToBeInsertedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsAboutToBeInserted);
662 QSignalSpy rowsMovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsMoved);
663 QSignalSpy rowsRemovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsRemoved);
664 QSignalSpy rowsInsertedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsInserted);
665 QSignalSpy persistentStateChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::persistentStateChanged);
666 QSignalSpy dataChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::dataChanged);
667 QSignalSpy newTrackByNameInListSpy(&myPlayList, &MediaPlayList::newTrackByNameInList);
668 QSignalSpy newEntryInListSpy(&myPlayList, &MediaPlayList::newEntryInList);
669 QSignalSpy newUrlInListSpy(&myPlayList, &MediaPlayList::newUrlInList);
670
671 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
672 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
673 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 0);
674 QCOMPARE(rowsRemovedSpy.count(), 0);
675 QCOMPARE(rowsMovedSpy.count(), 0);
676 QCOMPARE(rowsInsertedSpy.count(), 0);
677 QCOMPARE(persistentStateChangedSpy.count(), 0);
678 QCOMPARE(dataChangedSpy.count(), 0);
679 QCOMPARE(newTrackByNameInListSpy.count(), 0);
680 QCOMPARE(newEntryInListSpy.count(), 0);
681 QCOMPARE(newUrlInListSpy.count(), 0);
682
683 myDatabaseContent.init(QStringLiteral("testDbDirectContent"));
684
685 connect(&myListener, &TracksListener::trackHasChanged,
686 &myPlayList, &MediaPlayList::trackChanged,
687 Qt::QueuedConnection);
688 connect(&myListener, &TracksListener::tracksListAdded,
689 &myPlayList, &MediaPlayList::tracksListAdded,
690 Qt::QueuedConnection);
691 connect(&myPlayList, &MediaPlayList::newEntryInList,
692 &myListener, &TracksListener::newEntryInList,
693 Qt::QueuedConnection);
694 connect(&myPlayList, &MediaPlayList::newUrlInList,
695 &myListener, &TracksListener::newUrlInList,
696 Qt::QueuedConnection);
697 connect(&myPlayList, &MediaPlayList::newTrackByNameInList,
698 &myListener, &TracksListener::trackByNameInList,
699 Qt::QueuedConnection);
700 connect(&myDatabaseContent, &DatabaseInterface::tracksAdded,
701 &myListener, &TracksListener::tracksAdded);
702
703 myDatabaseContent.insertTracksList(mNewTracks, mNewCovers);
704
705 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
706 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
707 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 0);
708 QCOMPARE(rowsRemovedSpy.count(), 0);
709 QCOMPARE(rowsMovedSpy.count(), 0);
710 QCOMPARE(rowsInsertedSpy.count(), 0);
711 QCOMPARE(persistentStateChangedSpy.count(), 0);
712 QCOMPARE(dataChangedSpy.count(), 0);
713 QCOMPARE(newTrackByNameInListSpy.count(), 0);
714 QCOMPARE(newEntryInListSpy.count(), 0);
715 QCOMPARE(newUrlInListSpy.count(), 0);
716
717 auto firstNewTrackID = myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track6"), QStringLiteral("artist1 and artist2"), QStringLiteral("album2"), 6, 1);
718 auto firstTrackData = myDatabaseContent.trackDataFromDatabaseId(firstNewTrackID);
719 auto secondNewTrackID = myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track1"), QStringLiteral("artist1"), QStringLiteral("album1"), 1, 1);
720 auto secondTrackData = myDatabaseContent.trackDataFromDatabaseId(secondNewTrackID);
721 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track},
722 {DataTypes::ResourceRole, firstTrackData.resourceURI()}}, {}, {}},
723 {{{DataTypes::ElementTypeRole, ElisaUtils::Track},
724 {DataTypes::ResourceRole, secondTrackData.resourceURI()}}, {}, {}}}, {}, {});
725
726 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
727 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
728 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 1);
729 QCOMPARE(rowsRemovedSpy.count(), 0);
730 QCOMPARE(rowsMovedSpy.count(), 0);
731 QCOMPARE(rowsInsertedSpy.count(), 1);
732 QCOMPARE(persistentStateChangedSpy.count(), 1);
733 QCOMPARE(dataChangedSpy.count(), 0);
734 QCOMPARE(newTrackByNameInListSpy.count(), 0);
735 QCOMPARE(newEntryInListSpy.count(), 0);
736 QCOMPARE(newUrlInListSpy.count(), 2);
737
738 QCOMPARE(dataChangedSpy.wait(), true);
739
740 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
741 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
742 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 1);
743 QCOMPARE(rowsRemovedSpy.count(), 0);
744 QCOMPARE(rowsMovedSpy.count(), 0);
745 QCOMPARE(rowsInsertedSpy.count(), 1);
746 QCOMPARE(persistentStateChangedSpy.count(), 1);
747 QCOMPARE(dataChangedSpy.count(), 2);
748 QCOMPARE(newTrackByNameInListSpy.count(), 0);
749 QCOMPARE(newEntryInListSpy.count(), 0);
750 QCOMPARE(newUrlInListSpy.count(), 2);
751 }
752
enqueueReplaceAndPlay()753 void MediaPlayListProxyModelTest::enqueueReplaceAndPlay()
754 {
755 MediaPlayList myPlayList;
756 QAbstractItemModelTester testModel(&myPlayList);
757 MediaPlayListProxyModel myPlayListProxyModel;
758 myPlayListProxyModel.setPlayListModel(&myPlayList);
759 QAbstractItemModelTester testProxyModel(&myPlayListProxyModel);
760 DatabaseInterface myDatabaseContent;
761 TracksListener myListener(&myDatabaseContent);
762
763 QSignalSpy rowsAboutToBeMovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsAboutToBeMoved);
764 QSignalSpy rowsAboutToBeRemovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsAboutToBeRemoved);
765 QSignalSpy rowsAboutToBeInsertedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsAboutToBeInserted);
766 QSignalSpy rowsMovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsMoved);
767 QSignalSpy rowsRemovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsRemoved);
768 QSignalSpy rowsInsertedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsInserted);
769 QSignalSpy persistentStateChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::persistentStateChanged);
770 QSignalSpy dataChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::dataChanged);
771 QSignalSpy newTrackByNameInListSpy(&myPlayList, &MediaPlayList::newTrackByNameInList);
772 QSignalSpy newEntryInListSpy(&myPlayList, &MediaPlayList::newEntryInList);
773 QSignalSpy newUrlInListSpy(&myPlayList, &MediaPlayList::newUrlInList);
774
775 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
776 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
777 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 0);
778 QCOMPARE(rowsRemovedSpy.count(), 0);
779 QCOMPARE(rowsMovedSpy.count(), 0);
780 QCOMPARE(rowsInsertedSpy.count(), 0);
781 QCOMPARE(persistentStateChangedSpy.count(), 0);
782 QCOMPARE(dataChangedSpy.count(), 0);
783 QCOMPARE(newTrackByNameInListSpy.count(), 0);
784 QCOMPARE(newEntryInListSpy.count(), 0);
785
786 myDatabaseContent.init(QStringLiteral("testDbDirectContent"));
787
788 connect(&myListener, &TracksListener::trackHasChanged,
789 &myPlayList, &MediaPlayList::trackChanged,
790 Qt::QueuedConnection);
791 connect(&myListener, &TracksListener::tracksListAdded,
792 &myPlayList, &MediaPlayList::tracksListAdded,
793 Qt::QueuedConnection);
794 connect(&myPlayList, &MediaPlayList::newTrackByNameInList,
795 &myListener, &TracksListener::trackByNameInList,
796 Qt::QueuedConnection);
797 connect(&myPlayList, &MediaPlayList::newEntryInList,
798 &myListener, &TracksListener::newEntryInList,
799 Qt::QueuedConnection);
800 connect(&myPlayList, &MediaPlayList::newUrlInList,
801 &myListener, &TracksListener::newUrlInList,
802 Qt::QueuedConnection);
803 connect(&myDatabaseContent, &DatabaseInterface::tracksAdded,
804 &myListener, &TracksListener::tracksAdded);
805
806 myDatabaseContent.insertTracksList(mNewTracks, mNewCovers);
807
808 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
809 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
810 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 0);
811 QCOMPARE(rowsRemovedSpy.count(), 0);
812 QCOMPARE(rowsMovedSpy.count(), 0);
813 QCOMPARE(rowsInsertedSpy.count(), 0);
814 QCOMPARE(persistentStateChangedSpy.count(), 0);
815 QCOMPARE(dataChangedSpy.count(), 0);
816 QCOMPARE(newTrackByNameInListSpy.count(), 0);
817 QCOMPARE(newEntryInListSpy.count(), 0);
818
819 auto firstTrackID = myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track6"), QStringLiteral("artist1 and artist2"),
820 QStringLiteral("album2"), 6, 1);
821 myPlayListProxyModel.enqueue({{{{DataTypes::DatabaseIdRole, firstTrackID},{DataTypes::ElementTypeRole, ElisaUtils::Track}}, {}, {}}}, {}, {});
822
823 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
824 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
825 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 1);
826 QCOMPARE(rowsRemovedSpy.count(), 0);
827 QCOMPARE(rowsMovedSpy.count(), 0);
828 QCOMPARE(rowsInsertedSpy.count(), 1);
829 QCOMPARE(persistentStateChangedSpy.count(), 1);
830 QCOMPARE(dataChangedSpy.count(), 0);
831 QCOMPARE(newTrackByNameInListSpy.count(), 0);
832 QCOMPARE(newEntryInListSpy.count(), 1);
833
834 QCOMPARE(dataChangedSpy.wait(), true);
835
836 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
837 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
838 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 1);
839 QCOMPARE(rowsRemovedSpy.count(), 0);
840 QCOMPARE(rowsMovedSpy.count(), 0);
841 QCOMPARE(rowsInsertedSpy.count(), 1);
842 QCOMPARE(persistentStateChangedSpy.count(), 1);
843 QCOMPARE(dataChangedSpy.count(), 1);
844 QCOMPARE(newTrackByNameInListSpy.count(), 0);
845 QCOMPARE(newEntryInListSpy.count(), 1);
846
847 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::TitleRole).toString(), QStringLiteral("track6"));
848 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::AlbumRole).toString(), QStringLiteral("album2"));
849 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ArtistRole).toString(), QStringLiteral("artist1 and artist2"));
850 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::TrackNumberRole).toInt(), 6);
851 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::DiscNumberRole).toInt(), 1);
852 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::DurationRole).toTime().msecsSinceStartOfDay(), 10);
853
854 auto secondTrackId = myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track1"), QStringLiteral("artist1"), QStringLiteral("album1"), 1, 1);
855 myPlayListProxyModel.enqueue({{{{DataTypes::DatabaseIdRole, secondTrackId}, {DataTypes::ElementTypeRole, ElisaUtils::Track}}, {}, {}}}, {}, {});
856
857 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
858 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
859 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 2);
860 QCOMPARE(rowsRemovedSpy.count(), 0);
861 QCOMPARE(rowsMovedSpy.count(), 0);
862 QCOMPARE(rowsInsertedSpy.count(), 2);
863 QCOMPARE(persistentStateChangedSpy.count(), 2);
864 QCOMPARE(dataChangedSpy.count(), 1);
865 QCOMPARE(newTrackByNameInListSpy.count(), 0);
866 QCOMPARE(newEntryInListSpy.count(), 2);
867
868 QCOMPARE(dataChangedSpy.wait(), true);
869
870 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
871 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
872 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 2);
873 QCOMPARE(rowsRemovedSpy.count(), 0);
874 QCOMPARE(rowsMovedSpy.count(), 0);
875 QCOMPARE(rowsInsertedSpy.count(), 2);
876 QCOMPARE(persistentStateChangedSpy.count(), 2);
877 QCOMPARE(dataChangedSpy.count(), 2);
878 QCOMPARE(newTrackByNameInListSpy.count(), 0);
879 QCOMPARE(newEntryInListSpy.count(), 2);
880
881 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::TitleRole).toString(), QStringLiteral("track1"));
882 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::AlbumRole).toString(), QStringLiteral("album1"));
883 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::ArtistRole).toString(), QStringLiteral("artist1"));
884 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::TrackNumberRole).toInt(), 1);
885 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::DiscNumberRole).toInt(), 1);
886
887 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Album},
888 {DataTypes::DatabaseIdRole, myDatabaseContent.albumIdFromTitleAndArtist(QStringLiteral("album1"), QStringLiteral("Various Artists"), QStringLiteral("/"))}},
889 QStringLiteral("album1"), {}}},
890 ElisaUtils::ReplacePlayList,
891 ElisaUtils::TriggerPlay);
892
893 QVERIFY(rowsAboutToBeInsertedSpy.wait());
894
895 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 2);
896 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
897 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 4);
898 QCOMPARE(rowsRemovedSpy.count(), 2);
899 QCOMPARE(rowsMovedSpy.count(), 0);
900 QCOMPARE(rowsInsertedSpy.count(), 4);
901 QCOMPARE(persistentStateChangedSpy.count(), 6);
902 QCOMPARE(dataChangedSpy.count(), 2);
903 QCOMPARE(newTrackByNameInListSpy.count(), 0);
904 QCOMPARE(newEntryInListSpy.count(), 3);
905
906 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::TitleRole).toString(), QStringLiteral("track1"));
907 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::AlbumRole).toString(), QStringLiteral("album1"));
908 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ArtistRole).toString(), QStringLiteral("artist1"));
909 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::TrackNumberRole).toInt(), 1);
910 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::DiscNumberRole).toInt(), 1);
911 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::DurationRole).toTime().msecsSinceStartOfDay(), 1);
912 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::TitleRole).toString(), QStringLiteral("track2"));
913 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::AlbumRole).toString(), QStringLiteral("album1"));
914 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::ArtistRole).toString(), QStringLiteral("artist2"));
915 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::TrackNumberRole).toInt(), 2);
916 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::DiscNumberRole).toInt(), 2);
917 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::DurationRole).toTime().msecsSinceStartOfDay(), 2);
918 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::TitleRole).toString(), QStringLiteral("track3"));
919 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::AlbumRole).toString(), QStringLiteral("album1"));
920 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::ArtistRole).toString(), QStringLiteral("artist3"));
921 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::TrackNumberRole).toInt(), 3);
922 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::DiscNumberRole).toInt(), 3);
923 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::DurationRole).toTime().msecsSinceStartOfDay(), 3);
924 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(3, 0), MediaPlayList::TitleRole).toString(), QStringLiteral("track4"));
925 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(3, 0), MediaPlayList::AlbumRole).toString(), QStringLiteral("album1"));
926 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(3, 0), MediaPlayList::ArtistRole).toString(), QStringLiteral("artist4"));
927 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(3, 0), MediaPlayList::TrackNumberRole).toInt(), 4);
928 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(3, 0), MediaPlayList::DiscNumberRole).toInt(), 4);
929 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(3, 0), MediaPlayList::DurationRole).toTime().msecsSinceStartOfDay(), 4);
930 }
931
removeFirstTrackOfAlbum()932 void MediaPlayListProxyModelTest::removeFirstTrackOfAlbum()
933 {
934 MediaPlayList myPlayList;
935 QAbstractItemModelTester testModel(&myPlayList);
936 MediaPlayListProxyModel myPlayListProxyModel;
937 myPlayListProxyModel.setPlayListModel(&myPlayList);
938 QAbstractItemModelTester testProxyModel(&myPlayListProxyModel);
939 DatabaseInterface myDatabaseContent;
940 TracksListener myListener(&myDatabaseContent);
941
942 QSignalSpy rowsAboutToBeMovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsAboutToBeMoved);
943 QSignalSpy rowsAboutToBeRemovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsAboutToBeRemoved);
944 QSignalSpy rowsAboutToBeInsertedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsAboutToBeInserted);
945 QSignalSpy rowsMovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsMoved);
946 QSignalSpy rowsRemovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsRemoved);
947 QSignalSpy rowsInsertedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsInserted);
948 QSignalSpy persistentStateChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::persistentStateChanged);
949 QSignalSpy dataChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::dataChanged);
950 QSignalSpy newTrackByNameInListSpy(&myPlayList, &MediaPlayList::newTrackByNameInList);
951 QSignalSpy newEntryInListSpy(&myPlayList, &MediaPlayList::newEntryInList);
952 QSignalSpy newUrlInListSpy(&myPlayList, &MediaPlayList::newUrlInList);
953
954 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
955 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
956 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 0);
957 QCOMPARE(rowsRemovedSpy.count(), 0);
958 QCOMPARE(rowsMovedSpy.count(), 0);
959 QCOMPARE(rowsInsertedSpy.count(), 0);
960 QCOMPARE(persistentStateChangedSpy.count(), 0);
961 QCOMPARE(dataChangedSpy.count(), 0);
962 QCOMPARE(newTrackByNameInListSpy.count(), 0);
963 QCOMPARE(newEntryInListSpy.count(), 0);
964
965 myDatabaseContent.init(QStringLiteral("testDbDirectContent"));
966
967 connect(&myListener, &TracksListener::trackHasChanged,
968 &myPlayList, &MediaPlayList::trackChanged,
969 Qt::QueuedConnection);
970 connect(&myListener, &TracksListener::tracksListAdded,
971 &myPlayList, &MediaPlayList::tracksListAdded,
972 Qt::QueuedConnection);
973 connect(&myPlayList, &MediaPlayList::newTrackByNameInList,
974 &myListener, &TracksListener::trackByNameInList,
975 Qt::QueuedConnection);
976 connect(&myPlayList, &MediaPlayList::newEntryInList,
977 &myListener, &TracksListener::newEntryInList,
978 Qt::QueuedConnection);
979 connect(&myPlayList, &MediaPlayList::newUrlInList,
980 &myListener, &TracksListener::newUrlInList,
981 Qt::QueuedConnection);
982 connect(&myDatabaseContent, &DatabaseInterface::tracksAdded,
983 &myListener, &TracksListener::tracksAdded);
984
985 myDatabaseContent.insertTracksList(mNewTracks, mNewCovers);
986
987 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
988 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
989 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 0);
990 QCOMPARE(rowsRemovedSpy.count(), 0);
991 QCOMPARE(rowsMovedSpy.count(), 0);
992 QCOMPARE(rowsInsertedSpy.count(), 0);
993 QCOMPARE(persistentStateChangedSpy.count(), 0);
994 QCOMPARE(dataChangedSpy.count(), 0);
995 QCOMPARE(newTrackByNameInListSpy.count(), 0);
996 QCOMPARE(newEntryInListSpy.count(), 0);
997
998 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Album},
999 {DataTypes::DatabaseIdRole, myDatabaseContent.albumIdFromTitleAndArtist(QStringLiteral("album2"), QStringLiteral("artist1"), QStringLiteral("/"))}},
1000 QStringLiteral("album2"), {}}}, {}, {});
1001
1002 QVERIFY(rowsAboutToBeInsertedSpy.wait());
1003
1004 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 1);
1005 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
1006 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 2);
1007 QCOMPARE(rowsRemovedSpy.count(), 1);
1008 QCOMPARE(rowsMovedSpy.count(), 0);
1009 QCOMPARE(rowsInsertedSpy.count(), 2);
1010 QCOMPARE(persistentStateChangedSpy.count(), 3);
1011 QCOMPARE(dataChangedSpy.count(), 0);
1012 QCOMPARE(newTrackByNameInListSpy.count(), 0);
1013 QCOMPARE(newEntryInListSpy.count(), 1);
1014
1015 myPlayListProxyModel.removeRow(0);
1016
1017 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 2);
1018 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
1019 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 2);
1020 QCOMPARE(rowsRemovedSpy.count(), 2);
1021 QCOMPARE(rowsMovedSpy.count(), 0);
1022 QCOMPARE(rowsInsertedSpy.count(), 2);
1023 QCOMPARE(persistentStateChangedSpy.count(), 4);
1024 QCOMPARE(dataChangedSpy.count(), 0);
1025 QCOMPARE(newTrackByNameInListSpy.count(), 0);
1026 QCOMPARE(newEntryInListSpy.count(), 1);
1027 }
1028
testSaveLoadPlayList()1029 void MediaPlayListProxyModelTest::testSaveLoadPlayList()
1030 {
1031 MediaPlayList myPlayListSave;
1032 MediaPlayListProxyModel myPlayListProxyModelSave;
1033 myPlayListProxyModelSave.setPlayListModel(&myPlayListSave);
1034 QAbstractItemModelTester testModelSave(&myPlayListProxyModelSave);
1035 DatabaseInterface myDatabaseContent;
1036 TracksListener myListenerSave(&myDatabaseContent);
1037 MediaPlayList myPlayListRestore;
1038 MediaPlayListProxyModel myPlayListProxyModelRestore;
1039 myPlayListProxyModelRestore.setPlayListModel(&myPlayListRestore);
1040 QAbstractItemModelTester testModelRestore(&myPlayListProxyModelRestore);
1041 TracksListener myListenerRestore(&myDatabaseContent);
1042
1043 QSignalSpy currentTrackChangedSaveSpy(&myPlayListProxyModelSave, &MediaPlayListProxyModel::currentTrackChanged);
1044 QSignalSpy shufflePlayListChangedSaveSpy(&myPlayListProxyModelSave, &MediaPlayListProxyModel::shufflePlayListChanged);
1045 QSignalSpy repeatModeChangedSaveSpy(&myPlayListProxyModelSave, &MediaPlayListProxyModel::repeatModeChanged);
1046 QSignalSpy playListFinishedSaveSpy(&myPlayListProxyModelSave, &MediaPlayListProxyModel::playListFinished);
1047 QSignalSpy playListLoadedSaveSpy(&myPlayListProxyModelSave, &MediaPlayListProxyModel::playListLoaded);
1048 QSignalSpy playListLoadFailedSaveSpy(&myPlayListProxyModelSave, &MediaPlayListProxyModel::playListLoadFailed);
1049 QSignalSpy dataChangedSaveSpy(&myPlayListProxyModelSave, &MediaPlayListProxyModel::dataChanged);
1050 QSignalSpy currentTrackChangedRestoreSpy(&myPlayListProxyModelRestore, &MediaPlayListProxyModel::currentTrackChanged);
1051 QSignalSpy shufflePlayListChangedRestoreSpy(&myPlayListProxyModelRestore, &MediaPlayListProxyModel::shufflePlayListChanged);
1052 QSignalSpy repeatModeChangedRestoreSpy(&myPlayListProxyModelRestore, &MediaPlayListProxyModel::repeatModeChanged);
1053 QSignalSpy playListFinishedRestoreSpy(&myPlayListProxyModelRestore, &MediaPlayListProxyModel::playListFinished);
1054 QSignalSpy playListLoadedRestoreSpy(&myPlayListProxyModelRestore, &MediaPlayListProxyModel::playListLoaded);
1055 QSignalSpy playListLoadFailedRestoreSpy(&myPlayListProxyModelRestore, &MediaPlayListProxyModel::playListLoadFailed);
1056
1057 myDatabaseContent.init(QStringLiteral("testDbDirectContent"));
1058
1059 connect(&myListenerSave, &TracksListener::trackHasChanged,
1060 &myPlayListSave, &MediaPlayList::trackChanged,
1061 Qt::QueuedConnection);
1062 connect(&myListenerSave, &TracksListener::tracksListAdded,
1063 &myPlayListSave, &MediaPlayList::tracksListAdded,
1064 Qt::QueuedConnection);
1065 connect(&myPlayListSave, &MediaPlayList::newTrackByNameInList,
1066 &myListenerSave, &TracksListener::trackByNameInList,
1067 Qt::QueuedConnection);
1068 connect(&myPlayListSave, &MediaPlayList::newEntryInList,
1069 &myListenerSave, &TracksListener::newEntryInList,
1070 Qt::QueuedConnection);
1071 connect(&myPlayListSave, &MediaPlayList::newUrlInList,
1072 &myListenerSave, &TracksListener::newUrlInList,
1073 Qt::QueuedConnection);
1074 connect(&myDatabaseContent, &DatabaseInterface::tracksAdded,
1075 &myListenerSave, &TracksListener::tracksAdded);
1076 connect(&myListenerRestore, &TracksListener::trackHasChanged,
1077 &myPlayListRestore, &MediaPlayList::trackChanged,
1078 Qt::QueuedConnection);
1079 connect(&myListenerRestore, &TracksListener::tracksListAdded,
1080 &myPlayListRestore, &MediaPlayList::tracksListAdded,
1081 Qt::QueuedConnection);
1082 connect(&myPlayListRestore, &MediaPlayList::newTrackByNameInList,
1083 &myListenerRestore, &TracksListener::trackByNameInList,
1084 Qt::QueuedConnection);
1085 connect(&myPlayListRestore, &MediaPlayList::newEntryInList,
1086 &myListenerRestore, &TracksListener::newEntryInList,
1087 Qt::QueuedConnection);
1088 connect(&myPlayListRestore, &MediaPlayList::newUrlInList,
1089 &myListenerRestore, &TracksListener::newUrlInList,
1090 Qt::QueuedConnection);
1091 connect(&myDatabaseContent, &DatabaseInterface::tracksAdded,
1092 &myListenerRestore, &TracksListener::tracksAdded);
1093
1094 QCOMPARE(currentTrackChangedSaveSpy.count(), 0);
1095 QCOMPARE(shufflePlayListChangedSaveSpy.count(), 0);
1096 QCOMPARE(repeatModeChangedSaveSpy.count(), 0);
1097 QCOMPARE(playListFinishedSaveSpy.count(), 0);
1098 QCOMPARE(playListLoadedSaveSpy.count(), 0);
1099 QCOMPARE(playListLoadFailedSaveSpy.count(), 0);
1100 QCOMPARE(currentTrackChangedRestoreSpy.count(), 0);
1101 QCOMPARE(shufflePlayListChangedRestoreSpy.count(), 0);
1102 QCOMPARE(repeatModeChangedRestoreSpy.count(), 0);
1103 QCOMPARE(playListFinishedRestoreSpy.count(), 0);
1104 QCOMPARE(playListLoadedRestoreSpy.count(), 0);
1105 QCOMPARE(playListLoadFailedRestoreSpy.count(), 0);
1106
1107 myDatabaseContent.insertTracksList(mNewTracks, mNewCovers);
1108
1109 QCOMPARE(currentTrackChangedSaveSpy.count(), 0);
1110 QCOMPARE(shufflePlayListChangedSaveSpy.count(), 0);
1111 QCOMPARE(repeatModeChangedSaveSpy.count(), 0);
1112 QCOMPARE(playListFinishedSaveSpy.count(), 0);
1113 QCOMPARE(playListLoadedSaveSpy.count(), 0);
1114 QCOMPARE(playListLoadFailedSaveSpy.count(), 0);
1115 QCOMPARE(currentTrackChangedRestoreSpy.count(), 0);
1116 QCOMPARE(shufflePlayListChangedRestoreSpy.count(), 0);
1117 QCOMPARE(repeatModeChangedRestoreSpy.count(), 0);
1118 QCOMPARE(playListFinishedRestoreSpy.count(), 0);
1119 QCOMPARE(playListLoadedRestoreSpy.count(), 0);
1120 QCOMPARE(playListLoadFailedRestoreSpy.count(), 0);
1121
1122 myPlayListProxyModelSave.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track},
1123 {DataTypes::DatabaseIdRole, myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track1"), QStringLiteral("artist1"), QStringLiteral("album2"), 1, 1)}},
1124 QStringLiteral("track1"), {}}}, {}, {});
1125 myPlayListProxyModelSave.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track},
1126 {DataTypes::DatabaseIdRole, myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track3"), QStringLiteral("artist3"), QStringLiteral("album1"), 3, 3)}},
1127 QStringLiteral("track3"), {}}}, {}, {});
1128 myPlayListProxyModelSave.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track},
1129 {DataTypes::DatabaseIdRole, myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track5"), QStringLiteral("artist1"), QStringLiteral("album2"), 5, 1)}},
1130 QStringLiteral("track5"), {}}}, {}, {});
1131 myPlayListProxyModelSave.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track},
1132 {DataTypes::DatabaseIdRole, myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track1"), QStringLiteral("artist1"), QStringLiteral("album1"), 1, 1)}},
1133 QStringLiteral("track1"), {}}}, {}, {});
1134
1135 QVERIFY(dataChangedSaveSpy.wait());
1136
1137 QCOMPARE(currentTrackChangedSaveSpy.count(), 1);
1138 QCOMPARE(shufflePlayListChangedSaveSpy.count(), 0);
1139 QCOMPARE(repeatModeChangedSaveSpy.count(), 0);
1140 QCOMPARE(playListFinishedSaveSpy.count(), 0);
1141 QCOMPARE(playListLoadedSaveSpy.count(), 0);
1142 QCOMPARE(playListLoadFailedSaveSpy.count(), 0);
1143 QCOMPARE(currentTrackChangedRestoreSpy.count(), 0);
1144 QCOMPARE(shufflePlayListChangedRestoreSpy.count(), 0);
1145 QCOMPARE(repeatModeChangedRestoreSpy.count(), 0);
1146 QCOMPARE(playListFinishedRestoreSpy.count(), 0);
1147 QCOMPARE(playListLoadedRestoreSpy.count(), 0);
1148 QCOMPARE(playListLoadFailedRestoreSpy.count(), 0);
1149
1150 QCOMPARE(myPlayListProxyModelSave.currentTrack(), QPersistentModelIndex(myPlayListProxyModelSave.index(0, 0)));
1151
1152 QTemporaryFile playlistFile(QStringLiteral("./myPlaylistXXXXXX.m3u8"));
1153 playlistFile.open();
1154
1155 QCOMPARE(myPlayListProxyModelSave.savePlayList(QUrl::fromLocalFile(playlistFile.fileName())), true);
1156
1157 QCOMPARE(currentTrackChangedSaveSpy.count(), 1);
1158 QCOMPARE(shufflePlayListChangedSaveSpy.count(), 0);
1159 QCOMPARE(repeatModeChangedSaveSpy.count(), 0);
1160 QCOMPARE(playListFinishedSaveSpy.count(), 0);
1161 QCOMPARE(playListLoadedSaveSpy.count(), 0);
1162 QCOMPARE(playListLoadFailedSaveSpy.count(), 0);
1163 QCOMPARE(currentTrackChangedRestoreSpy.count(), 0);
1164 QCOMPARE(shufflePlayListChangedRestoreSpy.count(), 0);
1165 QCOMPARE(repeatModeChangedRestoreSpy.count(), 0);
1166 QCOMPARE(playListFinishedRestoreSpy.count(), 0);
1167 QCOMPARE(playListLoadedRestoreSpy.count(), 0);
1168 QCOMPARE(playListLoadFailedRestoreSpy.count(), 0);
1169
1170 myPlayListProxyModelRestore.loadPlayList(QUrl::fromLocalFile(playlistFile.fileName()));
1171
1172 QCOMPARE(currentTrackChangedSaveSpy.count(), 1);
1173 QCOMPARE(shufflePlayListChangedSaveSpy.count(), 0);
1174 QCOMPARE(repeatModeChangedSaveSpy.count(), 0);
1175 QCOMPARE(playListFinishedSaveSpy.count(), 0);
1176 QCOMPARE(playListLoadedSaveSpy.count(), 0);
1177 QCOMPARE(playListLoadFailedSaveSpy.count(), 0);
1178 QCOMPARE(currentTrackChangedRestoreSpy.count(), 0);
1179 QCOMPARE(shufflePlayListChangedRestoreSpy.count(), 0);
1180 QCOMPARE(repeatModeChangedRestoreSpy.count(), 0);
1181 QCOMPARE(playListFinishedRestoreSpy.count(), 0);
1182 QCOMPARE(playListLoadedRestoreSpy.count(), 1);
1183 QCOMPARE(playListLoadFailedRestoreSpy.count(), 0);
1184
1185 QCOMPARE(currentTrackChangedRestoreSpy.wait(), true);
1186
1187 QCOMPARE(currentTrackChangedSaveSpy.count(), 1);
1188 QCOMPARE(shufflePlayListChangedSaveSpy.count(), 0);
1189 QCOMPARE(repeatModeChangedSaveSpy.count(), 0);
1190 QCOMPARE(playListFinishedSaveSpy.count(), 0);
1191 QCOMPARE(playListLoadedSaveSpy.count(), 0);
1192 QCOMPARE(playListLoadFailedSaveSpy.count(), 0);
1193 QCOMPARE(currentTrackChangedRestoreSpy.count(), 1);
1194 QCOMPARE(shufflePlayListChangedRestoreSpy.count(), 0);
1195 QCOMPARE(repeatModeChangedRestoreSpy.count(), 0);
1196 QCOMPARE(playListFinishedRestoreSpy.count(), 0);
1197 QCOMPARE(playListLoadedRestoreSpy.count(), 1);
1198 QCOMPARE(playListLoadFailedRestoreSpy.count(), 0);
1199
1200 QCOMPARE(myPlayListProxyModelRestore.currentTrack(), QPersistentModelIndex(myPlayListProxyModelRestore.index(0, 0)));
1201 }
1202
testSavePersistentState()1203 void MediaPlayListProxyModelTest::testSavePersistentState()
1204 {
1205 MediaPlayList myPlayListSave;
1206 QAbstractItemModelTester testModelSave(&myPlayListSave);
1207 MediaPlayListProxyModel myPlayListSaveProxyModel;
1208 myPlayListSaveProxyModel.setPlayListModel(&myPlayListSave);
1209 QAbstractItemModelTester testProxyModelSave(&myPlayListSaveProxyModel);
1210 DatabaseInterface myDatabaseContent;
1211 TracksListener myListenerSave(&myDatabaseContent);
1212 MediaPlayList myPlayListRead;
1213 QAbstractItemModelTester testModelRead(&myPlayListRead);
1214 MediaPlayListProxyModel myPlayListReadProxyModel;
1215 myPlayListReadProxyModel.setPlayListModel(&myPlayListRead);
1216 QAbstractItemModelTester testProxyModelRead(&myPlayListReadProxyModel);
1217 TracksListener myListenerRead(&myDatabaseContent);
1218
1219 QSignalSpy rowsAboutToBeMovedSpySave(&myPlayListSaveProxyModel, &MediaPlayListProxyModel::rowsAboutToBeMoved);
1220 QSignalSpy rowsAboutToBeRemovedSpySave(&myPlayListSaveProxyModel, &MediaPlayListProxyModel::rowsAboutToBeRemoved);
1221 QSignalSpy rowsAboutToBeInsertedSpySave(&myPlayListSaveProxyModel, &MediaPlayListProxyModel::rowsAboutToBeInserted);
1222 QSignalSpy rowsMovedSpySave(&myPlayListSaveProxyModel, &MediaPlayListProxyModel::rowsMoved);
1223 QSignalSpy rowsRemovedSpySave(&myPlayListSaveProxyModel, &MediaPlayListProxyModel::rowsRemoved);
1224 QSignalSpy rowsInsertedSpySave(&myPlayListSaveProxyModel, &MediaPlayListProxyModel::rowsInserted);
1225 QSignalSpy persistentStateChangedSpySave(&myPlayListSaveProxyModel, &MediaPlayListProxyModel::persistentStateChanged);
1226 QSignalSpy dataChangedSpySave(&myPlayListSaveProxyModel, &MediaPlayListProxyModel::dataChanged);
1227 QSignalSpy rowsAboutToBeMovedSpyRead(&myPlayListReadProxyModel, &MediaPlayListProxyModel::rowsAboutToBeMoved);
1228 QSignalSpy rowsAboutToBeRemovedSpyRead(&myPlayListReadProxyModel, &MediaPlayListProxyModel::rowsAboutToBeRemoved);
1229 QSignalSpy rowsAboutToBeInsertedSpyRead(&myPlayListReadProxyModel, &MediaPlayListProxyModel::rowsAboutToBeInserted);
1230 QSignalSpy rowsMovedSpyRead(&myPlayListReadProxyModel, &MediaPlayListProxyModel::rowsMoved);
1231 QSignalSpy rowsRemovedSpyRead(&myPlayListReadProxyModel, &MediaPlayListProxyModel::rowsRemoved);
1232 QSignalSpy rowsInsertedSpyRead(&myPlayListReadProxyModel, &MediaPlayListProxyModel::rowsInserted);
1233 QSignalSpy persistentStateChangedSpyRead(&myPlayListReadProxyModel, &MediaPlayListProxyModel::persistentStateChanged);
1234 QSignalSpy dataChangedSpyRead(&myPlayListReadProxyModel, &MediaPlayListProxyModel::dataChanged);
1235
1236 QCOMPARE(rowsAboutToBeRemovedSpySave.count(), 0);
1237 QCOMPARE(rowsAboutToBeMovedSpySave.count(), 0);
1238 QCOMPARE(rowsAboutToBeInsertedSpySave.count(), 0);
1239 QCOMPARE(rowsRemovedSpySave.count(), 0);
1240 QCOMPARE(rowsMovedSpySave.count(), 0);
1241 QCOMPARE(rowsInsertedSpySave.count(), 0);
1242 QCOMPARE(persistentStateChangedSpySave.count(), 0);
1243 QCOMPARE(dataChangedSpySave.count(), 0);
1244 QCOMPARE(rowsAboutToBeRemovedSpyRead.count(), 0);
1245 QCOMPARE(rowsAboutToBeMovedSpyRead.count(), 0);
1246 QCOMPARE(rowsAboutToBeInsertedSpyRead.count(), 0);
1247 QCOMPARE(rowsRemovedSpyRead.count(), 0);
1248 QCOMPARE(rowsMovedSpyRead.count(), 0);
1249 QCOMPARE(rowsInsertedSpyRead.count(), 0);
1250 QCOMPARE(persistentStateChangedSpyRead.count(), 0);
1251 QCOMPARE(dataChangedSpyRead.count(), 0);
1252
1253 myDatabaseContent.init(QStringLiteral("testDbDirectContent"));
1254
1255 connect(&myListenerSave, &TracksListener::trackHasChanged,
1256 &myPlayListSave, &MediaPlayList::trackChanged,
1257 Qt::QueuedConnection);
1258 connect(&myListenerSave, &TracksListener::tracksListAdded,
1259 &myPlayListSave, &MediaPlayList::tracksListAdded,
1260 Qt::QueuedConnection);
1261 connect(&myPlayListSave, &MediaPlayList::newTrackByNameInList,
1262 &myListenerSave, &TracksListener::trackByNameInList,
1263 Qt::QueuedConnection);
1264 connect(&myPlayListSave, &MediaPlayList::newEntryInList,
1265 &myListenerSave, &TracksListener::newEntryInList,
1266 Qt::QueuedConnection);
1267 connect(&myDatabaseContent, &DatabaseInterface::tracksAdded,
1268 &myListenerSave, &TracksListener::tracksAdded);
1269 connect(&myListenerRead, &TracksListener::trackHasChanged,
1270 &myPlayListRead, &MediaPlayList::trackChanged,
1271 Qt::QueuedConnection);
1272 connect(&myListenerRead, &TracksListener::tracksListAdded,
1273 &myPlayListRead, &MediaPlayList::tracksListAdded,
1274 Qt::QueuedConnection);
1275 connect(&myPlayListRead, &MediaPlayList::newTrackByNameInList,
1276 &myListenerRead, &TracksListener::trackByNameInList,
1277 Qt::QueuedConnection);
1278 connect(&myPlayListRead, &MediaPlayList::newEntryInList,
1279 &myListenerRead, &TracksListener::newEntryInList,
1280 Qt::QueuedConnection);
1281 connect(&myDatabaseContent, &DatabaseInterface::tracksAdded,
1282 &myListenerRead, &TracksListener::tracksAdded);
1283
1284 myDatabaseContent.insertTracksList(mNewTracks, mNewCovers);
1285
1286 QCOMPARE(rowsAboutToBeRemovedSpySave.count(), 0);
1287 QCOMPARE(rowsAboutToBeMovedSpySave.count(), 0);
1288 QCOMPARE(rowsAboutToBeInsertedSpySave.count(), 0);
1289 QCOMPARE(rowsRemovedSpySave.count(), 0);
1290 QCOMPARE(rowsMovedSpySave.count(), 0);
1291 QCOMPARE(rowsInsertedSpySave.count(), 0);
1292 QCOMPARE(persistentStateChangedSpySave.count(), 0);
1293 QCOMPARE(dataChangedSpySave.count(), 0);
1294 QCOMPARE(rowsAboutToBeRemovedSpyRead.count(), 0);
1295 QCOMPARE(rowsAboutToBeMovedSpyRead.count(), 0);
1296 QCOMPARE(rowsAboutToBeInsertedSpyRead.count(), 0);
1297 QCOMPARE(rowsRemovedSpyRead.count(), 0);
1298 QCOMPARE(rowsMovedSpyRead.count(), 0);
1299 QCOMPARE(rowsInsertedSpyRead.count(), 0);
1300 QCOMPARE(persistentStateChangedSpyRead.count(), 0);
1301 QCOMPARE(dataChangedSpyRead.count(), 0);
1302
1303 auto firstTrackId = myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track1"), QStringLiteral("artist2"),
1304 QStringLiteral("album3"), 1, 1);
1305 myPlayListSaveProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track},
1306 {DataTypes::DatabaseIdRole, firstTrackId}}, {}, {}}}, {}, {});
1307
1308 QCOMPARE(rowsAboutToBeRemovedSpySave.count(), 0);
1309 QCOMPARE(rowsAboutToBeMovedSpySave.count(), 0);
1310 QCOMPARE(rowsAboutToBeInsertedSpySave.count(), 1);
1311 QCOMPARE(rowsRemovedSpySave.count(), 0);
1312 QCOMPARE(rowsMovedSpySave.count(), 0);
1313 QCOMPARE(rowsInsertedSpySave.count(), 1);
1314 QCOMPARE(persistentStateChangedSpySave.count(), 1);
1315 QCOMPARE(dataChangedSpySave.count(), 0);
1316 QCOMPARE(rowsAboutToBeRemovedSpyRead.count(), 0);
1317 QCOMPARE(rowsAboutToBeMovedSpyRead.count(), 0);
1318 QCOMPARE(rowsAboutToBeInsertedSpyRead.count(), 0);
1319 QCOMPARE(rowsRemovedSpyRead.count(), 0);
1320 QCOMPARE(rowsMovedSpyRead.count(), 0);
1321 QCOMPARE(rowsInsertedSpyRead.count(), 0);
1322 QCOMPARE(persistentStateChangedSpyRead.count(), 0);
1323 QCOMPARE(dataChangedSpyRead.count(), 0);
1324
1325 QCOMPARE(dataChangedSpySave.wait(), true);
1326
1327 QCOMPARE(rowsAboutToBeRemovedSpySave.count(), 0);
1328 QCOMPARE(rowsAboutToBeMovedSpySave.count(), 0);
1329 QCOMPARE(rowsAboutToBeInsertedSpySave.count(), 1);
1330 QCOMPARE(rowsRemovedSpySave.count(), 0);
1331 QCOMPARE(rowsMovedSpySave.count(), 0);
1332 QCOMPARE(rowsInsertedSpySave.count(), 1);
1333 QCOMPARE(persistentStateChangedSpySave.count(), 1);
1334 QCOMPARE(dataChangedSpySave.count(), 1);
1335 QCOMPARE(rowsAboutToBeRemovedSpyRead.count(), 0);
1336 QCOMPARE(rowsAboutToBeMovedSpyRead.count(), 0);
1337 QCOMPARE(rowsAboutToBeInsertedSpyRead.count(), 0);
1338 QCOMPARE(rowsRemovedSpyRead.count(), 0);
1339 QCOMPARE(rowsMovedSpyRead.count(), 0);
1340 QCOMPARE(rowsInsertedSpyRead.count(), 0);
1341 QCOMPARE(persistentStateChangedSpyRead.count(), 0);
1342 QCOMPARE(dataChangedSpyRead.count(), 0);
1343
1344 auto secondTrackId = myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track1"), QStringLiteral("artist1"),
1345 QStringLiteral("album1"), 1, 1);
1346 myPlayListSaveProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track},
1347 {DataTypes::DatabaseIdRole, secondTrackId}}, {}, {}}}, {}, {});
1348
1349 QCOMPARE(rowsAboutToBeRemovedSpySave.count(), 0);
1350 QCOMPARE(rowsAboutToBeMovedSpySave.count(), 0);
1351 QCOMPARE(rowsAboutToBeInsertedSpySave.count(), 2);
1352 QCOMPARE(rowsRemovedSpySave.count(), 0);
1353 QCOMPARE(rowsMovedSpySave.count(), 0);
1354 QCOMPARE(rowsInsertedSpySave.count(), 2);
1355 QCOMPARE(persistentStateChangedSpySave.count(), 2);
1356 QCOMPARE(dataChangedSpySave.count(), 1);
1357 QCOMPARE(rowsAboutToBeRemovedSpyRead.count(), 0);
1358 QCOMPARE(rowsAboutToBeMovedSpyRead.count(), 0);
1359 QCOMPARE(rowsAboutToBeInsertedSpyRead.count(), 0);
1360 QCOMPARE(rowsRemovedSpyRead.count(), 0);
1361 QCOMPARE(rowsMovedSpyRead.count(), 0);
1362 QCOMPARE(rowsInsertedSpyRead.count(), 0);
1363 QCOMPARE(persistentStateChangedSpyRead.count(), 0);
1364 QCOMPARE(dataChangedSpyRead.count(), 0);
1365
1366 QCOMPARE(dataChangedSpySave.wait(), true);
1367
1368 QCOMPARE(rowsAboutToBeRemovedSpySave.count(), 0);
1369 QCOMPARE(rowsAboutToBeMovedSpySave.count(), 0);
1370 QCOMPARE(rowsAboutToBeInsertedSpySave.count(), 2);
1371 QCOMPARE(rowsRemovedSpySave.count(), 0);
1372 QCOMPARE(rowsMovedSpySave.count(), 0);
1373 QCOMPARE(rowsInsertedSpySave.count(), 2);
1374 QCOMPARE(persistentStateChangedSpySave.count(), 2);
1375 QCOMPARE(dataChangedSpySave.count(), 2);
1376 QCOMPARE(rowsAboutToBeRemovedSpyRead.count(), 0);
1377 QCOMPARE(rowsAboutToBeMovedSpyRead.count(), 0);
1378 QCOMPARE(rowsAboutToBeInsertedSpyRead.count(), 0);
1379 QCOMPARE(rowsRemovedSpyRead.count(), 0);
1380 QCOMPARE(rowsMovedSpyRead.count(), 0);
1381 QCOMPARE(rowsInsertedSpyRead.count(), 0);
1382 QCOMPARE(persistentStateChangedSpyRead.count(), 0);
1383 QCOMPARE(dataChangedSpyRead.count(), 0);
1384
1385 auto thirdTrackId = myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track2"), QStringLiteral("artist2"),
1386 QStringLiteral("album3"), 2, 1);
1387 myPlayListSaveProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track},
1388 {DataTypes::DatabaseIdRole, thirdTrackId}}, {}, {}}}, {}, {});
1389
1390 QCOMPARE(rowsAboutToBeRemovedSpySave.count(), 0);
1391 QCOMPARE(rowsAboutToBeMovedSpySave.count(), 0);
1392 QCOMPARE(rowsAboutToBeInsertedSpySave.count(), 3);
1393 QCOMPARE(rowsRemovedSpySave.count(), 0);
1394 QCOMPARE(rowsMovedSpySave.count(), 0);
1395 QCOMPARE(rowsInsertedSpySave.count(), 3);
1396 QCOMPARE(persistentStateChangedSpySave.count(), 3);
1397 QCOMPARE(dataChangedSpySave.count(), 2);
1398 QCOMPARE(rowsAboutToBeRemovedSpyRead.count(), 0);
1399 QCOMPARE(rowsAboutToBeMovedSpyRead.count(), 0);
1400 QCOMPARE(rowsAboutToBeInsertedSpyRead.count(), 0);
1401 QCOMPARE(rowsRemovedSpyRead.count(), 0);
1402 QCOMPARE(rowsMovedSpyRead.count(), 0);
1403 QCOMPARE(rowsInsertedSpyRead.count(), 0);
1404 QCOMPARE(persistentStateChangedSpyRead.count(), 0);
1405 QCOMPARE(dataChangedSpyRead.count(), 0);
1406
1407 QCOMPARE(dataChangedSpySave.wait(), true);
1408
1409 QCOMPARE(rowsAboutToBeRemovedSpySave.count(), 0);
1410 QCOMPARE(rowsAboutToBeMovedSpySave.count(), 0);
1411 QCOMPARE(rowsAboutToBeInsertedSpySave.count(), 3);
1412 QCOMPARE(rowsRemovedSpySave.count(), 0);
1413 QCOMPARE(rowsMovedSpySave.count(), 0);
1414 QCOMPARE(rowsInsertedSpySave.count(), 3);
1415 QCOMPARE(persistentStateChangedSpySave.count(), 3);
1416 QCOMPARE(dataChangedSpySave.count(), 3);
1417 QCOMPARE(rowsAboutToBeRemovedSpyRead.count(), 0);
1418 QCOMPARE(rowsAboutToBeMovedSpyRead.count(), 0);
1419 QCOMPARE(rowsAboutToBeInsertedSpyRead.count(), 0);
1420 QCOMPARE(rowsRemovedSpyRead.count(), 0);
1421 QCOMPARE(rowsMovedSpyRead.count(), 0);
1422 QCOMPARE(rowsInsertedSpyRead.count(), 0);
1423 QCOMPARE(persistentStateChangedSpyRead.count(), 0);
1424 QCOMPARE(dataChangedSpyRead.count(), 0);
1425
1426 QCOMPARE(myPlayListSaveProxyModel.data(myPlayListSaveProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::IsValidRole).toBool(), true);
1427 QCOMPARE(myPlayListSaveProxyModel.data(myPlayListSaveProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::TitleRole).toString(), QStringLiteral("track1"));
1428 QCOMPARE(myPlayListSaveProxyModel.data(myPlayListSaveProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::DurationRole).toTime().msecsSinceStartOfDay(), 11);
1429 QCOMPARE(myPlayListSaveProxyModel.data(myPlayListSaveProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::ArtistRole).toString(), QStringLiteral("artist2"));
1430 QCOMPARE(myPlayListSaveProxyModel.data(myPlayListSaveProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::AlbumArtistRole).toString(), QStringLiteral("artist2"));
1431 QCOMPARE(myPlayListSaveProxyModel.data(myPlayListSaveProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::AlbumRole).toString(), QStringLiteral("album3"));
1432 QCOMPARE(myPlayListSaveProxyModel.data(myPlayListSaveProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::TrackNumberRole).toInt(), 1);
1433 QCOMPARE(myPlayListSaveProxyModel.data(myPlayListSaveProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::DiscNumberRole).toInt(), 1);
1434 QCOMPARE(myPlayListSaveProxyModel.data(myPlayListSaveProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::ImageUrlRole).toUrl(), QUrl::fromLocalFile(QStringLiteral("album3")));
1435 QCOMPARE(myPlayListSaveProxyModel.data(myPlayListSaveProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::ResourceRole).toUrl(), QUrl::fromUserInput(QStringLiteral("/$11")));
1436 QCOMPARE(myPlayListSaveProxyModel.data(myPlayListSaveProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::IsPlayingRole).toBool(), false);
1437 QCOMPARE(myPlayListSaveProxyModel.data(myPlayListSaveProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::IsSingleDiscAlbumRole).toBool(), true);
1438 QCOMPARE(myPlayListSaveProxyModel.data(myPlayListSaveProxyModel.index(1, 0), MediaPlayList::ColumnsRoles::IsValidRole).toBool(), true);
1439 QCOMPARE(myPlayListSaveProxyModel.data(myPlayListSaveProxyModel.index(1, 0), MediaPlayList::ColumnsRoles::TitleRole).toString(), QStringLiteral("track1"));
1440 QCOMPARE(myPlayListSaveProxyModel.data(myPlayListSaveProxyModel.index(1, 0), MediaPlayList::ColumnsRoles::DurationRole).toTime().msecsSinceStartOfDay(), 1);
1441 QCOMPARE(myPlayListSaveProxyModel.data(myPlayListSaveProxyModel.index(1, 0), MediaPlayList::ColumnsRoles::ArtistRole).toString(), QStringLiteral("artist1"));
1442 QCOMPARE(myPlayListSaveProxyModel.data(myPlayListSaveProxyModel.index(1, 0), MediaPlayList::ColumnsRoles::AlbumArtistRole).toString(), QStringLiteral("Various Artists"));
1443 QCOMPARE(myPlayListSaveProxyModel.data(myPlayListSaveProxyModel.index(1, 0), MediaPlayList::ColumnsRoles::AlbumRole).toString(), QStringLiteral("album1"));
1444 QCOMPARE(myPlayListSaveProxyModel.data(myPlayListSaveProxyModel.index(1, 0), MediaPlayList::ColumnsRoles::TrackNumberRole).toInt(), 1);
1445 QCOMPARE(myPlayListSaveProxyModel.data(myPlayListSaveProxyModel.index(1, 0), MediaPlayList::ColumnsRoles::DiscNumberRole).toInt(), 1);
1446 QCOMPARE(myPlayListSaveProxyModel.data(myPlayListSaveProxyModel.index(1, 0), MediaPlayList::ColumnsRoles::ImageUrlRole).toUrl(), QUrl::fromLocalFile(QStringLiteral("album1")));
1447 QCOMPARE(myPlayListSaveProxyModel.data(myPlayListSaveProxyModel.index(1, 0), MediaPlayList::ColumnsRoles::ResourceRole).toUrl(), QUrl::fromUserInput(QStringLiteral("/$1")));
1448 QCOMPARE(myPlayListSaveProxyModel.data(myPlayListSaveProxyModel.index(1, 0), MediaPlayList::ColumnsRoles::IsPlayingRole).toBool(), false);
1449 QCOMPARE(myPlayListSaveProxyModel.data(myPlayListSaveProxyModel.index(1, 0), MediaPlayList::ColumnsRoles::IsSingleDiscAlbumRole).toBool(), false);
1450 QCOMPARE(myPlayListSaveProxyModel.data(myPlayListSaveProxyModel.index(2, 0), MediaPlayList::ColumnsRoles::IsValidRole).toBool(), true);
1451 QCOMPARE(myPlayListSaveProxyModel.data(myPlayListSaveProxyModel.index(2, 0), MediaPlayList::ColumnsRoles::TitleRole).toString(), QStringLiteral("track2"));
1452 QCOMPARE(myPlayListSaveProxyModel.data(myPlayListSaveProxyModel.index(2, 0), MediaPlayList::ColumnsRoles::DurationRole).toTime().msecsSinceStartOfDay(), 12);
1453 QCOMPARE(myPlayListSaveProxyModel.data(myPlayListSaveProxyModel.index(2, 0), MediaPlayList::ColumnsRoles::ArtistRole).toString(), QStringLiteral("artist2"));
1454 QCOMPARE(myPlayListSaveProxyModel.data(myPlayListSaveProxyModel.index(2, 0), MediaPlayList::ColumnsRoles::AlbumArtistRole).toString(), QStringLiteral("artist2"));
1455 QCOMPARE(myPlayListSaveProxyModel.data(myPlayListSaveProxyModel.index(2, 0), MediaPlayList::ColumnsRoles::AlbumRole).toString(), QStringLiteral("album3"));
1456 QCOMPARE(myPlayListSaveProxyModel.data(myPlayListSaveProxyModel.index(2, 0), MediaPlayList::ColumnsRoles::TrackNumberRole).toInt(), 2);
1457 QCOMPARE(myPlayListSaveProxyModel.data(myPlayListSaveProxyModel.index(2, 0), MediaPlayList::ColumnsRoles::DiscNumberRole).toInt(), 1);
1458 QCOMPARE(myPlayListSaveProxyModel.data(myPlayListSaveProxyModel.index(2, 0), MediaPlayList::ColumnsRoles::ImageUrlRole).toUrl(), QUrl::fromLocalFile(QStringLiteral("album3")));
1459 QCOMPARE(myPlayListSaveProxyModel.data(myPlayListSaveProxyModel.index(2, 0), MediaPlayList::ColumnsRoles::ResourceRole).toUrl(), QUrl::fromUserInput(QStringLiteral("/$12")));
1460 QCOMPARE(myPlayListSaveProxyModel.data(myPlayListSaveProxyModel.index(2, 0), MediaPlayList::ColumnsRoles::IsPlayingRole).toBool(), false);
1461 QCOMPARE(myPlayListSaveProxyModel.data(myPlayListSaveProxyModel.index(2, 0), MediaPlayList::ColumnsRoles::IsSingleDiscAlbumRole).toBool(), true);
1462
1463 myPlayListReadProxyModel.setPersistentState(myPlayListSaveProxyModel.persistentState());
1464
1465 QCOMPARE(dataChangedSpyRead.wait(), true);
1466
1467 QCOMPARE(rowsAboutToBeRemovedSpySave.count(), 0);
1468 QCOMPARE(rowsAboutToBeMovedSpySave.count(), 0);
1469 QCOMPARE(rowsAboutToBeInsertedSpySave.count(), 3);
1470 QCOMPARE(rowsRemovedSpySave.count(), 0);
1471 QCOMPARE(rowsMovedSpySave.count(), 0);
1472 QCOMPARE(rowsInsertedSpySave.count(), 3);
1473 QCOMPARE(persistentStateChangedSpySave.count(), 3);
1474 QCOMPARE(dataChangedSpySave.count(), 3);
1475 QCOMPARE(rowsAboutToBeRemovedSpyRead.count(), 0);
1476 QCOMPARE(rowsAboutToBeMovedSpyRead.count(), 0);
1477 QCOMPARE(rowsAboutToBeInsertedSpyRead.count(), 1);
1478 QCOMPARE(rowsRemovedSpyRead.count(), 0);
1479 QCOMPARE(rowsMovedSpyRead.count(), 0);
1480 QCOMPARE(rowsInsertedSpyRead.count(), 1);
1481 QCOMPARE(persistentStateChangedSpyRead.count(), 2);
1482 QCOMPARE(dataChangedSpyRead.count(), 3);
1483
1484 QCOMPARE(myPlayListReadProxyModel.tracksCount(), 3);
1485
1486 QCOMPARE(myPlayListReadProxyModel.data(myPlayListReadProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::IsValidRole).toBool(), true);
1487 QCOMPARE(myPlayListReadProxyModel.data(myPlayListReadProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::TitleRole).toString(), QStringLiteral("track1"));
1488 QCOMPARE(myPlayListReadProxyModel.data(myPlayListReadProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::DurationRole).toTime().msecsSinceStartOfDay(), 11);
1489 QCOMPARE(myPlayListReadProxyModel.data(myPlayListReadProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::ArtistRole).toString(), QStringLiteral("artist2"));
1490 QCOMPARE(myPlayListReadProxyModel.data(myPlayListReadProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::AlbumArtistRole).toString(), QStringLiteral("artist2"));
1491 QCOMPARE(myPlayListReadProxyModel.data(myPlayListReadProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::AlbumRole).toString(), QStringLiteral("album3"));
1492 QCOMPARE(myPlayListReadProxyModel.data(myPlayListReadProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::TrackNumberRole).toInt(), 1);
1493 QCOMPARE(myPlayListReadProxyModel.data(myPlayListReadProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::DiscNumberRole).toInt(), 1);
1494 QCOMPARE(myPlayListReadProxyModel.data(myPlayListReadProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::ImageUrlRole).toUrl(), QUrl::fromLocalFile(QStringLiteral("album3")));
1495 QCOMPARE(myPlayListReadProxyModel.data(myPlayListReadProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::ResourceRole).toUrl(), QUrl::fromUserInput(QStringLiteral("/$11")));
1496 QCOMPARE(myPlayListReadProxyModel.data(myPlayListReadProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::IsPlayingRole).toBool(), false);
1497 QCOMPARE(myPlayListReadProxyModel.data(myPlayListReadProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::IsSingleDiscAlbumRole).toBool(), true);
1498 QCOMPARE(myPlayListReadProxyModel.data(myPlayListReadProxyModel.index(1, 0), MediaPlayList::ColumnsRoles::IsValidRole).toBool(), true);
1499 QCOMPARE(myPlayListReadProxyModel.data(myPlayListReadProxyModel.index(1, 0), MediaPlayList::ColumnsRoles::TitleRole).toString(), QStringLiteral("track1"));
1500 QCOMPARE(myPlayListReadProxyModel.data(myPlayListReadProxyModel.index(1, 0), MediaPlayList::ColumnsRoles::DurationRole).toTime().msecsSinceStartOfDay(), 1);
1501 QCOMPARE(myPlayListReadProxyModel.data(myPlayListReadProxyModel.index(1, 0), MediaPlayList::ColumnsRoles::ArtistRole).toString(), QStringLiteral("artist1"));
1502 QCOMPARE(myPlayListReadProxyModel.data(myPlayListReadProxyModel.index(1, 0), MediaPlayList::ColumnsRoles::AlbumArtistRole).toString(), QStringLiteral("Various Artists"));
1503 QCOMPARE(myPlayListReadProxyModel.data(myPlayListReadProxyModel.index(1, 0), MediaPlayList::ColumnsRoles::AlbumRole).toString(), QStringLiteral("album1"));
1504 QCOMPARE(myPlayListReadProxyModel.data(myPlayListReadProxyModel.index(1, 0), MediaPlayList::ColumnsRoles::TrackNumberRole).toInt(), 1);
1505 QCOMPARE(myPlayListReadProxyModel.data(myPlayListReadProxyModel.index(1, 0), MediaPlayList::ColumnsRoles::DiscNumberRole).toInt(), 1);
1506 QCOMPARE(myPlayListReadProxyModel.data(myPlayListReadProxyModel.index(1, 0), MediaPlayList::ColumnsRoles::ImageUrlRole).toUrl(), QUrl::fromLocalFile(QStringLiteral("album1")));
1507 QCOMPARE(myPlayListReadProxyModel.data(myPlayListReadProxyModel.index(1, 0), MediaPlayList::ColumnsRoles::ResourceRole).toUrl(), QUrl::fromUserInput(QStringLiteral("/$1")));
1508 QCOMPARE(myPlayListReadProxyModel.data(myPlayListReadProxyModel.index(1, 0), MediaPlayList::ColumnsRoles::IsPlayingRole).toBool(), false);
1509 QCOMPARE(myPlayListReadProxyModel.data(myPlayListReadProxyModel.index(1, 0), MediaPlayList::ColumnsRoles::IsSingleDiscAlbumRole).toBool(), false);
1510 QCOMPARE(myPlayListReadProxyModel.data(myPlayListReadProxyModel.index(2, 0), MediaPlayList::ColumnsRoles::IsValidRole).toBool(), true);
1511 QCOMPARE(myPlayListReadProxyModel.data(myPlayListReadProxyModel.index(2, 0), MediaPlayList::ColumnsRoles::TitleRole).toString(), QStringLiteral("track2"));
1512 QCOMPARE(myPlayListReadProxyModel.data(myPlayListReadProxyModel.index(2, 0), MediaPlayList::ColumnsRoles::DurationRole).toTime().msecsSinceStartOfDay(), 12);
1513 QCOMPARE(myPlayListReadProxyModel.data(myPlayListReadProxyModel.index(2, 0), MediaPlayList::ColumnsRoles::ArtistRole).toString(), QStringLiteral("artist2"));
1514 QCOMPARE(myPlayListReadProxyModel.data(myPlayListReadProxyModel.index(2, 0), MediaPlayList::ColumnsRoles::AlbumArtistRole).toString(), QStringLiteral("artist2"));
1515 QCOMPARE(myPlayListReadProxyModel.data(myPlayListReadProxyModel.index(2, 0), MediaPlayList::ColumnsRoles::AlbumRole).toString(), QStringLiteral("album3"));
1516 QCOMPARE(myPlayListReadProxyModel.data(myPlayListReadProxyModel.index(2, 0), MediaPlayList::ColumnsRoles::TrackNumberRole).toInt(), 2);
1517 QCOMPARE(myPlayListReadProxyModel.data(myPlayListReadProxyModel.index(2, 0), MediaPlayList::ColumnsRoles::DiscNumberRole).toInt(), 1);
1518 QCOMPARE(myPlayListReadProxyModel.data(myPlayListReadProxyModel.index(2, 0), MediaPlayList::ColumnsRoles::ImageUrlRole).toUrl(), QUrl::fromLocalFile(QStringLiteral("album3")));
1519 QCOMPARE(myPlayListReadProxyModel.data(myPlayListReadProxyModel.index(2, 0), MediaPlayList::ColumnsRoles::ResourceRole).toUrl(), QUrl::fromUserInput(QStringLiteral("/$12")));
1520 QCOMPARE(myPlayListReadProxyModel.data(myPlayListReadProxyModel.index(2, 0), MediaPlayList::ColumnsRoles::IsPlayingRole).toBool(), false);
1521 QCOMPARE(myPlayListReadProxyModel.data(myPlayListReadProxyModel.index(2, 0), MediaPlayList::ColumnsRoles::IsSingleDiscAlbumRole).toBool(), true);
1522 }
1523
testRestoreSettings()1524 void MediaPlayListProxyModelTest::testRestoreSettings()
1525 {
1526 MediaPlayList myPlayListModel;
1527 MediaPlayListProxyModel myPlayList;
1528 myPlayList.setPlayListModel(&myPlayListModel);
1529 QAbstractItemModelTester testModel(&myPlayList);
1530 DatabaseInterface myDatabaseContent;
1531 TracksListener myListener(&myDatabaseContent);
1532
1533 QSignalSpy currentTrackChangedSpy(&myPlayList, &MediaPlayListProxyModel::currentTrackChanged);
1534 QSignalSpy shufflePlayListChangedSpy(&myPlayList, &MediaPlayListProxyModel::shufflePlayListChanged);
1535 QSignalSpy repeatModeChangedSpy(&myPlayList, &MediaPlayListProxyModel::repeatModeChanged);
1536 QSignalSpy playListFinishedSpy(&myPlayList, &MediaPlayListProxyModel::playListFinished);
1537 QSignalSpy dataChangedSpy(&myPlayList, &MediaPlayListProxyModel::dataChanged);
1538
1539 myDatabaseContent.init(QStringLiteral("testDbDirectContent"));
1540
1541 connect(&myListener, &TracksListener::trackHasChanged,
1542 &myPlayListModel, &MediaPlayList::trackChanged,
1543 Qt::QueuedConnection);
1544 connect(&myListener, &TracksListener::tracksListAdded,
1545 &myPlayListModel, &MediaPlayList::tracksListAdded,
1546 Qt::QueuedConnection);
1547 connect(&myPlayListModel, &MediaPlayList::newTrackByNameInList,
1548 &myListener, &TracksListener::trackByNameInList,
1549 Qt::QueuedConnection);
1550 connect(&myPlayListModel, &MediaPlayList::newEntryInList,
1551 &myListener, &TracksListener::newEntryInList,
1552 Qt::QueuedConnection);
1553 connect(&myPlayListModel, &MediaPlayList::newUrlInList,
1554 &myListener, &TracksListener::newUrlInList,
1555 Qt::QueuedConnection);
1556 connect(&myDatabaseContent, &DatabaseInterface::tracksAdded,
1557 &myListener, &TracksListener::tracksAdded);
1558
1559 myDatabaseContent.insertTracksList(mNewTracks, mNewCovers);
1560
1561 myPlayList.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track},
1562 {DataTypes::DatabaseIdRole, myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track1"), QStringLiteral("artist1"), QStringLiteral("album2"), 1, 1)}},
1563 QStringLiteral("track1"), {}}}, {}, {});
1564 myPlayList.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track},
1565 {DataTypes::DatabaseIdRole, myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track3"), QStringLiteral("artist3"), QStringLiteral("album1"), 3, 3)}},
1566 QStringLiteral("track3"), {}}}, {}, {});
1567 myPlayList.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track},
1568 {DataTypes::DatabaseIdRole, myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track5"), QStringLiteral("artist1"), QStringLiteral("album2"), 5, 1)}},
1569 QStringLiteral("track5"), {}}}, {}, {});
1570 myPlayList.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track},
1571 {DataTypes::DatabaseIdRole, myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track1"), QStringLiteral("artist1"), QStringLiteral("album2"), 1, 1)}},
1572 QStringLiteral("track1"), {}}}, {}, {});
1573
1574 QVERIFY(dataChangedSpy.wait());
1575
1576 QCOMPARE(currentTrackChangedSpy.count(), 1);
1577 QCOMPARE(shufflePlayListChangedSpy.count(), 0);
1578 QCOMPARE(repeatModeChangedSpy.count(), 0);
1579 QCOMPARE(playListFinishedSpy.count(), 0);
1580
1581 QVariantMap settings;
1582 settings[QStringLiteral("currentTrack")] = 2;
1583 settings[QStringLiteral("shufflePlayList")] = true;
1584 settings[QStringLiteral("repeatMode")] = true;
1585
1586 myPlayList.setPersistentState(settings);
1587
1588 QCOMPARE(currentTrackChangedSpy.count(), 2);
1589 QCOMPARE(shufflePlayListChangedSpy.count(), 1);
1590 QCOMPARE(repeatModeChangedSpy.count(), 1);
1591 QCOMPARE(playListFinishedSpy.count(), 0);
1592 }
1593
testSaveAndRestoreSettings()1594 void MediaPlayListProxyModelTest::testSaveAndRestoreSettings()
1595 {
1596 MediaPlayList myPlayListSave;
1597 QAbstractItemModelTester testModelSave(&myPlayListSave);
1598 MediaPlayListProxyModel myPlayListSaveProxyModel;
1599 myPlayListSaveProxyModel.setPlayListModel(&myPlayListSave);
1600 QAbstractItemModelTester testProxyModelSave(&myPlayListSaveProxyModel);
1601 DatabaseInterface myDatabaseContent;
1602 TracksListener myListenerSave(&myDatabaseContent);
1603 MediaPlayList myPlayListRestore;
1604 QAbstractItemModelTester testModelRestore(&myPlayListRestore);
1605 MediaPlayListProxyModel myPlayListRestoreProxyModel;
1606 myPlayListRestoreProxyModel.setPlayListModel(&myPlayListRestore);
1607 QAbstractItemModelTester testProxyModelRestore(&myPlayListRestoreProxyModel);
1608 TracksListener myListenerRestore(&myDatabaseContent);
1609
1610 QSignalSpy currentTrackChangedSaveSpy(&myPlayListSaveProxyModel, &MediaPlayListProxyModel::currentTrackChanged);
1611 QSignalSpy shufflePlayListChangedSaveSpy(&myPlayListSaveProxyModel, &MediaPlayListProxyModel::shufflePlayListChanged);
1612 QSignalSpy repeatModeChangedSaveSpy(&myPlayListSaveProxyModel, &MediaPlayListProxyModel::repeatModeChanged);
1613 QSignalSpy playListFinishedSaveSpy(&myPlayListSaveProxyModel, &MediaPlayListProxyModel::playListFinished);
1614 QSignalSpy dataChangedSaveSpy(&myPlayListSaveProxyModel, &MediaPlayListProxyModel::dataChanged);
1615 QSignalSpy currentTrackChangedRestoreSpy(&myPlayListRestoreProxyModel, &MediaPlayListProxyModel::currentTrackChanged);
1616 QSignalSpy shufflePlayListChangedRestoreSpy(&myPlayListRestoreProxyModel, &MediaPlayListProxyModel::shufflePlayListChanged);
1617 QSignalSpy repeatModeChangedRestoreSpy(&myPlayListRestoreProxyModel, &MediaPlayListProxyModel::repeatModeChanged);
1618 QSignalSpy playListFinishedRestoreSpy(&myPlayListRestoreProxyModel, &MediaPlayListProxyModel::playListFinished);
1619
1620 myDatabaseContent.init(QStringLiteral("testDbDirectContent"));
1621
1622 connect(&myListenerSave, &TracksListener::trackHasChanged,
1623 &myPlayListSave, &MediaPlayList::trackChanged,
1624 Qt::QueuedConnection);
1625 connect(&myListenerSave, &TracksListener::tracksListAdded,
1626 &myPlayListSave, &MediaPlayList::tracksListAdded,
1627 Qt::QueuedConnection);
1628 connect(&myPlayListSave, &MediaPlayList::newTrackByNameInList,
1629 &myListenerSave, &TracksListener::trackByNameInList,
1630 Qt::QueuedConnection);
1631 connect(&myPlayListSave, &MediaPlayList::newEntryInList,
1632 &myListenerSave, &TracksListener::newEntryInList,
1633 Qt::QueuedConnection);
1634 connect(&myDatabaseContent, &DatabaseInterface::tracksAdded,
1635 &myListenerSave, &TracksListener::tracksAdded);
1636
1637 connect(&myListenerRestore, &TracksListener::trackHasChanged,
1638 &myPlayListRestore, &MediaPlayList::trackChanged,
1639 Qt::QueuedConnection);
1640 connect(&myListenerRestore, &TracksListener::tracksListAdded,
1641 &myPlayListRestore, &MediaPlayList::tracksListAdded,
1642 Qt::QueuedConnection);
1643 connect(&myPlayListRestore, &MediaPlayList::newTrackByNameInList,
1644 &myListenerRestore, &TracksListener::trackByNameInList,
1645 Qt::QueuedConnection);
1646 connect(&myPlayListRestore, &MediaPlayList::newEntryInList,
1647 &myListenerRestore, &TracksListener::newEntryInList,
1648 Qt::QueuedConnection);
1649 connect(&myDatabaseContent, &DatabaseInterface::tracksAdded,
1650 &myListenerRestore, &TracksListener::tracksAdded);
1651
1652 QCOMPARE(currentTrackChangedSaveSpy.count(), 0);
1653 QCOMPARE(shufflePlayListChangedSaveSpy.count(), 0);
1654 QCOMPARE(repeatModeChangedSaveSpy.count(), 0);
1655 QCOMPARE(playListFinishedSaveSpy.count(), 0);
1656 QCOMPARE(currentTrackChangedRestoreSpy.count(), 0);
1657 QCOMPARE(shufflePlayListChangedRestoreSpy.count(), 0);
1658 QCOMPARE(repeatModeChangedRestoreSpy.count(), 0);
1659 QCOMPARE(playListFinishedRestoreSpy.count(), 0);
1660
1661 QCOMPARE(currentTrackChangedSaveSpy.count(), 0);
1662 QCOMPARE(shufflePlayListChangedSaveSpy.count(), 0);
1663 QCOMPARE(repeatModeChangedSaveSpy.count(), 0);
1664 QCOMPARE(playListFinishedSaveSpy.count(), 0);
1665 QCOMPARE(currentTrackChangedRestoreSpy.count(), 0);
1666 QCOMPARE(shufflePlayListChangedRestoreSpy.count(), 0);
1667 QCOMPARE(repeatModeChangedRestoreSpy.count(), 0);
1668 QCOMPARE(playListFinishedRestoreSpy.count(), 0);
1669
1670 myDatabaseContent.insertTracksList(mNewTracks, mNewCovers);
1671
1672 QCOMPARE(currentTrackChangedSaveSpy.count(), 0);
1673 QCOMPARE(shufflePlayListChangedSaveSpy.count(), 0);
1674 QCOMPARE(repeatModeChangedSaveSpy.count(), 0);
1675 QCOMPARE(playListFinishedSaveSpy.count(), 0);
1676 QCOMPARE(currentTrackChangedRestoreSpy.count(), 0);
1677 QCOMPARE(shufflePlayListChangedRestoreSpy.count(), 0);
1678 QCOMPARE(repeatModeChangedRestoreSpy.count(), 0);
1679 QCOMPARE(playListFinishedRestoreSpy.count(), 0);
1680
1681 myPlayListSaveProxyModel.setRepeatMode(MediaPlayListProxyModel::Repeat::Playlist);
1682
1683 QCOMPARE(currentTrackChangedSaveSpy.count(), 0);
1684 QCOMPARE(shufflePlayListChangedSaveSpy.count(), 0);
1685 QCOMPARE(repeatModeChangedSaveSpy.count(), 1);
1686 QCOMPARE(playListFinishedSaveSpy.count(), 0);
1687 QCOMPARE(currentTrackChangedRestoreSpy.count(), 0);
1688 QCOMPARE(shufflePlayListChangedRestoreSpy.count(), 0);
1689 QCOMPARE(repeatModeChangedRestoreSpy.count(), 0);
1690 QCOMPARE(playListFinishedRestoreSpy.count(), 0);
1691
1692 myPlayListSaveProxyModel.setShufflePlayList(true);
1693
1694 QCOMPARE(currentTrackChangedSaveSpy.count(), 0);
1695 QCOMPARE(shufflePlayListChangedSaveSpy.count(), 1);
1696 QCOMPARE(repeatModeChangedSaveSpy.count(), 1);
1697 QCOMPARE(playListFinishedSaveSpy.count(), 0);
1698 QCOMPARE(currentTrackChangedRestoreSpy.count(), 0);
1699 QCOMPARE(shufflePlayListChangedRestoreSpy.count(), 0);
1700 QCOMPARE(repeatModeChangedRestoreSpy.count(), 0);
1701 QCOMPARE(playListFinishedRestoreSpy.count(), 0);
1702
1703 myPlayListSaveProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track},
1704 {DataTypes::DatabaseIdRole, myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track1"), QStringLiteral("artist1"), QStringLiteral("album2"), 1, 1)}},
1705 QStringLiteral("track1"), {}}}, {}, {});
1706 myPlayListSaveProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track},
1707 {DataTypes::DatabaseIdRole, myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track3"), QStringLiteral("artist3"), QStringLiteral("album1"), 3, 3)}},
1708 QStringLiteral("track3"), {}}}, {}, {});
1709 myPlayListSaveProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track},
1710 {DataTypes::DatabaseIdRole, myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track5"), QStringLiteral("artist1"), QStringLiteral("album2"), 5, 1)}},
1711 QStringLiteral("track5"), {}}}, {}, {});
1712 myPlayListSaveProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track},
1713 {DataTypes::DatabaseIdRole, myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track1"), QStringLiteral("artist1"), QStringLiteral("album1"), 1, 1)}},
1714 QStringLiteral("track1"), {}}}, {}, {});
1715
1716 QVERIFY(dataChangedSaveSpy.wait());
1717
1718 QCOMPARE(currentTrackChangedSaveSpy.count(), 1);
1719 QCOMPARE(shufflePlayListChangedSaveSpy.count(), 1);
1720 QCOMPARE(repeatModeChangedSaveSpy.count(), 1);
1721 QCOMPARE(playListFinishedSaveSpy.count(), 0);
1722 QCOMPARE(currentTrackChangedRestoreSpy.count(), 0);
1723 QCOMPARE(shufflePlayListChangedRestoreSpy.count(), 0);
1724 QCOMPARE(repeatModeChangedRestoreSpy.count(), 0);
1725 QCOMPARE(playListFinishedRestoreSpy.count(), 0);
1726
1727 QCOMPARE(myPlayListSaveProxyModel.currentTrack(), QPersistentModelIndex(myPlayListSaveProxyModel.index(0, 0)));
1728
1729 myPlayListSaveProxyModel.skipNextTrack();
1730
1731 QCOMPARE(currentTrackChangedSaveSpy.count(), 2);
1732 QCOMPARE(shufflePlayListChangedSaveSpy.count(), 1);
1733 QCOMPARE(repeatModeChangedSaveSpy.count(), 1);
1734 QCOMPARE(playListFinishedSaveSpy.count(), 0);
1735 QCOMPARE(currentTrackChangedRestoreSpy.count(), 0);
1736 QCOMPARE(shufflePlayListChangedRestoreSpy.count(), 0);
1737 QCOMPARE(repeatModeChangedRestoreSpy.count(), 0);
1738 QCOMPARE(playListFinishedRestoreSpy.count(), 0);
1739
1740 myPlayListSaveProxyModel.skipNextTrack();
1741
1742 QCOMPARE(currentTrackChangedSaveSpy.count(), 3);
1743 QCOMPARE(shufflePlayListChangedSaveSpy.count(), 1);
1744 QCOMPARE(repeatModeChangedSaveSpy.count(), 1);
1745 QCOMPARE(playListFinishedSaveSpy.count(), 0);
1746 QCOMPARE(currentTrackChangedRestoreSpy.count(), 0);
1747 QCOMPARE(shufflePlayListChangedRestoreSpy.count(), 0);
1748 QCOMPARE(repeatModeChangedRestoreSpy.count(), 0);
1749 QCOMPARE(playListFinishedRestoreSpy.count(), 0);
1750
1751 myPlayListRestoreProxyModel.setPersistentState(myPlayListSaveProxyModel.persistentState());
1752
1753 QCOMPARE(currentTrackChangedSaveSpy.count(), 3);
1754 QCOMPARE(shufflePlayListChangedSaveSpy.count(), 1);
1755 QCOMPARE(repeatModeChangedSaveSpy.count(), 1);
1756 QCOMPARE(playListFinishedSaveSpy.count(), 0);
1757 QCOMPARE(currentTrackChangedRestoreSpy.count(), 1);
1758 QCOMPARE(shufflePlayListChangedRestoreSpy.count(), 1);
1759 QCOMPARE(repeatModeChangedRestoreSpy.count(), 1);
1760 QCOMPARE(playListFinishedRestoreSpy.count(), 0);
1761
1762 QCOMPARE(myPlayListRestoreProxyModel.repeatMode(), MediaPlayListProxyModel::Repeat::Playlist);
1763 QCOMPARE(myPlayListRestoreProxyModel.shufflePlayList(), true);
1764 }
1765
shufflePlayList()1766 void MediaPlayListProxyModelTest::shufflePlayList()
1767 {
1768 MediaPlayList myPlayList;
1769 QAbstractItemModelTester testModel(&myPlayList);
1770 MediaPlayListProxyModel myPlayListProxyModel;
1771 myPlayListProxyModel.setPlayListModel(&myPlayList);
1772 QAbstractItemModelTester testProxyModel(&myPlayListProxyModel);
1773 DatabaseInterface myDatabaseContent;
1774 TracksListener myListener(&myDatabaseContent);
1775
1776 QSignalSpy currentTrackChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::currentTrackChanged);
1777 QSignalSpy shufflePlayListChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::shufflePlayListChanged);
1778 QSignalSpy repeatModeChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::repeatModeChanged);
1779 QSignalSpy playListFinishedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::playListFinished);
1780
1781 myDatabaseContent.init(QStringLiteral("testDbDirectContent"));
1782
1783 connect(&myListener, &TracksListener::trackHasChanged,
1784 &myPlayList, &MediaPlayList::trackChanged,
1785 Qt::QueuedConnection);
1786 connect(&myListener, &TracksListener::tracksListAdded,
1787 &myPlayList, &MediaPlayList::tracksListAdded,
1788 Qt::QueuedConnection);
1789 connect(&myPlayList, &MediaPlayList::newTrackByNameInList,
1790 &myListener, &TracksListener::trackByNameInList,
1791 Qt::QueuedConnection);
1792 connect(&myPlayList, &MediaPlayList::newEntryInList,
1793 &myListener, &TracksListener::newEntryInList,
1794 Qt::QueuedConnection);
1795 connect(&myPlayList, &MediaPlayList::newUrlInList,
1796 &myListener, &TracksListener::newUrlInList,
1797 Qt::QueuedConnection);
1798 connect(&myDatabaseContent, &DatabaseInterface::tracksAdded,
1799 &myListener, &TracksListener::tracksAdded);
1800
1801 myDatabaseContent.insertTracksList(mNewTracks, mNewCovers);
1802
1803 QCOMPARE(currentTrackChangedSpy.count(), 0);
1804 QCOMPARE(shufflePlayListChangedSpy.count(), 0);
1805 QCOMPARE(repeatModeChangedSpy.count(), 0);
1806 QCOMPARE(playListFinishedSpy.count(), 0);
1807
1808 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track},
1809 {DataTypes::DatabaseIdRole, myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track1"), QStringLiteral("artist1"), QStringLiteral("album2"), 1, 1)}},
1810 QStringLiteral("track1"), {}}}, {}, {});
1811 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track},
1812 {DataTypes::DatabaseIdRole, myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track3"), QStringLiteral("artist3"), QStringLiteral("album1"), 3, 3)}},
1813 QStringLiteral("track3"), {}}}, {}, {});
1814 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track},
1815 {DataTypes::DatabaseIdRole, myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track5"), QStringLiteral("artist1"), QStringLiteral("album2"), 5, 1)}},
1816 QStringLiteral("track5"), {}}}, {}, {});
1817 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track},
1818 {DataTypes::DatabaseIdRole, myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track1"), QStringLiteral("artist1"), QStringLiteral("album2"), 1, 1)}},
1819 QStringLiteral("track1"), {}}}, {}, {});
1820
1821 QCOMPARE(currentTrackChangedSpy.count(), 1);
1822 QCOMPARE(shufflePlayListChangedSpy.count(), 0);
1823 QCOMPARE(repeatModeChangedSpy.count(), 0);
1824 QCOMPARE(playListFinishedSpy.count(), 0);
1825
1826 QCOMPARE(myPlayListProxyModel.currentTrack(), QPersistentModelIndex(myPlayListProxyModel.index(0, 0)));
1827
1828 myPlayListProxyModel.setRepeatMode(MediaPlayListProxyModel::Repeat::Playlist);
1829 myPlayListProxyModel.setShufflePlayList(true);
1830
1831 QCOMPARE(currentTrackChangedSpy.count(), 1);
1832 QCOMPARE(shufflePlayListChangedSpy.count(), 1);
1833 QCOMPARE(repeatModeChangedSpy.count(), 1);
1834 QCOMPARE(playListFinishedSpy.count(), 0);
1835
1836 QCOMPARE(myPlayListProxyModel.shufflePlayList(), true);
1837
1838 myPlayListProxyModel.skipNextTrack();
1839
1840 QCOMPARE(currentTrackChangedSpy.count(), 2);
1841 QCOMPARE(shufflePlayListChangedSpy.count(), 1);
1842 QCOMPARE(repeatModeChangedSpy.count(), 1);
1843 QCOMPARE(playListFinishedSpy.count(), 0);
1844
1845 myPlayListProxyModel.skipNextTrack();
1846
1847 QCOMPARE(currentTrackChangedSpy.count(), 3);
1848 QCOMPARE(shufflePlayListChangedSpy.count(), 1);
1849 QCOMPARE(repeatModeChangedSpy.count(), 1);
1850 QCOMPARE(playListFinishedSpy.count(), 0);
1851
1852 myPlayListProxyModel.skipNextTrack();
1853
1854 QCOMPARE(currentTrackChangedSpy.count(), 4);
1855 QCOMPARE(shufflePlayListChangedSpy.count(), 1);
1856 QCOMPARE(repeatModeChangedSpy.count(), 1);
1857 QCOMPARE(playListFinishedSpy.count(), 0);
1858
1859 myPlayListProxyModel.skipNextTrack();
1860
1861 QCOMPARE(currentTrackChangedSpy.count(), 5);
1862 QCOMPARE(shufflePlayListChangedSpy.count(), 1);
1863 QCOMPARE(repeatModeChangedSpy.count(), 1);
1864 QCOMPARE(playListFinishedSpy.count(), 0);
1865 }
1866
testShuffleMode()1867 void MediaPlayListProxyModelTest::testShuffleMode()
1868 {
1869 MediaPlayList myPlayList;
1870 QAbstractItemModelTester testModel(&myPlayList);
1871 MediaPlayListProxyModel myPlayListProxyModel;
1872 myPlayListProxyModel.setPlayListModel(&myPlayList);
1873 QAbstractItemModelTester testProxyModel(&myPlayListProxyModel);
1874 DatabaseInterface myDatabaseContent;
1875 TracksListener myListener(&myDatabaseContent);
1876
1877 QSignalSpy currentTrackChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::currentTrackChanged);
1878 QSignalSpy shufflePlayListChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::shufflePlayListChanged);
1879 QSignalSpy repeatModeChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::repeatModeChanged);
1880 QSignalSpy playListFinishedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::playListFinished);
1881
1882 myDatabaseContent.init(QStringLiteral("testDbDirectContent"));
1883
1884 connect(&myListener, &TracksListener::trackHasChanged,
1885 &myPlayList, &MediaPlayList::trackChanged,
1886 Qt::QueuedConnection);
1887 connect(&myListener, &TracksListener::tracksListAdded,
1888 &myPlayList, &MediaPlayList::tracksListAdded,
1889 Qt::QueuedConnection);
1890 connect(&myPlayList, &MediaPlayList::newTrackByNameInList,
1891 &myListener, &TracksListener::trackByNameInList,
1892 Qt::QueuedConnection);
1893 connect(&myPlayList, &MediaPlayList::newEntryInList,
1894 &myListener, &TracksListener::newEntryInList,
1895 Qt::QueuedConnection);
1896 connect(&myPlayList, &MediaPlayList::newUrlInList,
1897 &myListener, &TracksListener::newUrlInList,
1898 Qt::QueuedConnection);
1899 connect(&myDatabaseContent, &DatabaseInterface::tracksAdded,
1900 &myListener, &TracksListener::tracksAdded);
1901
1902 myDatabaseContent.insertTracksList(mNewTracks, mNewCovers);
1903
1904 QCOMPARE(currentTrackChangedSpy.count(), 0);
1905 QCOMPARE(shufflePlayListChangedSpy.count(), 0);
1906 QCOMPARE(repeatModeChangedSpy.count(), 0);
1907 QCOMPARE(playListFinishedSpy.count(), 0);
1908
1909 myPlayListProxyModel.setRepeatMode(MediaPlayListProxyModel::Repeat::Playlist);
1910 myPlayListProxyModel.setShufflePlayList(true);
1911
1912 QCOMPARE(currentTrackChangedSpy.count(), 0);
1913 QCOMPARE(shufflePlayListChangedSpy.count(), 1);
1914 QCOMPARE(repeatModeChangedSpy.count(), 1);
1915 QCOMPARE(playListFinishedSpy.count(), 0);
1916
1917 QCOMPARE(myPlayListProxyModel.shufflePlayList(), true);
1918 QCOMPARE(myPlayListProxyModel.repeatMode(), MediaPlayListProxyModel::Repeat::Playlist);
1919
1920 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track},
1921 {DataTypes::DatabaseIdRole, myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track1"), QStringLiteral("artist1"), QStringLiteral("album2"), 1, 1)}},
1922 QStringLiteral("track1"), {}}}, {}, {});
1923 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track},
1924 {DataTypes::DatabaseIdRole, myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track3"), QStringLiteral("artist3"), QStringLiteral("album1"), 3, 3)}},
1925 QStringLiteral("track3"), {}}}, {}, {});
1926 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track},
1927 {DataTypes::DatabaseIdRole, myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track5"), QStringLiteral("artist1"), QStringLiteral("album2"), 5, 1)}},
1928 QStringLiteral("track5"), {}}}, {}, {});
1929 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track},
1930 {DataTypes::DatabaseIdRole, myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track1"), QStringLiteral("artist1"), QStringLiteral("album2"), 1, 1)}},
1931 QStringLiteral("track1"), {}}}, {}, {});
1932
1933 QCOMPARE(currentTrackChangedSpy.count(), 1);
1934 QCOMPARE(shufflePlayListChangedSpy.count(), 1);
1935 QCOMPARE(repeatModeChangedSpy.count(), 1);
1936 QCOMPARE(playListFinishedSpy.count(), 0);
1937
1938 QCOMPARE(myPlayListProxyModel.currentTrack(), QPersistentModelIndex(myPlayListProxyModel.index(0, 0)));
1939
1940 QCOMPARE(currentTrackChangedSpy.count(), 1);
1941 QCOMPARE(shufflePlayListChangedSpy.count(), 1);
1942 QCOMPARE(repeatModeChangedSpy.count(), 1);
1943 QCOMPARE(playListFinishedSpy.count(), 0);
1944
1945 myPlayListProxyModel.skipNextTrack();
1946
1947 QCOMPARE(currentTrackChangedSpy.count(), 2);
1948 QCOMPARE(shufflePlayListChangedSpy.count(), 1);
1949 QCOMPARE(repeatModeChangedSpy.count(), 1);
1950 QCOMPARE(playListFinishedSpy.count(), 0);
1951
1952 myPlayListProxyModel.skipNextTrack();
1953
1954 QCOMPARE(currentTrackChangedSpy.count(), 3);
1955 QCOMPARE(shufflePlayListChangedSpy.count(), 1);
1956 QCOMPARE(repeatModeChangedSpy.count(), 1);
1957 QCOMPARE(playListFinishedSpy.count(), 0);
1958
1959 myPlayListProxyModel.skipNextTrack();
1960
1961 QCOMPARE(currentTrackChangedSpy.count(), 4);
1962 QCOMPARE(shufflePlayListChangedSpy.count(), 1);
1963 QCOMPARE(repeatModeChangedSpy.count(), 1);
1964 QCOMPARE(playListFinishedSpy.count(), 0);
1965
1966 myPlayListProxyModel.skipPreviousTrack(0);
1967
1968 QCOMPARE(currentTrackChangedSpy.count(), 5);
1969 QCOMPARE(shufflePlayListChangedSpy.count(), 1);
1970 QCOMPARE(repeatModeChangedSpy.count(), 1);
1971 QCOMPARE(playListFinishedSpy.count(), 0);
1972
1973 myPlayListProxyModel.removeRow(1);
1974 }
1975
randomAndContinuePlayList()1976 void MediaPlayListProxyModelTest::randomAndContinuePlayList()
1977 {
1978 MediaPlayList myPlayList;
1979 QAbstractItemModelTester testModel(&myPlayList);
1980 MediaPlayListProxyModel myPlayListProxyModel;
1981 myPlayListProxyModel.setPlayListModel(&myPlayList);
1982 QAbstractItemModelTester testProxyModel(&myPlayListProxyModel);
1983 DatabaseInterface myDatabaseContent;
1984 TracksListener myListener(&myDatabaseContent);
1985
1986 QSignalSpy currentTrackChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::currentTrackChanged);
1987 QSignalSpy shufflePlayListChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::shufflePlayListChanged);
1988 QSignalSpy repeatModeChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::repeatModeChanged);
1989 QSignalSpy playListFinishedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::playListFinished);
1990
1991 myDatabaseContent.init(QStringLiteral("testDbDirectContent"));
1992
1993 connect(&myListener, &TracksListener::trackHasChanged,
1994 &myPlayList, &MediaPlayList::trackChanged,
1995 Qt::QueuedConnection);
1996 connect(&myListener, &TracksListener::tracksListAdded,
1997 &myPlayList, &MediaPlayList::tracksListAdded,
1998 Qt::QueuedConnection);
1999 connect(&myPlayList, &MediaPlayList::newTrackByNameInList,
2000 &myListener, &TracksListener::trackByNameInList,
2001 Qt::QueuedConnection);
2002 connect(&myPlayList, &MediaPlayList::newEntryInList,
2003 &myListener, &TracksListener::newEntryInList,
2004 Qt::QueuedConnection);
2005 connect(&myPlayList, &MediaPlayList::newUrlInList,
2006 &myListener, &TracksListener::newUrlInList,
2007 Qt::QueuedConnection);
2008 connect(&myDatabaseContent, &DatabaseInterface::tracksAdded,
2009 &myListener, &TracksListener::tracksAdded);
2010
2011 myDatabaseContent.insertTracksList(mNewTracks, mNewCovers);
2012
2013 QCOMPARE(currentTrackChangedSpy.count(), 0);
2014 QCOMPARE(shufflePlayListChangedSpy.count(), 0);
2015 QCOMPARE(repeatModeChangedSpy.count(), 0);
2016 QCOMPARE(playListFinishedSpy.count(), 0);
2017
2018 QCOMPARE(currentTrackChangedSpy.count(), 0);
2019 QCOMPARE(shufflePlayListChangedSpy.count(), 0);
2020 QCOMPARE(repeatModeChangedSpy.count(), 0);
2021 QCOMPARE(playListFinishedSpy.count(), 0);
2022
2023 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track},
2024 {DataTypes::DatabaseIdRole, myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track1"), QStringLiteral("artist1"), QStringLiteral("album2"), 1, 1)}},
2025 QStringLiteral("track1"), {}}}, {}, {});
2026 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track},
2027 {DataTypes::DatabaseIdRole, myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track3"), QStringLiteral("artist3"), QStringLiteral("album1"), 3, 3)}},
2028 QStringLiteral("track3"), {}}}, {}, {});
2029 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track},
2030 {DataTypes::DatabaseIdRole, myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track5"), QStringLiteral("artist1"), QStringLiteral("album2"), 5, 1)}},
2031 QStringLiteral("track5"), {}}}, {}, {});
2032 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track},
2033 {DataTypes::DatabaseIdRole, myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track1"), QStringLiteral("artist1"), QStringLiteral("album2"), 1, 1)}},
2034 QStringLiteral("track1"), {}}}, {}, {});
2035
2036 QCOMPARE(currentTrackChangedSpy.count(), 1);
2037 QCOMPARE(shufflePlayListChangedSpy.count(), 0);
2038 QCOMPARE(repeatModeChangedSpy.count(), 0);
2039 QCOMPARE(playListFinishedSpy.count(), 0);
2040
2041 QCOMPARE(myPlayListProxyModel.currentTrack(), QPersistentModelIndex(myPlayListProxyModel.index(0, 0)));
2042
2043 myPlayListProxyModel.setShufflePlayList(true);
2044
2045 QCOMPARE(currentTrackChangedSpy.count(), 1);
2046 QCOMPARE(shufflePlayListChangedSpy.count(), 1);
2047 QCOMPARE(repeatModeChangedSpy.count(), 0);
2048 QCOMPARE(playListFinishedSpy.count(), 0);
2049
2050 QCOMPARE(myPlayListProxyModel.shufflePlayList(), true);
2051
2052 myPlayListProxyModel.setRepeatMode(MediaPlayListProxyModel::Repeat::Playlist);
2053
2054 QCOMPARE(currentTrackChangedSpy.count(), 1);
2055 QCOMPARE(shufflePlayListChangedSpy.count(), 1);
2056 QCOMPARE(repeatModeChangedSpy.count(), 1);
2057 QCOMPARE(playListFinishedSpy.count(), 0);
2058
2059 QCOMPARE(myPlayListProxyModel.repeatMode(), MediaPlayListProxyModel::Repeat::Playlist);
2060
2061 myPlayListProxyModel.switchTo(3);
2062
2063 QCOMPARE(currentTrackChangedSpy.count(), 2);
2064 QCOMPARE(shufflePlayListChangedSpy.count(), 1);
2065 QCOMPARE(repeatModeChangedSpy.count(), 1);
2066 QCOMPARE(playListFinishedSpy.count(), 0);
2067
2068 QCOMPARE(myPlayListProxyModel.currentTrack(), QPersistentModelIndex(myPlayListProxyModel.index(3, 0)));
2069
2070 myPlayListProxyModel.skipNextTrack();
2071
2072 QCOMPARE(currentTrackChangedSpy.count(), 3);
2073 QCOMPARE(shufflePlayListChangedSpy.count(), 1);
2074 QCOMPARE(repeatModeChangedSpy.count(), 1);
2075 QCOMPARE(playListFinishedSpy.count(), 0);
2076
2077 myPlayListProxyModel.skipNextTrack();
2078
2079 QCOMPARE(currentTrackChangedSpy.count(), 4);
2080 QCOMPARE(shufflePlayListChangedSpy.count(), 1);
2081 QCOMPARE(repeatModeChangedSpy.count(), 1);
2082 QCOMPARE(playListFinishedSpy.count(), 0);
2083
2084 myPlayListProxyModel.skipNextTrack();
2085
2086 QCOMPARE(currentTrackChangedSpy.count(), 5);
2087 QCOMPARE(shufflePlayListChangedSpy.count(), 1);
2088 QCOMPARE(repeatModeChangedSpy.count(), 1);
2089 QCOMPARE(playListFinishedSpy.count(), 0);
2090 }
2091
continuePlayList()2092 void MediaPlayListProxyModelTest::continuePlayList()
2093 {
2094 MediaPlayList myPlayList;
2095 QAbstractItemModelTester testModel(&myPlayList);
2096 MediaPlayListProxyModel myPlayListProxyModel;
2097 myPlayListProxyModel.setPlayListModel(&myPlayList);
2098 QAbstractItemModelTester testProxyModel(&myPlayListProxyModel);
2099 DatabaseInterface myDatabaseContent;
2100 TracksListener myListener(&myDatabaseContent);
2101
2102 QSignalSpy currentTrackChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::currentTrackChanged);
2103 QSignalSpy shufflePlayListChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::shufflePlayListChanged);
2104 QSignalSpy repeatModeChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::repeatModeChanged);
2105 QSignalSpy playListFinishedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::playListFinished);
2106
2107 myDatabaseContent.init(QStringLiteral("testDbDirectContent"));
2108
2109 connect(&myListener, &TracksListener::trackHasChanged,
2110 &myPlayList, &MediaPlayList::trackChanged,
2111 Qt::QueuedConnection);
2112 connect(&myListener, &TracksListener::tracksListAdded,
2113 &myPlayList, &MediaPlayList::tracksListAdded,
2114 Qt::QueuedConnection);
2115 connect(&myPlayList, &MediaPlayList::newTrackByNameInList,
2116 &myListener, &TracksListener::trackByNameInList,
2117 Qt::QueuedConnection);
2118 connect(&myPlayList, &MediaPlayList::newEntryInList,
2119 &myListener, &TracksListener::newEntryInList,
2120 Qt::QueuedConnection);
2121 connect(&myPlayList, &MediaPlayList::newUrlInList,
2122 &myListener, &TracksListener::newUrlInList,
2123 Qt::QueuedConnection);
2124 connect(&myDatabaseContent, &DatabaseInterface::tracksAdded,
2125 &myListener, &TracksListener::tracksAdded);
2126
2127 myDatabaseContent.insertTracksList(mNewTracks, mNewCovers);
2128
2129 QCOMPARE(currentTrackChangedSpy.count(), 0);
2130 QCOMPARE(shufflePlayListChangedSpy.count(), 0);
2131 QCOMPARE(repeatModeChangedSpy.count(), 0);
2132 QCOMPARE(playListFinishedSpy.count(), 0);
2133
2134 QCOMPARE(currentTrackChangedSpy.count(), 0);
2135 QCOMPARE(shufflePlayListChangedSpy.count(), 0);
2136 QCOMPARE(repeatModeChangedSpy.count(), 0);
2137 QCOMPARE(playListFinishedSpy.count(), 0);
2138
2139 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track},
2140 {DataTypes::DatabaseIdRole, myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track1"), QStringLiteral("artist1"), QStringLiteral("album2"), 1, 1)}},
2141 QStringLiteral("track1"), {}}}, {}, {});
2142 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track},
2143 {DataTypes::DatabaseIdRole, myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track3"), QStringLiteral("artist3"), QStringLiteral("album1"), 3, 3)}},
2144 QStringLiteral("track3"), {}}}, {}, {});
2145 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track},
2146 {DataTypes::DatabaseIdRole, myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track5"), QStringLiteral("artist1"), QStringLiteral("album2"), 5, 1)}},
2147 QStringLiteral("track5"), {}}}, {}, {});
2148 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track},
2149 {DataTypes::DatabaseIdRole, myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track1"), QStringLiteral("artist1"), QStringLiteral("album2"), 1, 1)}},
2150 QStringLiteral("track1"), {}}}, {}, {});
2151
2152 QCOMPARE(currentTrackChangedSpy.count(), 1);
2153 QCOMPARE(shufflePlayListChangedSpy.count(), 0);
2154 QCOMPARE(repeatModeChangedSpy.count(), 0);
2155 QCOMPARE(playListFinishedSpy.count(), 0);
2156
2157 QCOMPARE(myPlayListProxyModel.currentTrack(), QPersistentModelIndex(myPlayListProxyModel.index(0, 0)));
2158
2159 myPlayListProxyModel.setRepeatMode(MediaPlayListProxyModel::Repeat::Playlist);
2160
2161 QCOMPARE(currentTrackChangedSpy.count(), 1);
2162 QCOMPARE(shufflePlayListChangedSpy.count(), 0);
2163 QCOMPARE(repeatModeChangedSpy.count(), 1);
2164 QCOMPARE(playListFinishedSpy.count(), 0);
2165
2166 QCOMPARE(myPlayListProxyModel.repeatMode(), MediaPlayListProxyModel::Repeat::Playlist);
2167
2168 myPlayListProxyModel.skipNextTrack();
2169
2170 QCOMPARE(currentTrackChangedSpy.count(), 2);
2171 QCOMPARE(shufflePlayListChangedSpy.count(), 0);
2172 QCOMPARE(repeatModeChangedSpy.count(), 1);
2173 QCOMPARE(playListFinishedSpy.count(), 0);
2174
2175 QCOMPARE(myPlayListProxyModel.currentTrack(), QPersistentModelIndex(myPlayListProxyModel.index(1, 0)));
2176
2177 myPlayListProxyModel.skipNextTrack();
2178
2179 QCOMPARE(currentTrackChangedSpy.count(), 3);
2180 QCOMPARE(shufflePlayListChangedSpy.count(), 0);
2181 QCOMPARE(repeatModeChangedSpy.count(), 1);
2182 QCOMPARE(playListFinishedSpy.count(), 0);
2183
2184 QCOMPARE(myPlayListProxyModel.currentTrack(), QPersistentModelIndex(myPlayListProxyModel.index(2, 0)));
2185
2186 myPlayListProxyModel.skipNextTrack();
2187
2188 QCOMPARE(currentTrackChangedSpy.count(), 4);
2189 QCOMPARE(shufflePlayListChangedSpy.count(), 0);
2190 QCOMPARE(repeatModeChangedSpy.count(), 1);
2191 QCOMPARE(playListFinishedSpy.count(), 0);
2192
2193 QCOMPARE(myPlayListProxyModel.currentTrack(), QPersistentModelIndex(myPlayListProxyModel.index(3, 0)));
2194
2195 myPlayListProxyModel.skipNextTrack();
2196
2197 QCOMPARE(currentTrackChangedSpy.count(), 5);
2198 QCOMPARE(shufflePlayListChangedSpy.count(), 0);
2199 QCOMPARE(repeatModeChangedSpy.count(), 1);
2200 QCOMPARE(playListFinishedSpy.count(), 0);
2201
2202 QCOMPARE(myPlayListProxyModel.currentTrack(), QPersistentModelIndex(myPlayListProxyModel.index(0, 0)));
2203 }
2204
previousAndNextTracksTest()2205 void MediaPlayListProxyModelTest::previousAndNextTracksTest()
2206 {
2207 MediaPlayList myPlayList;
2208 QAbstractItemModelTester testModel(&myPlayList);
2209 MediaPlayListProxyModel myPlayListProxyModel;
2210 myPlayListProxyModel.setPlayListModel(&myPlayList);
2211 QAbstractItemModelTester testProxyModel(&myPlayListProxyModel);
2212 DatabaseInterface myDatabaseContent;
2213 TracksListener myListener(&myDatabaseContent);
2214
2215 QSignalSpy previousTrackChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::previousTrackChanged);
2216 QSignalSpy currentTrackChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::currentTrackChanged);
2217 QSignalSpy nextTrackChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::nextTrackChanged);
2218 QSignalSpy shufflePlayListChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::shufflePlayListChanged);
2219 QSignalSpy repeatModeChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::repeatModeChanged);
2220 QSignalSpy playListFinishedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::playListFinished);
2221
2222 myDatabaseContent.init(QStringLiteral("testDbDirectContent"));
2223
2224 connect(&myListener, &TracksListener::trackHasChanged,
2225 &myPlayList, &MediaPlayList::trackChanged,
2226 Qt::QueuedConnection);
2227 connect(&myListener, &TracksListener::tracksListAdded,
2228 &myPlayList, &MediaPlayList::tracksListAdded,
2229 Qt::QueuedConnection);
2230 connect(&myPlayList, &MediaPlayList::newTrackByNameInList,
2231 &myListener, &TracksListener::trackByNameInList,
2232 Qt::QueuedConnection);
2233 connect(&myPlayList, &MediaPlayList::newEntryInList,
2234 &myListener, &TracksListener::newEntryInList,
2235 Qt::QueuedConnection);
2236 connect(&myPlayList, &MediaPlayList::newUrlInList,
2237 &myListener, &TracksListener::newUrlInList,
2238 Qt::QueuedConnection);
2239 connect(&myDatabaseContent, &DatabaseInterface::tracksAdded,
2240 &myListener, &TracksListener::tracksAdded);
2241
2242 myDatabaseContent.insertTracksList(mNewTracks, mNewCovers);
2243
2244 QCOMPARE(previousTrackChangedSpy.count(), 0);
2245 QCOMPARE(currentTrackChangedSpy.count(), 0);
2246 QCOMPARE(nextTrackChangedSpy.count(), 0);
2247 QCOMPARE(shufflePlayListChangedSpy.count(), 0);
2248 QCOMPARE(repeatModeChangedSpy.count(), 0);
2249 QCOMPARE(playListFinishedSpy.count(), 0);
2250
2251 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track},
2252 {DataTypes::DatabaseIdRole, myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track1"), QStringLiteral("artist1"), QStringLiteral("album2"), 1, 1)}},
2253 QStringLiteral("track1"), {}}}, {}, {});
2254 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track},
2255 {DataTypes::DatabaseIdRole, myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track3"), QStringLiteral("artist3"), QStringLiteral("album1"), 3, 3)}},
2256 QStringLiteral("track3"), {}}}, {}, {});
2257 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track},
2258 {DataTypes::DatabaseIdRole, myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track4"), QStringLiteral("artist1"), QStringLiteral("album1"), 4, 4)}},
2259 QStringLiteral("track4"), {}}}, {}, {});
2260 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track},
2261 {DataTypes::DatabaseIdRole, myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track2"), QStringLiteral("artist1"), QStringLiteral("album1"), 2, 2)}},
2262 QStringLiteral("track2"), {}}}, {}, {});
2263 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track},
2264 {DataTypes::DatabaseIdRole, myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track1"), QStringLiteral("artist1"), QStringLiteral("album2"), 1, 1)}},
2265 QStringLiteral("track1"), {}}}, {}, {});
2266
2267 QCOMPARE(previousTrackChangedSpy.count(), 0);
2268 QCOMPARE(currentTrackChangedSpy.count(), 1);
2269 QCOMPARE(nextTrackChangedSpy.count(), 1);
2270 QCOMPARE(shufflePlayListChangedSpy.count(), 0);
2271 QCOMPARE(repeatModeChangedSpy.count(), 0);
2272 QCOMPARE(playListFinishedSpy.count(), 0);
2273
2274 QCOMPARE(myPlayListProxyModel.previousTrack(), QPersistentModelIndex());
2275 QCOMPARE(myPlayListProxyModel.currentTrack(), QPersistentModelIndex(myPlayListProxyModel.index(0, 0)));
2276 QCOMPARE(myPlayListProxyModel.nextTrack(), QPersistentModelIndex(myPlayListProxyModel.index(1, 0)));
2277
2278 myPlayListProxyModel.skipNextTrack();
2279
2280 QCOMPARE(previousTrackChangedSpy.count(), 1);
2281 QCOMPARE(currentTrackChangedSpy.count(), 2);
2282 QCOMPARE(nextTrackChangedSpy.count(), 2);
2283 QCOMPARE(shufflePlayListChangedSpy.count(), 0);
2284 QCOMPARE(repeatModeChangedSpy.count(), 0);
2285 QCOMPARE(playListFinishedSpy.count(), 0);
2286
2287 QCOMPARE(myPlayListProxyModel.previousTrack(), QPersistentModelIndex(myPlayListProxyModel.index(0, 0)));
2288 QCOMPARE(myPlayListProxyModel.currentTrack(), QPersistentModelIndex(myPlayListProxyModel.index(1, 0)));
2289 QCOMPARE(myPlayListProxyModel.nextTrack(), QPersistentModelIndex(myPlayListProxyModel.index(2, 0)));
2290
2291 myPlayListProxyModel.switchTo(4);
2292
2293 QCOMPARE(previousTrackChangedSpy.count(), 2);
2294 QCOMPARE(currentTrackChangedSpy.count(), 3);
2295 QCOMPARE(nextTrackChangedSpy.count(), 3);
2296
2297 QCOMPARE(myPlayListProxyModel.previousTrack(), QPersistentModelIndex(myPlayListProxyModel.index(3, 0)));
2298 QCOMPARE(myPlayListProxyModel.currentTrack(), QPersistentModelIndex(myPlayListProxyModel.index(4, 0)));
2299 QCOMPARE(myPlayListProxyModel.nextTrack(), QPersistentModelIndex());
2300
2301 myPlayListProxyModel.setRepeatMode(MediaPlayListProxyModel::Repeat::Playlist);
2302
2303 QCOMPARE(previousTrackChangedSpy.count(), 2);
2304 QCOMPARE(currentTrackChangedSpy.count(), 3);
2305 QCOMPARE(nextTrackChangedSpy.count(), 4);
2306
2307 QCOMPARE(myPlayListProxyModel.previousTrack(), QPersistentModelIndex(myPlayListProxyModel.index(3, 0)));
2308 QCOMPARE(myPlayListProxyModel.currentTrack(), QPersistentModelIndex(myPlayListProxyModel.index(4, 0)));
2309 QCOMPARE(myPlayListProxyModel.nextTrack(), QPersistentModelIndex(myPlayListProxyModel.index(0, 0)));
2310
2311 myPlayListProxyModel.skipNextTrack();
2312
2313 QCOMPARE(previousTrackChangedSpy.count(), 3);
2314 QCOMPARE(currentTrackChangedSpy.count(), 4);
2315 QCOMPARE(nextTrackChangedSpy.count(), 5);
2316
2317 QCOMPARE(myPlayListProxyModel.previousTrack(), QPersistentModelIndex(myPlayListProxyModel.index(4, 0)));
2318 QCOMPARE(myPlayListProxyModel.currentTrack(), QPersistentModelIndex(myPlayListProxyModel.index(0, 0)));
2319 QCOMPARE(myPlayListProxyModel.nextTrack(), QPersistentModelIndex(myPlayListProxyModel.index(1, 0)));
2320
2321 myPlayListProxyModel.setShufflePlayList(true);
2322
2323 QVERIFY(myPlayListProxyModel.previousTrack() != QPersistentModelIndex());
2324 QVERIFY(myPlayListProxyModel.currentTrack() != QPersistentModelIndex());
2325 QVERIFY(myPlayListProxyModel.nextTrack() != QPersistentModelIndex());
2326 }
2327
remainingTracksTest()2328 void MediaPlayListProxyModelTest::remainingTracksTest()
2329 {
2330 MediaPlayList myPlayList;
2331 QAbstractItemModelTester testModel(&myPlayList);
2332 MediaPlayListProxyModel myPlayListProxyModel;
2333 myPlayListProxyModel.setPlayListModel(&myPlayList);
2334 QAbstractItemModelTester testProxyModel(&myPlayListProxyModel);
2335 DatabaseInterface myDatabaseContent;
2336 TracksListener myListener(&myDatabaseContent);
2337
2338 QSignalSpy currentTrackChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::currentTrackChanged);
2339 QSignalSpy shufflePlayListChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::shufflePlayListChanged);
2340 QSignalSpy repeatModeChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::repeatModeChanged);
2341 QSignalSpy remainingTracksChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::remainingTracksChanged);
2342
2343 myDatabaseContent.init(QStringLiteral("testDbDirectContent"));
2344
2345 connect(&myListener, &TracksListener::trackHasChanged,
2346 &myPlayList, &MediaPlayList::trackChanged,
2347 Qt::QueuedConnection);
2348 connect(&myListener, &TracksListener::tracksListAdded,
2349 &myPlayList, &MediaPlayList::tracksListAdded,
2350 Qt::QueuedConnection);
2351 connect(&myPlayList, &MediaPlayList::newTrackByNameInList,
2352 &myListener, &TracksListener::trackByNameInList,
2353 Qt::QueuedConnection);
2354 connect(&myPlayList, &MediaPlayList::newEntryInList,
2355 &myListener, &TracksListener::newEntryInList,
2356 Qt::QueuedConnection);
2357 connect(&myPlayList, &MediaPlayList::newUrlInList,
2358 &myListener, &TracksListener::newUrlInList,
2359 Qt::QueuedConnection);
2360 connect(&myDatabaseContent, &DatabaseInterface::tracksAdded,
2361 &myListener, &TracksListener::tracksAdded);
2362
2363 myDatabaseContent.insertTracksList(mNewTracks, mNewCovers);
2364
2365 QCOMPARE(currentTrackChangedSpy.count(), 0);
2366 QCOMPARE(shufflePlayListChangedSpy.count(), 0);
2367 QCOMPARE(repeatModeChangedSpy.count(), 0);
2368 QCOMPARE(remainingTracksChangedSpy.count(), 0);
2369
2370 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track},
2371 {DataTypes::DatabaseIdRole, myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track1"), QStringLiteral("artist1"), QStringLiteral("album2"), 1, 1)}},
2372 QStringLiteral("track1"), {}}}, {}, {});
2373 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track},
2374 {DataTypes::DatabaseIdRole, myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track3"), QStringLiteral("artist3"), QStringLiteral("album1"), 3, 3)}},
2375 QStringLiteral("track3"), {}}}, {}, {});
2376 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track},
2377 {DataTypes::DatabaseIdRole, myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track4"), QStringLiteral("artist1"), QStringLiteral("album1"), 4, 4)}},
2378 QStringLiteral("track4"), {}}}, {}, {});
2379 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track},
2380 {DataTypes::DatabaseIdRole, myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track2"), QStringLiteral("artist1"), QStringLiteral("album1"), 2, 2)}},
2381 QStringLiteral("track2"), {}}}, {}, {});
2382 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track},
2383 {DataTypes::DatabaseIdRole, myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track1"), QStringLiteral("artist1"), QStringLiteral("album2"), 1, 1)}},
2384 QStringLiteral("track1"), {}}}, {}, {});
2385
2386 QCOMPARE(currentTrackChangedSpy.count(), 1);
2387 QCOMPARE(shufflePlayListChangedSpy.count(), 0);
2388 QCOMPARE(repeatModeChangedSpy.count(), 0);
2389 QCOMPARE(remainingTracksChangedSpy.count(), 6);
2390
2391 QCOMPARE(myPlayListProxyModel.currentTrack(), QPersistentModelIndex(myPlayListProxyModel.index(0, 0)));
2392 QCOMPARE(myPlayListProxyModel.remainingTracks(), 4);
2393
2394 myPlayListProxyModel.skipNextTrack();
2395
2396 QCOMPARE(currentTrackChangedSpy.count(), 2);
2397 QCOMPARE(remainingTracksChangedSpy.count(), 7);
2398 QCOMPARE(myPlayListProxyModel.currentTrack(), QPersistentModelIndex(myPlayListProxyModel.index(1, 0)));
2399 QCOMPARE(myPlayListProxyModel.remainingTracks(), 3);
2400
2401 myPlayListProxyModel.setShufflePlayList(true);
2402
2403 QCOMPARE(currentTrackChangedSpy.count(), 2);
2404 QCOMPARE(shufflePlayListChangedSpy.count(), 1);
2405 QCOMPARE(repeatModeChangedSpy.count(), 0);
2406 QCOMPARE(remainingTracksChangedSpy.count(), 8);
2407
2408 myPlayListProxyModel.setShufflePlayList(false);
2409 myPlayListProxyModel.setRepeatMode(MediaPlayListProxyModel::Repeat::Playlist);
2410
2411 QCOMPARE(currentTrackChangedSpy.count(), 2);
2412 QCOMPARE(shufflePlayListChangedSpy.count(), 2);
2413 QCOMPARE(repeatModeChangedSpy.count(), 1);
2414 QCOMPARE(remainingTracksChangedSpy.count(), 10);
2415
2416 myPlayListProxyModel.setRepeatMode(MediaPlayListProxyModel::Repeat::One);
2417 QCOMPARE(myPlayListProxyModel.remainingTracks(), -1);
2418 }
2419
clearPlayListCase()2420 void MediaPlayListProxyModelTest::clearPlayListCase()
2421 {
2422 MediaPlayList myPlayList;
2423 QAbstractItemModelTester testModel(&myPlayList);
2424 MediaPlayListProxyModel myPlayListProxyModel;
2425 myPlayListProxyModel.setPlayListModel(&myPlayList);
2426 QAbstractItemModelTester testProxyModel(&myPlayListProxyModel);
2427 DatabaseInterface myDatabaseContent;
2428 TracksListener myListener(&myDatabaseContent);
2429
2430 QSignalSpy rowsAboutToBeMovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsAboutToBeMoved);
2431 QSignalSpy rowsAboutToBeRemovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsAboutToBeRemoved);
2432 QSignalSpy rowsAboutToBeInsertedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsAboutToBeInserted);
2433 QSignalSpy rowsMovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsMoved);
2434 QSignalSpy rowsRemovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsRemoved);
2435 QSignalSpy rowsInsertedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsInserted);
2436 QSignalSpy tracksCountChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::tracksCountChanged);
2437 QSignalSpy persistentStateChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::persistentStateChanged);
2438 QSignalSpy currentTrackChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::currentTrackChanged);
2439 QSignalSpy dataChangedSpy(&myPlayListProxyModel, &MediaPlayList::dataChanged);
2440 QSignalSpy newTrackByNameInListSpy(&myPlayList, &MediaPlayList::newTrackByNameInList);
2441 QSignalSpy newEntryInListSpy(&myPlayList, &MediaPlayList::newEntryInList);
2442 QSignalSpy newUrlInListSpy(&myPlayList, &MediaPlayList::newUrlInList);
2443
2444 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
2445 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
2446 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 0);
2447 QCOMPARE(rowsRemovedSpy.count(), 0);
2448 QCOMPARE(rowsMovedSpy.count(), 0);
2449 QCOMPARE(rowsInsertedSpy.count(), 0);
2450 QCOMPARE(tracksCountChangedSpy.count(), 0);
2451 QCOMPARE(persistentStateChangedSpy.count(), 0);
2452 QCOMPARE(dataChangedSpy.count(), 0);
2453 QCOMPARE(newTrackByNameInListSpy.count(), 0);
2454 QCOMPARE(newEntryInListSpy.count(), 0);
2455 QCOMPARE(currentTrackChangedSpy.count(), 0);
2456
2457 myDatabaseContent.init(QStringLiteral("testDbDirectContent"));
2458
2459 connect(&myListener, &TracksListener::trackHasChanged,
2460 &myPlayList, &MediaPlayList::trackChanged,
2461 Qt::QueuedConnection);
2462 connect(&myListener, &TracksListener::tracksListAdded,
2463 &myPlayList, &MediaPlayList::tracksListAdded,
2464 Qt::QueuedConnection);
2465 connect(&myPlayList, &MediaPlayList::newTrackByNameInList,
2466 &myListener, &TracksListener::trackByNameInList,
2467 Qt::QueuedConnection);
2468 connect(&myPlayList, &MediaPlayList::newEntryInList,
2469 &myListener, &TracksListener::newEntryInList,
2470 Qt::QueuedConnection);
2471 connect(&myPlayList, &MediaPlayList::newUrlInList,
2472 &myListener, &TracksListener::newUrlInList,
2473 Qt::QueuedConnection);
2474 connect(&myDatabaseContent, &DatabaseInterface::tracksAdded,
2475 &myListener, &TracksListener::tracksAdded);
2476
2477 myDatabaseContent.insertTracksList(mNewTracks, mNewCovers);
2478
2479 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
2480 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
2481 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 0);
2482 QCOMPARE(rowsRemovedSpy.count(), 0);
2483 QCOMPARE(rowsMovedSpy.count(), 0);
2484 QCOMPARE(rowsInsertedSpy.count(), 0);
2485 QCOMPARE(tracksCountChangedSpy.count(), 0);
2486 QCOMPARE(persistentStateChangedSpy.count(), 0);
2487 QCOMPARE(dataChangedSpy.count(), 0);
2488 QCOMPARE(newTrackByNameInListSpy.count(), 0);
2489 QCOMPARE(newEntryInListSpy.count(), 0);
2490 QCOMPARE(currentTrackChangedSpy.count(), 0);
2491
2492 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Album},
2493 {DataTypes::DatabaseIdRole, myDatabaseContent.albumIdFromTitleAndArtist(QStringLiteral("album2"), QStringLiteral("artist1"), QStringLiteral("/"))}},
2494 QStringLiteral("album2"), {}}}, {}, {});
2495
2496 QVERIFY(rowsAboutToBeInsertedSpy.wait());
2497
2498 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 1);
2499 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
2500 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 2);
2501 QCOMPARE(rowsRemovedSpy.count(), 1);
2502 QCOMPARE(rowsMovedSpy.count(), 0);
2503 QCOMPARE(rowsInsertedSpy.count(), 2);
2504 QCOMPARE(tracksCountChangedSpy.count(), 3);
2505 QCOMPARE(persistentStateChangedSpy.count(), 3);
2506 QCOMPARE(dataChangedSpy.count(), 0);
2507 QCOMPARE(newTrackByNameInListSpy.count(), 0);
2508 QCOMPARE(newEntryInListSpy.count(), 1);
2509 QCOMPARE(currentTrackChangedSpy.count(), 1);
2510
2511 QCOMPARE(myPlayListProxyModel.rowCount(), 6);
2512
2513 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::TitleRole).toString(), QStringLiteral("track1"));
2514 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::AlbumRole).toString(), QStringLiteral("album2"));
2515 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ArtistRole).toString(), QStringLiteral("artist1"));
2516 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::TrackNumberRole).toInt(), 1);
2517 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::DiscNumberRole).toInt(), 1);
2518 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::DurationRole).toTime().msecsSinceStartOfDay(), 5);
2519 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::TitleRole).toString(), QStringLiteral("track2"));
2520 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::AlbumRole).toString(), QStringLiteral("album2"));
2521 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::ArtistRole).toString(), QStringLiteral("artist1"));
2522 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::TrackNumberRole).toInt(), 2);
2523 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::DiscNumberRole).toInt(), 1);
2524 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::DurationRole).toTime().msecsSinceStartOfDay(), 6);
2525 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::TitleRole).toString(), QStringLiteral("track3"));
2526 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::AlbumRole).toString(), QStringLiteral("album2"));
2527 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::ArtistRole).toString(), QStringLiteral("artist1"));
2528 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::TrackNumberRole).toInt(), 3);
2529 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::DiscNumberRole).toInt(), 1);
2530 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::DurationRole).toTime().msecsSinceStartOfDay(), 7);
2531 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(3, 0), MediaPlayList::TitleRole).toString(), QStringLiteral("track4"));
2532 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(3, 0), MediaPlayList::AlbumRole).toString(), QStringLiteral("album2"));
2533 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(3, 0), MediaPlayList::ArtistRole).toString(), QStringLiteral("artist1"));
2534 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(3, 0), MediaPlayList::TrackNumberRole).toInt(), 4);
2535 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(3, 0), MediaPlayList::DiscNumberRole).toInt(), 1);
2536 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(3, 0), MediaPlayList::DurationRole).toTime().msecsSinceStartOfDay(), 8);
2537 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(4, 0), MediaPlayList::TitleRole).toString(), QStringLiteral("track5"));
2538 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(4, 0), MediaPlayList::AlbumRole).toString(), QStringLiteral("album2"));
2539 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(4, 0), MediaPlayList::ArtistRole).toString(), QStringLiteral("artist1"));
2540 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(4, 0), MediaPlayList::TrackNumberRole).toInt(), 5);
2541 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(4, 0), MediaPlayList::DiscNumberRole).toInt(), 1);
2542 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(4, 0), MediaPlayList::DurationRole).toTime().msecsSinceStartOfDay(), 9);
2543 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(5, 0), MediaPlayList::TitleRole).toString(), QStringLiteral("track6"));
2544 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(5, 0), MediaPlayList::AlbumRole).toString(), QStringLiteral("album2"));
2545 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(5, 0), MediaPlayList::ArtistRole).toString(), QStringLiteral("artist1 and artist2"));
2546 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(5, 0), MediaPlayList::TrackNumberRole).toInt(), 6);
2547 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(5, 0), MediaPlayList::DiscNumberRole).toInt(), 1);
2548 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(5, 0), MediaPlayList::DurationRole).toTime().msecsSinceStartOfDay(), 10);
2549
2550 QCOMPARE(myPlayListProxyModel.currentTrack(), QPersistentModelIndex(myPlayListProxyModel.index(0, 0)));
2551
2552 myPlayListProxyModel.clearPlayList();
2553
2554 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 2);
2555 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
2556 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 2);
2557 QCOMPARE(rowsRemovedSpy.count(), 2);
2558 QCOMPARE(rowsMovedSpy.count(), 0);
2559 QCOMPARE(rowsInsertedSpy.count(), 2);
2560 QCOMPARE(tracksCountChangedSpy.count(), 4);
2561 QCOMPARE(persistentStateChangedSpy.count(), 4);
2562 QCOMPARE(dataChangedSpy.count(), 0);
2563 QCOMPARE(newTrackByNameInListSpy.count(), 0);
2564 QCOMPARE(newEntryInListSpy.count(), 1);
2565 QCOMPARE(currentTrackChangedSpy.count(), 2);
2566
2567 QCOMPARE(myPlayListProxyModel.rowCount(), 0);
2568
2569 QCOMPARE(myPlayListProxyModel.currentTrack().isValid(), false);
2570 }
2571
undoClearPlayListCase()2572 void MediaPlayListProxyModelTest::undoClearPlayListCase()
2573 {
2574 MediaPlayList myPlayList;
2575 QAbstractItemModelTester testModel(&myPlayList);
2576 MediaPlayListProxyModel myPlayListProxyModel;
2577 myPlayListProxyModel.setPlayListModel(&myPlayList);
2578 QAbstractItemModelTester testProxyModel(&myPlayListProxyModel);
2579 DatabaseInterface myDatabaseContent;
2580 TracksListener myListener(&myDatabaseContent);
2581
2582 QSignalSpy rowsAboutToBeMovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsAboutToBeMoved);
2583 QSignalSpy rowsAboutToBeRemovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsAboutToBeRemoved);
2584 QSignalSpy rowsAboutToBeInsertedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsAboutToBeInserted);
2585 QSignalSpy rowsMovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsMoved);
2586 QSignalSpy rowsRemovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsRemoved);
2587 QSignalSpy rowsInsertedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsInserted);
2588 QSignalSpy tracksCountChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::tracksCountChanged);
2589 QSignalSpy persistentStateChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::persistentStateChanged);
2590 QSignalSpy displayUndoNotificationSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::displayUndoNotification);
2591 QSignalSpy currentTrackChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::currentTrackChanged);
2592 QSignalSpy dataChangedSpy(&myPlayListProxyModel, &MediaPlayList::dataChanged);
2593 QSignalSpy newTrackByNameInListSpy(&myPlayList, &MediaPlayList::newTrackByNameInList);
2594 QSignalSpy newEntryInListSpy(&myPlayList, &MediaPlayList::newEntryInList);
2595 QSignalSpy newUrlInListSpy(&myPlayList, &MediaPlayList::newUrlInList);
2596
2597 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
2598 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
2599 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 0);
2600 QCOMPARE(rowsRemovedSpy.count(), 0);
2601 QCOMPARE(rowsMovedSpy.count(), 0);
2602 QCOMPARE(rowsInsertedSpy.count(), 0);
2603 QCOMPARE(tracksCountChangedSpy.count(), 0);
2604 QCOMPARE(persistentStateChangedSpy.count(), 0);
2605 QCOMPARE(dataChangedSpy.count(), 0);
2606 QCOMPARE(newTrackByNameInListSpy.count(), 0);
2607 QCOMPARE(newEntryInListSpy.count(), 0);
2608 QCOMPARE(currentTrackChangedSpy.count(), 0);
2609
2610 myDatabaseContent.init(QStringLiteral("testDbDirectContent"));
2611
2612 connect(&myListener, &TracksListener::trackHasChanged,
2613 &myPlayList, &MediaPlayList::trackChanged,
2614 Qt::QueuedConnection);
2615 connect(&myListener, &TracksListener::tracksListAdded,
2616 &myPlayList, &MediaPlayList::tracksListAdded,
2617 Qt::QueuedConnection);
2618 connect(&myPlayList, &MediaPlayList::newTrackByNameInList,
2619 &myListener, &TracksListener::trackByNameInList,
2620 Qt::QueuedConnection);
2621 connect(&myPlayList, &MediaPlayList::newEntryInList,
2622 &myListener, &TracksListener::newEntryInList,
2623 Qt::QueuedConnection);
2624 connect(&myPlayList, &MediaPlayList::newUrlInList,
2625 &myListener, &TracksListener::newUrlInList,
2626 Qt::QueuedConnection);
2627 connect(&myDatabaseContent, &DatabaseInterface::tracksAdded,
2628 &myListener, &TracksListener::tracksAdded);
2629
2630 myDatabaseContent.insertTracksList(mNewTracks, mNewCovers);
2631
2632 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
2633 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
2634 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 0);
2635 QCOMPARE(rowsRemovedSpy.count(), 0);
2636 QCOMPARE(rowsMovedSpy.count(), 0);
2637 QCOMPARE(rowsInsertedSpy.count(), 0);
2638 QCOMPARE(tracksCountChangedSpy.count(), 0);
2639 QCOMPARE(persistentStateChangedSpy.count(), 0);
2640 QCOMPARE(dataChangedSpy.count(), 0);
2641 QCOMPARE(newTrackByNameInListSpy.count(), 0);
2642 QCOMPARE(newEntryInListSpy.count(), 0);
2643 QCOMPARE(currentTrackChangedSpy.count(), 0);
2644
2645 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Album},
2646 {DataTypes::DatabaseIdRole, myDatabaseContent.albumIdFromTitleAndArtist(QStringLiteral("album2"), QStringLiteral("artist1"), QStringLiteral("/"))}},
2647 QStringLiteral("album2"), {}}}, {}, {});
2648
2649 QVERIFY(rowsAboutToBeInsertedSpy.wait());
2650
2651 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 1);
2652 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
2653 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 2);
2654 QCOMPARE(rowsRemovedSpy.count(), 1);
2655 QCOMPARE(rowsMovedSpy.count(), 0);
2656 QCOMPARE(rowsInsertedSpy.count(), 2);
2657 QCOMPARE(tracksCountChangedSpy.count(), 3);
2658 QCOMPARE(persistentStateChangedSpy.count(), 3);
2659 QCOMPARE(dataChangedSpy.count(), 0);
2660 QCOMPARE(newTrackByNameInListSpy.count(), 0);
2661 QCOMPARE(newEntryInListSpy.count(), 1);
2662 QCOMPARE(currentTrackChangedSpy.count(), 1);
2663
2664 QCOMPARE(myPlayListProxyModel.rowCount(), 6);
2665
2666 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::TitleRole).toString(), QStringLiteral("track1"));
2667 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::AlbumRole).toString(), QStringLiteral("album2"));
2668 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ArtistRole).toString(), QStringLiteral("artist1"));
2669 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::TrackNumberRole).toInt(), 1);
2670 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::DiscNumberRole).toInt(), 1);
2671 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::DurationRole).toTime().msecsSinceStartOfDay(), 5);
2672 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::TitleRole).toString(), QStringLiteral("track2"));
2673 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::AlbumRole).toString(), QStringLiteral("album2"));
2674 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::ArtistRole).toString(), QStringLiteral("artist1"));
2675 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::TrackNumberRole).toInt(), 2);
2676 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::DiscNumberRole).toInt(), 1);
2677 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::DurationRole).toTime().msecsSinceStartOfDay(), 6);
2678 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::TitleRole).toString(), QStringLiteral("track3"));
2679 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::AlbumRole).toString(), QStringLiteral("album2"));
2680 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::ArtistRole).toString(), QStringLiteral("artist1"));
2681 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::TrackNumberRole).toInt(), 3);
2682 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::DiscNumberRole).toInt(), 1);
2683 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::DurationRole).toTime().msecsSinceStartOfDay(), 7);
2684 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(3, 0), MediaPlayList::TitleRole).toString(), QStringLiteral("track4"));
2685 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(3, 0), MediaPlayList::AlbumRole).toString(), QStringLiteral("album2"));
2686 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(3, 0), MediaPlayList::ArtistRole).toString(), QStringLiteral("artist1"));
2687 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(3, 0), MediaPlayList::TrackNumberRole).toInt(), 4);
2688 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(3, 0), MediaPlayList::DiscNumberRole).toInt(), 1);
2689 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(3, 0), MediaPlayList::DurationRole).toTime().msecsSinceStartOfDay(), 8);
2690 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(4, 0), MediaPlayList::TitleRole).toString(), QStringLiteral("track5"));
2691 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(4, 0), MediaPlayList::AlbumRole).toString(), QStringLiteral("album2"));
2692 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(4, 0), MediaPlayList::ArtistRole).toString(), QStringLiteral("artist1"));
2693 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(4, 0), MediaPlayList::TrackNumberRole).toInt(), 5);
2694 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(4, 0), MediaPlayList::DiscNumberRole).toInt(), 1);
2695 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(4, 0), MediaPlayList::DurationRole).toTime().msecsSinceStartOfDay(), 9);
2696 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(5, 0), MediaPlayList::TitleRole).toString(), QStringLiteral("track6"));
2697 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(5, 0), MediaPlayList::AlbumRole).toString(), QStringLiteral("album2"));
2698 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(5, 0), MediaPlayList::ArtistRole).toString(), QStringLiteral("artist1 and artist2"));
2699 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(5, 0), MediaPlayList::TrackNumberRole).toInt(), 6);
2700 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(5, 0), MediaPlayList::DiscNumberRole).toInt(), 1);
2701 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(5, 0), MediaPlayList::DurationRole).toTime().msecsSinceStartOfDay(), 10);
2702
2703 QCOMPARE(myPlayListProxyModel.currentTrack(), QPersistentModelIndex(myPlayListProxyModel.index(0, 0)));
2704
2705 myPlayListProxyModel.clearPlayList();
2706
2707 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 2);
2708 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
2709 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 2);
2710 QCOMPARE(rowsRemovedSpy.count(), 2);
2711 QCOMPARE(rowsMovedSpy.count(), 0);
2712 QCOMPARE(rowsInsertedSpy.count(), 2);
2713 QCOMPARE(tracksCountChangedSpy.count(), 4);
2714 QCOMPARE(persistentStateChangedSpy.count(), 4);
2715 QCOMPARE(dataChangedSpy.count(), 0);
2716 QCOMPARE(newTrackByNameInListSpy.count(), 0);
2717 QCOMPARE(newEntryInListSpy.count(), 1);
2718 QCOMPARE(currentTrackChangedSpy.count(), 2);
2719
2720 QCOMPARE(myPlayListProxyModel.rowCount(), 0);
2721
2722 QCOMPARE(myPlayListProxyModel.currentTrack().isValid(), false);
2723
2724 myPlayListProxyModel.undoClearPlayList();
2725
2726 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 2);
2727 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
2728 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 3);
2729 QCOMPARE(rowsRemovedSpy.count(), 2);
2730 QCOMPARE(rowsMovedSpy.count(), 0);
2731 QCOMPARE(rowsInsertedSpy.count(), 3);
2732 QCOMPARE(tracksCountChangedSpy.count(), 5);
2733 QCOMPARE(persistentStateChangedSpy.count(), 6);
2734 QCOMPARE(dataChangedSpy.count(), 0);
2735 QCOMPARE(newTrackByNameInListSpy.count(), 6);
2736 QCOMPARE(newEntryInListSpy.count(), 1);
2737 QCOMPARE(currentTrackChangedSpy.count(), 3);
2738 QCOMPARE(displayUndoNotificationSpy.count(), 1);
2739
2740 QCOMPARE(myPlayListProxyModel.rowCount(), 6);
2741
2742 QVERIFY(dataChangedSpy.wait());
2743
2744 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::TitleRole).toString(), QStringLiteral("track1"));
2745 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::AlbumRole).toString(), QStringLiteral("album2"));
2746 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ArtistRole).toString(), QStringLiteral("artist1"));
2747 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::TrackNumberRole).toInt(), 1);
2748 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::DiscNumberRole).toInt(), 1);
2749 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::DurationRole).toTime().msecsSinceStartOfDay(), 5);
2750 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::TitleRole).toString(), QStringLiteral("track2"));
2751 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::AlbumRole).toString(), QStringLiteral("album2"));
2752 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::ArtistRole).toString(), QStringLiteral("artist1"));
2753 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::TrackNumberRole).toInt(), 2);
2754 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::DiscNumberRole).toInt(), 1);
2755 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::DurationRole).toTime().msecsSinceStartOfDay(), 6);
2756 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::TitleRole).toString(), QStringLiteral("track3"));
2757 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::AlbumRole).toString(), QStringLiteral("album2"));
2758 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::ArtistRole).toString(), QStringLiteral("artist1"));
2759 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::TrackNumberRole).toInt(), 3);
2760 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::DiscNumberRole).toInt(), 1);
2761 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::DurationRole).toTime().msecsSinceStartOfDay(), 7);
2762 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(3, 0), MediaPlayList::TitleRole).toString(), QStringLiteral("track4"));
2763 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(3, 0), MediaPlayList::AlbumRole).toString(), QStringLiteral("album2"));
2764 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(3, 0), MediaPlayList::ArtistRole).toString(), QStringLiteral("artist1"));
2765 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(3, 0), MediaPlayList::TrackNumberRole).toInt(), 4);
2766 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(3, 0), MediaPlayList::DiscNumberRole).toInt(), 1);
2767 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(3, 0), MediaPlayList::DurationRole).toTime().msecsSinceStartOfDay(), 8);
2768 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(4, 0), MediaPlayList::TitleRole).toString(), QStringLiteral("track5"));
2769 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(4, 0), MediaPlayList::AlbumRole).toString(), QStringLiteral("album2"));
2770 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(4, 0), MediaPlayList::ArtistRole).toString(), QStringLiteral("artist1"));
2771 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(4, 0), MediaPlayList::TrackNumberRole).toInt(), 5);
2772 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(4, 0), MediaPlayList::DiscNumberRole).toInt(), 1);
2773 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(4, 0), MediaPlayList::DurationRole).toTime().msecsSinceStartOfDay(), 9);
2774 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(5, 0), MediaPlayList::TitleRole).toString(), QStringLiteral("track6"));
2775 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(5, 0), MediaPlayList::AlbumRole).toString(), QStringLiteral("album2"));
2776 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(5, 0), MediaPlayList::ArtistRole).toString(), QStringLiteral("artist1 and artist2"));
2777 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(5, 0), MediaPlayList::TrackNumberRole).toInt(), 6);
2778 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(5, 0), MediaPlayList::DiscNumberRole).toInt(), 1);
2779 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(5, 0), MediaPlayList::DurationRole).toTime().msecsSinceStartOfDay(), 10);
2780
2781 QCOMPARE(myPlayListProxyModel.currentTrack(), QPersistentModelIndex(myPlayListProxyModel.index(0, 0)));
2782 }
2783
undoReplacePlayListCase()2784 void MediaPlayListProxyModelTest::undoReplacePlayListCase()
2785 {
2786 MediaPlayList myPlayList;
2787 QAbstractItemModelTester testModel(&myPlayList);
2788 MediaPlayListProxyModel myPlayListProxyModel;
2789 myPlayListProxyModel.setPlayListModel(&myPlayList);
2790 QAbstractItemModelTester testProxyModel(&myPlayListProxyModel);
2791 DatabaseInterface myDatabaseContent;
2792 TracksListener myListener(&myDatabaseContent);
2793
2794 QSignalSpy rowsAboutToBeMovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsAboutToBeMoved);
2795 QSignalSpy rowsAboutToBeRemovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsAboutToBeRemoved);
2796 QSignalSpy rowsAboutToBeInsertedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsAboutToBeInserted);
2797 QSignalSpy rowsMovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsMoved);
2798 QSignalSpy rowsRemovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsRemoved);
2799 QSignalSpy rowsInsertedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsInserted);
2800 QSignalSpy tracksCountChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::tracksCountChanged);
2801 QSignalSpy persistentStateChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::persistentStateChanged);
2802 QSignalSpy currentTrackChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::currentTrackChanged);
2803 QSignalSpy displayUndoNotificationSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::displayUndoNotification);
2804 QSignalSpy dataChangedSpy(&myPlayListProxyModel, &MediaPlayList::dataChanged);
2805 QSignalSpy newTrackByNameInListSpy(&myPlayList, &MediaPlayList::newTrackByNameInList);
2806 QSignalSpy newEntryInListSpy(&myPlayList, &MediaPlayList::newEntryInList);
2807 QSignalSpy newUrlInListSpy(&myPlayList, &MediaPlayList::newUrlInList);
2808
2809 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
2810 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
2811 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 0);
2812 QCOMPARE(rowsRemovedSpy.count(), 0);
2813 QCOMPARE(rowsMovedSpy.count(), 0);
2814 QCOMPARE(rowsInsertedSpy.count(), 0);
2815 QCOMPARE(tracksCountChangedSpy.count(), 0);
2816 QCOMPARE(persistentStateChangedSpy.count(), 0);
2817 QCOMPARE(dataChangedSpy.count(), 0);
2818 QCOMPARE(newTrackByNameInListSpy.count(), 0);
2819 QCOMPARE(newEntryInListSpy.count(), 0);
2820 QCOMPARE(currentTrackChangedSpy.count(), 0);
2821
2822 myDatabaseContent.init(QStringLiteral("testDbDirectContent"));
2823
2824 connect(&myListener, &TracksListener::trackHasChanged,
2825 &myPlayList, &MediaPlayList::trackChanged,
2826 Qt::QueuedConnection);
2827 connect(&myListener, &TracksListener::tracksListAdded,
2828 &myPlayList, &MediaPlayList::tracksListAdded,
2829 Qt::QueuedConnection);
2830 connect(&myPlayList, &MediaPlayList::newTrackByNameInList,
2831 &myListener, &TracksListener::trackByNameInList,
2832 Qt::QueuedConnection);
2833 connect(&myPlayList, &MediaPlayList::newEntryInList,
2834 &myListener, &TracksListener::newEntryInList,
2835 Qt::QueuedConnection);
2836 connect(&myPlayList, &MediaPlayList::newUrlInList,
2837 &myListener, &TracksListener::newUrlInList,
2838 Qt::QueuedConnection);
2839 connect(&myDatabaseContent, &DatabaseInterface::tracksAdded,
2840 &myListener, &TracksListener::tracksAdded);
2841
2842 myDatabaseContent.insertTracksList(mNewTracks, mNewCovers);
2843
2844 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
2845 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
2846 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 0);
2847 QCOMPARE(rowsRemovedSpy.count(), 0);
2848 QCOMPARE(rowsMovedSpy.count(), 0);
2849 QCOMPARE(rowsInsertedSpy.count(), 0);
2850 QCOMPARE(tracksCountChangedSpy.count(), 0);
2851 QCOMPARE(persistentStateChangedSpy.count(), 0);
2852 QCOMPARE(dataChangedSpy.count(), 0);
2853 QCOMPARE(newTrackByNameInListSpy.count(), 0);
2854 QCOMPARE(newEntryInListSpy.count(), 0);
2855 QCOMPARE(currentTrackChangedSpy.count(), 0);
2856
2857 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Album},
2858 {DataTypes::DatabaseIdRole, myDatabaseContent.albumIdFromTitleAndArtist(QStringLiteral("album2"), QStringLiteral("artist1"), QStringLiteral("/"))}},
2859 QStringLiteral("album2"), {}}}, {}, {});
2860
2861 QVERIFY(rowsAboutToBeInsertedSpy.wait());
2862
2863 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 1);
2864 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
2865 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 2);
2866 QCOMPARE(rowsRemovedSpy.count(), 1);
2867 QCOMPARE(rowsMovedSpy.count(), 0);
2868 QCOMPARE(rowsInsertedSpy.count(), 2);
2869 QCOMPARE(tracksCountChangedSpy.count(), 3);
2870 QCOMPARE(persistentStateChangedSpy.count(), 3);
2871 QCOMPARE(dataChangedSpy.count(), 0);
2872 QCOMPARE(newTrackByNameInListSpy.count(), 0);
2873 QCOMPARE(newEntryInListSpy.count(), 1);
2874 QCOMPARE(currentTrackChangedSpy.count(), 1);
2875
2876 QCOMPARE(myPlayListProxyModel.rowCount(), 6);
2877
2878 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::TitleRole).toString(), QStringLiteral("track1"));
2879 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::AlbumRole).toString(), QStringLiteral("album2"));
2880 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ArtistRole).toString(), QStringLiteral("artist1"));
2881 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::TrackNumberRole).toInt(), 1);
2882 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::DiscNumberRole).toInt(), 1);
2883 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::DurationRole).toTime().msecsSinceStartOfDay(), 5);
2884 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::TitleRole).toString(), QStringLiteral("track2"));
2885 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::AlbumRole).toString(), QStringLiteral("album2"));
2886 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::ArtistRole).toString(), QStringLiteral("artist1"));
2887 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::TrackNumberRole).toInt(), 2);
2888 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::DiscNumberRole).toInt(), 1);
2889 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::DurationRole).toTime().msecsSinceStartOfDay(), 6);
2890 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::TitleRole).toString(), QStringLiteral("track3"));
2891 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::AlbumRole).toString(), QStringLiteral("album2"));
2892 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::ArtistRole).toString(), QStringLiteral("artist1"));
2893 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::TrackNumberRole).toInt(), 3);
2894 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::DiscNumberRole).toInt(), 1);
2895 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::DurationRole).toTime().msecsSinceStartOfDay(), 7);
2896 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(3, 0), MediaPlayList::TitleRole).toString(), QStringLiteral("track4"));
2897 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(3, 0), MediaPlayList::AlbumRole).toString(), QStringLiteral("album2"));
2898 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(3, 0), MediaPlayList::ArtistRole).toString(), QStringLiteral("artist1"));
2899 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(3, 0), MediaPlayList::TrackNumberRole).toInt(), 4);
2900 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(3, 0), MediaPlayList::DiscNumberRole).toInt(), 1);
2901 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(3, 0), MediaPlayList::DurationRole).toTime().msecsSinceStartOfDay(), 8);
2902 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(4, 0), MediaPlayList::TitleRole).toString(), QStringLiteral("track5"));
2903 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(4, 0), MediaPlayList::AlbumRole).toString(), QStringLiteral("album2"));
2904 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(4, 0), MediaPlayList::ArtistRole).toString(), QStringLiteral("artist1"));
2905 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(4, 0), MediaPlayList::TrackNumberRole).toInt(), 5);
2906 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(4, 0), MediaPlayList::DiscNumberRole).toInt(), 1);
2907 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(4, 0), MediaPlayList::DurationRole).toTime().msecsSinceStartOfDay(), 9);
2908 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(5, 0), MediaPlayList::TitleRole).toString(), QStringLiteral("track6"));
2909 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(5, 0), MediaPlayList::AlbumRole).toString(), QStringLiteral("album2"));
2910 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(5, 0), MediaPlayList::ArtistRole).toString(), QStringLiteral("artist1 and artist2"));
2911 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(5, 0), MediaPlayList::TrackNumberRole).toInt(), 6);
2912 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(5, 0), MediaPlayList::DiscNumberRole).toInt(), 1);
2913 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(5, 0), MediaPlayList::DurationRole).toTime().msecsSinceStartOfDay(), 10);
2914
2915 QCOMPARE(myPlayListProxyModel.currentTrack(), QPersistentModelIndex(myPlayListProxyModel.index(0, 0)));
2916
2917 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Album},
2918 {DataTypes::DatabaseIdRole, myDatabaseContent.albumIdFromTitleAndArtist(QStringLiteral("album1"), QStringLiteral("Various Artists"), QStringLiteral("/"))}},
2919 QStringLiteral("album1"), {}}},
2920 ElisaUtils::ReplacePlayList,
2921 ElisaUtils::TriggerPlay);
2922
2923 QVERIFY(rowsAboutToBeInsertedSpy.wait());
2924
2925 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 3);
2926 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
2927 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 4);
2928 QCOMPARE(rowsRemovedSpy.count(), 3);
2929 QCOMPARE(rowsMovedSpy.count(), 0);
2930 QCOMPARE(rowsInsertedSpy.count(), 4);
2931 QCOMPARE(persistentStateChangedSpy.count(), 7);
2932 QCOMPARE(dataChangedSpy.count(), 0);
2933 QCOMPARE(newTrackByNameInListSpy.count(), 0);
2934 QCOMPARE(newEntryInListSpy.count(), 2);
2935 QCOMPARE(currentTrackChangedSpy.count(), 3);
2936
2937 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::TitleRole).toString(), QStringLiteral("track1"));
2938 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::AlbumRole).toString(), QStringLiteral("album1"));
2939 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ArtistRole).toString(), QStringLiteral("artist1"));
2940 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::TrackNumberRole).toInt(), 1);
2941 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::DiscNumberRole).toInt(), 1);
2942 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::DurationRole).toTime().msecsSinceStartOfDay(), 1);
2943 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::TitleRole).toString(), QStringLiteral("track2"));
2944 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::AlbumRole).toString(), QStringLiteral("album1"));
2945 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::ArtistRole).toString(), QStringLiteral("artist2"));
2946 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::TrackNumberRole).toInt(), 2);
2947 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::DiscNumberRole).toInt(), 2);
2948 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::DurationRole).toTime().msecsSinceStartOfDay(), 2);
2949 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::TitleRole).toString(), QStringLiteral("track3"));
2950 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::AlbumRole).toString(), QStringLiteral("album1"));
2951 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::ArtistRole).toString(), QStringLiteral("artist3"));
2952 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::TrackNumberRole).toInt(), 3);
2953 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::DiscNumberRole).toInt(), 3);
2954 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::DurationRole).toTime().msecsSinceStartOfDay(), 3);
2955 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(3, 0), MediaPlayList::TitleRole).toString(), QStringLiteral("track4"));
2956 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(3, 0), MediaPlayList::AlbumRole).toString(), QStringLiteral("album1"));
2957 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(3, 0), MediaPlayList::ArtistRole).toString(), QStringLiteral("artist4"));
2958 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(3, 0), MediaPlayList::TrackNumberRole).toInt(), 4);
2959 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(3, 0), MediaPlayList::DiscNumberRole).toInt(), 4);
2960 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(3, 0), MediaPlayList::DurationRole).toTime().msecsSinceStartOfDay(), 4);
2961
2962 myPlayListProxyModel.undoClearPlayList();
2963
2964 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 4);
2965 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
2966 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 5);
2967 QCOMPARE(rowsRemovedSpy.count(), 4);
2968 QCOMPARE(rowsMovedSpy.count(), 0);
2969 QCOMPARE(rowsInsertedSpy.count(), 5);
2970 QCOMPARE(tracksCountChangedSpy.count(), 9);
2971 QCOMPARE(persistentStateChangedSpy.count(), 10);
2972 QCOMPARE(dataChangedSpy.count(), 0);
2973 QCOMPARE(newTrackByNameInListSpy.count(), 6);
2974 QCOMPARE(newEntryInListSpy.count(), 2);
2975 QCOMPARE(currentTrackChangedSpy.count(), 5);
2976 QCOMPARE(displayUndoNotificationSpy.count(), 1);
2977
2978 QCOMPARE(myPlayListProxyModel.rowCount(), 6);
2979
2980 QVERIFY(dataChangedSpy.wait());
2981
2982 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::TitleRole).toString(), QStringLiteral("track1"));
2983 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::AlbumRole).toString(), QStringLiteral("album2"));
2984 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ArtistRole).toString(), QStringLiteral("artist1"));
2985 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::TrackNumberRole).toInt(), 1);
2986 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::DiscNumberRole).toInt(), 1);
2987 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::DurationRole).toTime().msecsSinceStartOfDay(), 5);
2988 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::TitleRole).toString(), QStringLiteral("track2"));
2989 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::AlbumRole).toString(), QStringLiteral("album2"));
2990 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::ArtistRole).toString(), QStringLiteral("artist1"));
2991 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::TrackNumberRole).toInt(), 2);
2992 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::DiscNumberRole).toInt(), 1);
2993 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::DurationRole).toTime().msecsSinceStartOfDay(), 6);
2994 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::TitleRole).toString(), QStringLiteral("track3"));
2995 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::AlbumRole).toString(), QStringLiteral("album2"));
2996 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::ArtistRole).toString(), QStringLiteral("artist1"));
2997 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::TrackNumberRole).toInt(), 3);
2998 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::DiscNumberRole).toInt(), 1);
2999 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::DurationRole).toTime().msecsSinceStartOfDay(), 7);
3000 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(3, 0), MediaPlayList::TitleRole).toString(), QStringLiteral("track4"));
3001 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(3, 0), MediaPlayList::AlbumRole).toString(), QStringLiteral("album2"));
3002 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(3, 0), MediaPlayList::ArtistRole).toString(), QStringLiteral("artist1"));
3003 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(3, 0), MediaPlayList::TrackNumberRole).toInt(), 4);
3004 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(3, 0), MediaPlayList::DiscNumberRole).toInt(), 1);
3005 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(3, 0), MediaPlayList::DurationRole).toTime().msecsSinceStartOfDay(), 8);
3006 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(4, 0), MediaPlayList::TitleRole).toString(), QStringLiteral("track5"));
3007 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(4, 0), MediaPlayList::AlbumRole).toString(), QStringLiteral("album2"));
3008 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(4, 0), MediaPlayList::ArtistRole).toString(), QStringLiteral("artist1"));
3009 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(4, 0), MediaPlayList::TrackNumberRole).toInt(), 5);
3010 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(4, 0), MediaPlayList::DiscNumberRole).toInt(), 1);
3011 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(4, 0), MediaPlayList::DurationRole).toTime().msecsSinceStartOfDay(), 9);
3012 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(5, 0), MediaPlayList::TitleRole).toString(), QStringLiteral("track6"));
3013 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(5, 0), MediaPlayList::AlbumRole).toString(), QStringLiteral("album2"));
3014 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(5, 0), MediaPlayList::ArtistRole).toString(), QStringLiteral("artist1 and artist2"));
3015 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(5, 0), MediaPlayList::TrackNumberRole).toInt(), 6);
3016 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(5, 0), MediaPlayList::DiscNumberRole).toInt(), 1);
3017 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(5, 0), MediaPlayList::DurationRole).toTime().msecsSinceStartOfDay(), 10);
3018
3019 QCOMPARE(myPlayListProxyModel.currentTrack(), QPersistentModelIndex(myPlayListProxyModel.index(0, 0)));
3020 }
3021
testBringUpAndSkipPreviousAndContinueCase()3022 void MediaPlayListProxyModelTest::testBringUpAndSkipPreviousAndContinueCase()
3023 {
3024 MediaPlayList myPlayList;
3025 QAbstractItemModelTester testModel(&myPlayList);
3026 MediaPlayListProxyModel myPlayListProxyModel;
3027 myPlayListProxyModel.setPlayListModel(&myPlayList);
3028 QAbstractItemModelTester testProxyModel(&myPlayListProxyModel);
3029 DatabaseInterface myDatabaseContent;
3030 TracksListener myListener(&myDatabaseContent);
3031
3032 QSignalSpy currentTrackChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::currentTrackChanged);
3033 QSignalSpy shufflePlayListChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::shufflePlayListChanged);
3034 QSignalSpy repeatModeChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::repeatModeChanged);
3035 QSignalSpy playListFinishedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::playListFinished);
3036
3037 myDatabaseContent.init(QStringLiteral("testDbDirectContent"));
3038
3039 connect(&myListener, &TracksListener::trackHasChanged,
3040 &myPlayList, &MediaPlayList::trackChanged,
3041 Qt::QueuedConnection);
3042 connect(&myListener, &TracksListener::tracksListAdded,
3043 &myPlayList, &MediaPlayList::tracksListAdded,
3044 Qt::QueuedConnection);
3045 connect(&myPlayList, &MediaPlayList::newTrackByNameInList,
3046 &myListener, &TracksListener::trackByNameInList,
3047 Qt::QueuedConnection);
3048 connect(&myPlayList, &MediaPlayList::newEntryInList,
3049 &myListener, &TracksListener::newEntryInList,
3050 Qt::QueuedConnection);
3051 connect(&myPlayList, &MediaPlayList::newUrlInList,
3052 &myListener, &TracksListener::newUrlInList,
3053 Qt::QueuedConnection);
3054 connect(&myDatabaseContent, &DatabaseInterface::tracksAdded,
3055 &myListener, &TracksListener::tracksAdded);
3056
3057 QCOMPARE(currentTrackChangedSpy.count(), 0);
3058 QCOMPARE(shufflePlayListChangedSpy.count(), 0);
3059 QCOMPARE(repeatModeChangedSpy.count(), 0);
3060 QCOMPARE(playListFinishedSpy.count(), 0);
3061
3062 myPlayListProxyModel.setRepeatMode(MediaPlayListProxyModel::Repeat::Playlist);
3063
3064 QCOMPARE(currentTrackChangedSpy.count(), 0);
3065 QCOMPARE(shufflePlayListChangedSpy.count(), 0);
3066 QCOMPARE(repeatModeChangedSpy.count(), 1);
3067 QCOMPARE(playListFinishedSpy.count(), 0);
3068
3069 myDatabaseContent.insertTracksList(mNewTracks, mNewCovers);
3070
3071 QCOMPARE(currentTrackChangedSpy.count(), 0);
3072 QCOMPARE(shufflePlayListChangedSpy.count(), 0);
3073 QCOMPARE(repeatModeChangedSpy.count(), 1);
3074 QCOMPARE(playListFinishedSpy.count(), 0);
3075
3076 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track},
3077 {DataTypes::DatabaseIdRole, myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track1"), QStringLiteral("artist1"), QStringLiteral("album2"), 1, 1)}},
3078 QStringLiteral("track1"), {}}}, {}, {});
3079 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track},
3080 {DataTypes::DatabaseIdRole, myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track3"), QStringLiteral("artist3"), QStringLiteral("album1"), 3, 3)}},
3081 QStringLiteral("track3"), {}}}, {}, {});
3082 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track},
3083 {DataTypes::DatabaseIdRole, myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track2"), QStringLiteral("artist1"), QStringLiteral("album2"), 2, 1)}},
3084 QStringLiteral("track2"), {}}}, {}, {});
3085 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track},
3086 {DataTypes::DatabaseIdRole, myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track1"), QStringLiteral("artist1"), QStringLiteral("album2"), 1, 1)}},
3087 QStringLiteral("track1"), {}}}, {}, {});
3088 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track},
3089 {DataTypes::DatabaseIdRole, myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track3"), QStringLiteral("artist1"), QStringLiteral("album2"), 3, 1)}},
3090 QStringLiteral("track3"), {}}}, {}, {});
3091 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track},
3092 {DataTypes::DatabaseIdRole, myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track2"), QStringLiteral("artist1"), QStringLiteral("album1"), 2, 2)}},
3093 QStringLiteral("track2"), {}}}, {}, {});
3094
3095 QCOMPARE(currentTrackChangedSpy.count(), 1);
3096 QCOMPARE(shufflePlayListChangedSpy.count(), 0);
3097 QCOMPARE(repeatModeChangedSpy.count(), 1);
3098 QCOMPARE(playListFinishedSpy.count(), 0);
3099
3100 QCOMPARE(myPlayListProxyModel.currentTrack(), QPersistentModelIndex(myPlayListProxyModel.index(0, 0)));
3101
3102 myPlayListProxyModel.skipNextTrack();
3103
3104 QCOMPARE(currentTrackChangedSpy.count(), 2);
3105 QCOMPARE(shufflePlayListChangedSpy.count(), 0);
3106 QCOMPARE(repeatModeChangedSpy.count(), 1);
3107 QCOMPARE(playListFinishedSpy.count(), 0);
3108
3109 QCOMPARE(myPlayListProxyModel.currentTrack(), QPersistentModelIndex(myPlayListProxyModel.index(1, 0)));
3110
3111 myPlayListProxyModel.skipNextTrack();
3112
3113 QCOMPARE(currentTrackChangedSpy.count(), 3);
3114 QCOMPARE(shufflePlayListChangedSpy.count(), 0);
3115 QCOMPARE(repeatModeChangedSpy.count(), 1);
3116 QCOMPARE(playListFinishedSpy.count(), 0);
3117
3118 QCOMPARE(myPlayListProxyModel.currentTrack(), QPersistentModelIndex(myPlayListProxyModel.index(2, 0)));
3119
3120 myPlayListProxyModel.skipNextTrack();
3121
3122 QCOMPARE(currentTrackChangedSpy.count(), 4);
3123 QCOMPARE(shufflePlayListChangedSpy.count(), 0);
3124 QCOMPARE(repeatModeChangedSpy.count(), 1);
3125 QCOMPARE(playListFinishedSpy.count(), 0);
3126
3127 QCOMPARE(myPlayListProxyModel.currentTrack(), QPersistentModelIndex(myPlayListProxyModel.index(3, 0)));
3128
3129 myPlayListProxyModel.skipNextTrack();
3130
3131 QCOMPARE(currentTrackChangedSpy.count(), 5);
3132 QCOMPARE(shufflePlayListChangedSpy.count(), 0);
3133 QCOMPARE(repeatModeChangedSpy.count(), 1);
3134 QCOMPARE(playListFinishedSpy.count(), 0);
3135
3136 QCOMPARE(myPlayListProxyModel.currentTrack(), QPersistentModelIndex(myPlayListProxyModel.index(4, 0)));
3137
3138 myPlayListProxyModel.skipNextTrack();
3139
3140 QCOMPARE(currentTrackChangedSpy.count(), 6);
3141 QCOMPARE(shufflePlayListChangedSpy.count(), 0);
3142 QCOMPARE(repeatModeChangedSpy.count(), 1);
3143 QCOMPARE(playListFinishedSpy.count(), 0);
3144
3145 QCOMPARE(myPlayListProxyModel.currentTrack(), QPersistentModelIndex(myPlayListProxyModel.index(5, 0)));
3146
3147 myPlayListProxyModel.skipPreviousTrack(0);
3148
3149 QCOMPARE(currentTrackChangedSpy.count(), 7);
3150 QCOMPARE(shufflePlayListChangedSpy.count(), 0);
3151 QCOMPARE(repeatModeChangedSpy.count(), 1);
3152 QCOMPARE(playListFinishedSpy.count(), 0);
3153
3154 QCOMPARE(myPlayListProxyModel.currentTrack(), QPersistentModelIndex(myPlayListProxyModel.index(4, 0)));
3155
3156 myPlayListProxyModel.skipPreviousTrack(0);
3157
3158 QCOMPARE(currentTrackChangedSpy.count(), 8);
3159 QCOMPARE(shufflePlayListChangedSpy.count(), 0);
3160 QCOMPARE(repeatModeChangedSpy.count(), 1);
3161 QCOMPARE(playListFinishedSpy.count(), 0);
3162
3163 QCOMPARE(myPlayListProxyModel.currentTrack(), QPersistentModelIndex(myPlayListProxyModel.index(3, 0)));
3164
3165 myPlayListProxyModel.skipPreviousTrack(0);
3166
3167 QCOMPARE(currentTrackChangedSpy.count(), 9);
3168 QCOMPARE(shufflePlayListChangedSpy.count(), 0);
3169 QCOMPARE(repeatModeChangedSpy.count(), 1);
3170 QCOMPARE(playListFinishedSpy.count(), 0);
3171
3172 QCOMPARE(myPlayListProxyModel.currentTrack(), QPersistentModelIndex(myPlayListProxyModel.index(2, 0)));
3173
3174 myPlayListProxyModel.skipPreviousTrack(0);
3175
3176 QCOMPARE(currentTrackChangedSpy.count(), 10);
3177 QCOMPARE(shufflePlayListChangedSpy.count(), 0);
3178 QCOMPARE(repeatModeChangedSpy.count(), 1);
3179 QCOMPARE(playListFinishedSpy.count(), 0);
3180
3181 QCOMPARE(myPlayListProxyModel.currentTrack(), QPersistentModelIndex(myPlayListProxyModel.index(1, 0)));
3182
3183 myPlayListProxyModel.skipPreviousTrack(0);
3184
3185 QCOMPARE(currentTrackChangedSpy.count(), 11);
3186 QCOMPARE(shufflePlayListChangedSpy.count(), 0);
3187 QCOMPARE(repeatModeChangedSpy.count(), 1);
3188 QCOMPARE(playListFinishedSpy.count(), 0);
3189
3190 QCOMPARE(myPlayListProxyModel.currentTrack(), QPersistentModelIndex(myPlayListProxyModel.index(0, 0)));
3191
3192 myPlayListProxyModel.skipPreviousTrack(0);
3193
3194 QCOMPARE(currentTrackChangedSpy.count(), 12);
3195 QCOMPARE(shufflePlayListChangedSpy.count(), 0);
3196 QCOMPARE(repeatModeChangedSpy.count(), 1);
3197 QCOMPARE(playListFinishedSpy.count(), 0);
3198
3199 QCOMPARE(myPlayListProxyModel.currentTrack(), QPersistentModelIndex(myPlayListProxyModel.index(5, 0)));
3200
3201 myPlayListProxyModel.setRepeatMode(MediaPlayListProxyModel::Repeat::One);
3202
3203 QCOMPARE(currentTrackChangedSpy.count(), 12);
3204 QCOMPARE(shufflePlayListChangedSpy.count(), 0);
3205 QCOMPARE(repeatModeChangedSpy.count(), 2);
3206 QCOMPARE(playListFinishedSpy.count(), 0);
3207
3208 QCOMPARE(myPlayListProxyModel.nextTrack(), QPersistentModelIndex(myPlayListProxyModel.index(5, 0)));
3209 QCOMPARE(myPlayListProxyModel.currentTrack(), QPersistentModelIndex(myPlayListProxyModel.index(5, 0)));
3210 QCOMPARE(myPlayListProxyModel.previousTrack(), QPersistentModelIndex(myPlayListProxyModel.index(5, 0)));
3211
3212 myPlayListProxyModel.skipPreviousTrack(0);
3213
3214 QCOMPARE(myPlayListProxyModel.nextTrack(), QPersistentModelIndex(myPlayListProxyModel.index(5, 0)));
3215 QCOMPARE(myPlayListProxyModel.currentTrack(), QPersistentModelIndex(myPlayListProxyModel.index(5, 0)));
3216 QCOMPARE(myPlayListProxyModel.previousTrack(), QPersistentModelIndex(myPlayListProxyModel.index(5, 0)));
3217
3218 myPlayListProxyModel.skipNextTrack();
3219
3220 QCOMPARE(myPlayListProxyModel.nextTrack(), QPersistentModelIndex(myPlayListProxyModel.index(5, 0)));
3221 QCOMPARE(myPlayListProxyModel.currentTrack(), QPersistentModelIndex(myPlayListProxyModel.index(5, 0)));
3222 QCOMPARE(myPlayListProxyModel.previousTrack(), QPersistentModelIndex(myPlayListProxyModel.index(5, 0)));
3223 }
3224
testBringUpAndRemoveMultipleNotBeginCase()3225 void MediaPlayListProxyModelTest::testBringUpAndRemoveMultipleNotBeginCase()
3226 {
3227 MediaPlayList myPlayList;
3228 QAbstractItemModelTester testModel(&myPlayList);
3229 MediaPlayListProxyModel myPlayListProxyModel;
3230 myPlayListProxyModel.setPlayListModel(&myPlayList);
3231 QAbstractItemModelTester testProxyModel(&myPlayListProxyModel);
3232 DatabaseInterface myDatabaseContent;
3233 TracksListener myListener(&myDatabaseContent);
3234
3235 QSignalSpy currentTrackChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::currentTrackChanged);
3236 QSignalSpy playListFinishedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::playListFinished);
3237
3238 myDatabaseContent.init(QStringLiteral("testDbDirectContent"));
3239
3240 connect(&myListener, &TracksListener::trackHasChanged,
3241 &myPlayList, &MediaPlayList::trackChanged,
3242 Qt::QueuedConnection);
3243 connect(&myListener, &TracksListener::tracksListAdded,
3244 &myPlayList, &MediaPlayList::tracksListAdded,
3245 Qt::QueuedConnection);
3246 connect(&myPlayList, &MediaPlayList::newTrackByNameInList,
3247 &myListener, &TracksListener::trackByNameInList,
3248 Qt::QueuedConnection);
3249 connect(&myPlayList, &MediaPlayList::newEntryInList,
3250 &myListener, &TracksListener::newEntryInList,
3251 Qt::QueuedConnection);
3252 connect(&myPlayList, &MediaPlayList::newUrlInList,
3253 &myListener, &TracksListener::newUrlInList,
3254 Qt::QueuedConnection);
3255 connect(&myDatabaseContent, &DatabaseInterface::tracksAdded,
3256 &myListener, &TracksListener::tracksAdded);
3257
3258 myDatabaseContent.insertTracksList(mNewTracks, mNewCovers);
3259
3260 QCOMPARE(currentTrackChangedSpy.count(), 0);
3261 QCOMPARE(playListFinishedSpy.count(), 0);
3262
3263 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track},
3264 {DataTypes::DatabaseIdRole, myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track1"), QStringLiteral("artist1"), QStringLiteral("album2"), 1, 1)}},
3265 QStringLiteral("track1"), {}}}, {}, {});
3266
3267 QCOMPARE(currentTrackChangedSpy.count(), 1);
3268 QCOMPARE(playListFinishedSpy.count(), 0);
3269
3270 QCOMPARE(myPlayListProxyModel.currentTrack(), QPersistentModelIndex(myPlayListProxyModel.index(0, 0)));
3271
3272 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track},
3273 {DataTypes::DatabaseIdRole, myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track2"), QStringLiteral("artist1"), QStringLiteral("album1"), 2, 2)}},
3274 QStringLiteral("track2"), {}}}, {}, {});
3275
3276 QCOMPARE(currentTrackChangedSpy.count(), 1);
3277 QCOMPARE(playListFinishedSpy.count(), 0);
3278
3279 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track},
3280 {DataTypes::DatabaseIdRole, myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track4"), QStringLiteral("artist1"), QStringLiteral("album1"), 4, 1)}},
3281 QStringLiteral("track4"), {}}}, {}, {});
3282
3283 QCOMPARE(currentTrackChangedSpy.count(), 1);
3284 QCOMPARE(playListFinishedSpy.count(), 0);
3285
3286 myPlayListProxyModel.skipNextTrack();
3287
3288 QCOMPARE(currentTrackChangedSpy.count(), 2);
3289 QCOMPARE(playListFinishedSpy.count(), 0);
3290
3291 qDebug() << myPlayListProxyModel.currentTrack() << QPersistentModelIndex(myPlayListProxyModel.index(1, 0));
3292 QCOMPARE(myPlayListProxyModel.currentTrack(), QPersistentModelIndex(myPlayListProxyModel.index(1, 0)));
3293
3294 myPlayListProxyModel.removeRow(1);
3295
3296 QCOMPARE(currentTrackChangedSpy.count(), 3);
3297 QCOMPARE(playListFinishedSpy.count(), 0);
3298
3299 QCOMPARE(myPlayListProxyModel.currentTrack(), QPersistentModelIndex(myPlayListProxyModel.index(1, 0)));
3300 }
3301
testBringUpAndPlayCase()3302 void MediaPlayListProxyModelTest::testBringUpAndPlayCase()
3303 {
3304 MediaPlayList myPlayList;
3305 QAbstractItemModelTester testModel(&myPlayList);
3306 MediaPlayListProxyModel myPlayListProxyModel;
3307 myPlayListProxyModel.setPlayListModel(&myPlayList);
3308 QAbstractItemModelTester testProxyModel(&myPlayListProxyModel);
3309 DatabaseInterface myDatabaseContent;
3310 TracksListener myListener(&myDatabaseContent);
3311
3312 QSignalSpy currentTrackChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::currentTrackChanged);
3313 QSignalSpy playListFinishedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::playListFinished);
3314
3315 myDatabaseContent.init(QStringLiteral("testDbDirectContent"));
3316
3317 connect(&myListener, &TracksListener::trackHasChanged,
3318 &myPlayList, &MediaPlayList::trackChanged,
3319 Qt::QueuedConnection);
3320 connect(&myListener, &TracksListener::tracksListAdded,
3321 &myPlayList, &MediaPlayList::tracksListAdded,
3322 Qt::QueuedConnection);
3323 connect(&myPlayList, &MediaPlayList::newTrackByNameInList,
3324 &myListener, &TracksListener::trackByNameInList,
3325 Qt::QueuedConnection);
3326 connect(&myPlayList, &MediaPlayList::newEntryInList,
3327 &myListener, &TracksListener::newEntryInList,
3328 Qt::QueuedConnection);
3329 connect(&myPlayList, &MediaPlayList::newUrlInList,
3330 &myListener, &TracksListener::newUrlInList,
3331 Qt::QueuedConnection);
3332 connect(&myDatabaseContent, &DatabaseInterface::tracksAdded,
3333 &myListener, &TracksListener::tracksAdded);
3334
3335 myDatabaseContent.insertTracksList(mNewTracks, mNewCovers);
3336
3337 QCOMPARE(currentTrackChangedSpy.count(), 0);
3338 QCOMPARE(playListFinishedSpy.count(), 0);
3339
3340 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track},
3341 {DataTypes::DatabaseIdRole, myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track1"), QStringLiteral("artist1"), QStringLiteral("album2"), 1, 1)}},
3342 QStringLiteral("track1"), {}}}, {}, {});
3343 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track},
3344 {DataTypes::DatabaseIdRole, myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track3"), QStringLiteral("artist2"), QStringLiteral("album1"), 3, 3)}},
3345 QStringLiteral("track3"), {}}}, {}, {});
3346
3347 QCOMPARE(currentTrackChangedSpy.count(), 1);
3348 QCOMPARE(playListFinishedSpy.count(), 0);
3349
3350 QCOMPARE(myPlayListProxyModel.currentTrack(), QPersistentModelIndex(myPlayListProxyModel.index(0, 0)));
3351
3352 myPlayListProxyModel.skipNextTrack();
3353
3354 QCOMPARE(currentTrackChangedSpy.count(), 2);
3355 QCOMPARE(playListFinishedSpy.count(), 0);
3356
3357 QCOMPARE(myPlayListProxyModel.currentTrack(), QPersistentModelIndex(myPlayListProxyModel.index(1, 0)));
3358 }
3359
testBringUpAndSkipNextCase()3360 void MediaPlayListProxyModelTest::testBringUpAndSkipNextCase()
3361 {
3362 MediaPlayList myPlayList;
3363 QAbstractItemModelTester testModel(&myPlayList);
3364 MediaPlayListProxyModel myPlayListProxyModel;
3365 myPlayListProxyModel.setPlayListModel(&myPlayList);
3366 QAbstractItemModelTester testProxyModel(&myPlayListProxyModel);
3367 DatabaseInterface myDatabaseContent;
3368 TracksListener myListener(&myDatabaseContent);
3369
3370 QSignalSpy currentTrackChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::currentTrackChanged);
3371 QSignalSpy playListFinishedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::playListFinished);
3372
3373 myDatabaseContent.init(QStringLiteral("testDbDirectContent"));
3374
3375 connect(&myListener, &TracksListener::trackHasChanged,
3376 &myPlayList, &MediaPlayList::trackChanged,
3377 Qt::QueuedConnection);
3378 connect(&myListener, &TracksListener::tracksListAdded,
3379 &myPlayList, &MediaPlayList::tracksListAdded,
3380 Qt::QueuedConnection);
3381 connect(&myPlayList, &MediaPlayList::newTrackByNameInList,
3382 &myListener, &TracksListener::trackByNameInList,
3383 Qt::QueuedConnection);
3384 connect(&myPlayList, &MediaPlayList::newEntryInList,
3385 &myListener, &TracksListener::newEntryInList,
3386 Qt::QueuedConnection);
3387 connect(&myPlayList, &MediaPlayList::newUrlInList,
3388 &myListener, &TracksListener::newUrlInList,
3389 Qt::QueuedConnection);
3390 connect(&myDatabaseContent, &DatabaseInterface::tracksAdded,
3391 &myListener, &TracksListener::tracksAdded);
3392
3393 myDatabaseContent.insertTracksList(mNewTracks, mNewCovers);
3394
3395 QCOMPARE(currentTrackChangedSpy.count(), 0);
3396 QCOMPARE(playListFinishedSpy.count(), 0);
3397
3398 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track},
3399 {DataTypes::DatabaseIdRole, myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track1"), QStringLiteral("artist1"), QStringLiteral("album2"), 1, 1)}},
3400 QStringLiteral("track1"), {}}}, {}, {});
3401 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track},
3402 {DataTypes::DatabaseIdRole, myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track3"), QStringLiteral("artist2"), QStringLiteral("album1"), 3, 3)}},
3403 QStringLiteral("track3"), {}}}, {}, {});
3404
3405 QCOMPARE(currentTrackChangedSpy.count(), 1);
3406 QCOMPARE(playListFinishedSpy.count(), 0);
3407
3408 QCOMPARE(myPlayListProxyModel.currentTrack(), QPersistentModelIndex(myPlayListProxyModel.index(0, 0)));
3409
3410 myPlayListProxyModel.skipNextTrack();
3411
3412 QCOMPARE(currentTrackChangedSpy.count(), 2);
3413 QCOMPARE(playListFinishedSpy.count(), 0);
3414
3415 QCOMPARE(myPlayListProxyModel.currentTrack(), QPersistentModelIndex(myPlayListProxyModel.index(1, 0)));
3416 }
3417
testBringUpAndSkipPreviousCase()3418 void MediaPlayListProxyModelTest::testBringUpAndSkipPreviousCase()
3419 {
3420 MediaPlayList myPlayList;
3421 QAbstractItemModelTester testModel(&myPlayList);
3422 MediaPlayListProxyModel myPlayListProxyModel;
3423 myPlayListProxyModel.setPlayListModel(&myPlayList);
3424 QAbstractItemModelTester testProxyModel(&myPlayListProxyModel);
3425 DatabaseInterface myDatabaseContent;
3426 TracksListener myListener(&myDatabaseContent);
3427
3428 QSignalSpy currentTrackChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::currentTrackChanged);
3429 QSignalSpy playListFinishedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::playListFinished);
3430
3431 myDatabaseContent.init(QStringLiteral("testDbDirectContent"));
3432
3433 connect(&myListener, &TracksListener::trackHasChanged,
3434 &myPlayList, &MediaPlayList::trackChanged,
3435 Qt::QueuedConnection);
3436 connect(&myListener, &TracksListener::tracksListAdded,
3437 &myPlayList, &MediaPlayList::tracksListAdded,
3438 Qt::QueuedConnection);
3439 connect(&myPlayList, &MediaPlayList::newTrackByNameInList,
3440 &myListener, &TracksListener::trackByNameInList,
3441 Qt::QueuedConnection);
3442 connect(&myPlayList, &MediaPlayList::newEntryInList,
3443 &myListener, &TracksListener::newEntryInList,
3444 Qt::QueuedConnection);
3445 connect(&myPlayList, &MediaPlayList::newUrlInList,
3446 &myListener, &TracksListener::newUrlInList,
3447 Qt::QueuedConnection);
3448 connect(&myDatabaseContent, &DatabaseInterface::tracksAdded,
3449 &myListener, &TracksListener::tracksAdded);
3450
3451 myDatabaseContent.insertTracksList(mNewTracks, mNewCovers);
3452
3453 QCOMPARE(currentTrackChangedSpy.count(), 0);
3454 QCOMPARE(playListFinishedSpy.count(), 0);
3455
3456 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track},
3457 {DataTypes::DatabaseIdRole, myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track1"), QStringLiteral("artist1"), QStringLiteral("album2"), 1, 1)}},
3458 QStringLiteral("track1"), {}}}, {}, {});
3459 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track},
3460 {DataTypes::DatabaseIdRole, myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track3"), QStringLiteral("artist2"), QStringLiteral("album1"), 3, 3)}},
3461 QStringLiteral("track3"), {}}}, {}, {});
3462
3463 QCOMPARE(currentTrackChangedSpy.count(), 1);
3464 QCOMPARE(playListFinishedSpy.count(), 0);
3465
3466 QCOMPARE(myPlayListProxyModel.currentTrack(), QPersistentModelIndex(myPlayListProxyModel.index(0, 0)));
3467
3468 myPlayListProxyModel.skipNextTrack();
3469
3470 QCOMPARE(currentTrackChangedSpy.count(), 2);
3471 QCOMPARE(playListFinishedSpy.count(), 0);
3472
3473 QCOMPARE(myPlayListProxyModel.currentTrack(), QPersistentModelIndex(myPlayListProxyModel.index(1, 0)));
3474
3475 myPlayListProxyModel.skipPreviousTrack(0);
3476
3477 QCOMPARE(currentTrackChangedSpy.count(), 3);
3478 QCOMPARE(playListFinishedSpy.count(), 0);
3479
3480 QCOMPARE(myPlayListProxyModel.currentTrack(), QPersistentModelIndex(myPlayListProxyModel.index(0, 0)));
3481 }
3482
testBringUpAndSkipPreviousWithSeekCase()3483 void MediaPlayListProxyModelTest::testBringUpAndSkipPreviousWithSeekCase()
3484 {
3485 MediaPlayList myPlayList;
3486 QAbstractItemModelTester testModel(&myPlayList);
3487 MediaPlayListProxyModel myPlayListProxyModel;
3488 myPlayListProxyModel.setPlayListModel(&myPlayList);
3489 QAbstractItemModelTester testProxyModel(&myPlayListProxyModel);
3490 DatabaseInterface myDatabaseContent;
3491 TracksListener myListener(&myDatabaseContent);
3492
3493 QSignalSpy currentTrackChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::currentTrackChanged);
3494 QSignalSpy playListFinishedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::playListFinished);
3495 QSignalSpy trackSeekedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::seek);
3496
3497 myDatabaseContent.init(QStringLiteral("testDbDirectContent"));
3498
3499 connect(&myListener, &TracksListener::trackHasChanged,
3500 &myPlayList, &MediaPlayList::trackChanged,
3501 Qt::QueuedConnection);
3502 connect(&myListener, &TracksListener::tracksListAdded,
3503 &myPlayList, &MediaPlayList::tracksListAdded,
3504 Qt::QueuedConnection);
3505 connect(&myPlayList, &MediaPlayList::newTrackByNameInList,
3506 &myListener, &TracksListener::trackByNameInList,
3507 Qt::QueuedConnection);
3508 connect(&myPlayList, &MediaPlayList::newEntryInList,
3509 &myListener, &TracksListener::newEntryInList,
3510 Qt::QueuedConnection);
3511 connect(&myPlayList, &MediaPlayList::newUrlInList,
3512 &myListener, &TracksListener::newUrlInList,
3513 Qt::QueuedConnection);
3514 connect(&myDatabaseContent, &DatabaseInterface::tracksAdded,
3515 &myListener, &TracksListener::tracksAdded);
3516
3517 myDatabaseContent.insertTracksList(mNewTracks, mNewCovers);
3518
3519 QCOMPARE(currentTrackChangedSpy.count(), 0);
3520 QCOMPARE(playListFinishedSpy.count(), 0);
3521
3522 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track},
3523 {DataTypes::DatabaseIdRole, myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track1"), QStringLiteral("artist1"), QStringLiteral("album2"), 1, 1)}},
3524 QStringLiteral("track1"), {}}}, {}, {});
3525 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track},
3526 {DataTypes::DatabaseIdRole, myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track3"), QStringLiteral("artist2"), QStringLiteral("album1"), 3, 3)}},
3527 QStringLiteral("track3"), {}}}, {}, {});
3528
3529 QCOMPARE(currentTrackChangedSpy.count(), 1);
3530 QCOMPARE(playListFinishedSpy.count(), 0);
3531 QCOMPARE(trackSeekedSpy.count(), 0);
3532
3533 QCOMPARE(myPlayListProxyModel.currentTrack(), QPersistentModelIndex(myPlayListProxyModel.index(0, 0)));
3534
3535 myPlayListProxyModel.skipNextTrack();
3536
3537 QCOMPARE(currentTrackChangedSpy.count(), 2);
3538 QCOMPARE(playListFinishedSpy.count(), 0);
3539 QCOMPARE(trackSeekedSpy.count(), 0);
3540
3541 QCOMPARE(myPlayListProxyModel.currentTrack(), QPersistentModelIndex(myPlayListProxyModel.index(1, 0)));
3542
3543 myPlayListProxyModel.skipPreviousTrack(10000);
3544
3545 QCOMPARE(currentTrackChangedSpy.count(), 2);
3546 QCOMPARE(playListFinishedSpy.count(), 0);
3547 QCOMPARE(trackSeekedSpy.count(), 1);
3548
3549 myPlayListProxyModel.skipPreviousTrack(0);
3550
3551 QCOMPARE(currentTrackChangedSpy.count(), 3);
3552 QCOMPARE(playListFinishedSpy.count(), 0);
3553 QCOMPARE(trackSeekedSpy.count(), 1);
3554
3555 QCOMPARE(myPlayListProxyModel.currentTrack(), QPersistentModelIndex(myPlayListProxyModel.index(0, 0)));
3556 }
3557
testRemoveSelection()3558 void MediaPlayListProxyModelTest::testRemoveSelection()
3559 {
3560 MediaPlayList myPlayList;
3561 QAbstractItemModelTester testModel(&myPlayList);
3562 MediaPlayListProxyModel myPlayListProxyModel;
3563 myPlayListProxyModel.setPlayListModel(&myPlayList);
3564 QAbstractItemModelTester testProxyModel(&myPlayListProxyModel);
3565 DatabaseInterface myDatabaseContent;
3566 TracksListener myListener(&myDatabaseContent);
3567
3568 QSignalSpy rowsAboutToBeMovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsAboutToBeMoved);
3569 QSignalSpy rowsAboutToBeRemovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsAboutToBeRemoved);
3570 QSignalSpy rowsAboutToBeInsertedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsAboutToBeInserted);
3571 QSignalSpy rowsMovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsMoved);
3572 QSignalSpy rowsRemovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsRemoved);
3573 QSignalSpy rowsInsertedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsInserted);
3574 QSignalSpy persistentStateChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::persistentStateChanged);
3575 QSignalSpy dataChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::dataChanged);
3576 QSignalSpy newTrackByNameInListSpy(&myPlayList, &MediaPlayList::newTrackByNameInList);
3577 QSignalSpy newEntryInListSpy(&myPlayList, &MediaPlayList::newEntryInList);
3578 QSignalSpy newUrlInListSpy(&myPlayList, &MediaPlayList::newUrlInList);
3579
3580 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
3581 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
3582 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 0);
3583 QCOMPARE(rowsRemovedSpy.count(), 0);
3584 QCOMPARE(rowsMovedSpy.count(), 0);
3585 QCOMPARE(rowsInsertedSpy.count(), 0);
3586 QCOMPARE(persistentStateChangedSpy.count(), 0);
3587 QCOMPARE(dataChangedSpy.count(), 0);
3588 QCOMPARE(newTrackByNameInListSpy.count(), 0);
3589 QCOMPARE(newEntryInListSpy.count(), 0);
3590
3591 myDatabaseContent.init(QStringLiteral("testDbDirectContent"));
3592
3593 connect(&myListener, &TracksListener::trackHasChanged,
3594 &myPlayList, &MediaPlayList::trackChanged,
3595 Qt::QueuedConnection);
3596 connect(&myListener, &TracksListener::tracksListAdded,
3597 &myPlayList, &MediaPlayList::tracksListAdded,
3598 Qt::QueuedConnection);
3599 connect(&myPlayList, &MediaPlayList::newTrackByNameInList,
3600 &myListener, &TracksListener::trackByNameInList,
3601 Qt::QueuedConnection);
3602 connect(&myPlayList, &MediaPlayList::newEntryInList,
3603 &myListener, &TracksListener::newEntryInList,
3604 Qt::QueuedConnection);
3605 connect(&myPlayList, &MediaPlayList::newUrlInList,
3606 &myListener, &TracksListener::newUrlInList,
3607 Qt::QueuedConnection);
3608 connect(&myDatabaseContent, &DatabaseInterface::tracksAdded,
3609 &myListener, &TracksListener::tracksAdded);
3610
3611 myDatabaseContent.insertTracksList(mNewTracks, mNewCovers);
3612
3613 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
3614 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
3615 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 0);
3616 QCOMPARE(rowsRemovedSpy.count(), 0);
3617 QCOMPARE(rowsMovedSpy.count(), 0);
3618 QCOMPARE(rowsInsertedSpy.count(), 0);
3619 QCOMPARE(persistentStateChangedSpy.count(), 0);
3620 QCOMPARE(dataChangedSpy.count(), 0);
3621 QCOMPARE(newTrackByNameInListSpy.count(), 0);
3622 QCOMPARE(newEntryInListSpy.count(), 0);
3623
3624 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Artist}}, QStringLiteral("artist1"), {}}},
3625 ElisaUtils::PlayListEnqueueMode::ReplacePlayList, ElisaUtils::PlayListEnqueueTriggerPlay::TriggerPlay);
3626
3627 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
3628 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
3629 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 1);
3630 QCOMPARE(rowsRemovedSpy.count(), 0);
3631 QCOMPARE(rowsMovedSpy.count(), 0);
3632 QCOMPARE(rowsInsertedSpy.count(), 1);
3633 QCOMPARE(persistentStateChangedSpy.count(), 1);
3634 QCOMPARE(dataChangedSpy.count(), 0);
3635 QCOMPARE(newTrackByNameInListSpy.count(), 0);
3636 QCOMPARE(newEntryInListSpy.count(), 1);
3637
3638 QCOMPARE(rowsAboutToBeInsertedSpy.wait(), true);
3639
3640 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 1);
3641 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
3642 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 2);
3643 QCOMPARE(rowsRemovedSpy.count(),1);
3644 QCOMPARE(rowsMovedSpy.count(), 0);
3645 QCOMPARE(rowsInsertedSpy.count(), 2);
3646 QCOMPARE(persistentStateChangedSpy.count(), 3);
3647 QCOMPARE(dataChangedSpy.count(), 0);
3648 QCOMPARE(newTrackByNameInListSpy.count(), 0);
3649 QCOMPARE(newEntryInListSpy.count(), 1);
3650
3651 QCOMPARE(myPlayListProxyModel.tracksCount(), 6);
3652
3653 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::IsValidRole).toBool(), true);
3654 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::TitleRole).toString(), QStringLiteral("track1"));
3655 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::ArtistRole).toString(), QStringLiteral("artist1"));
3656 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::AlbumArtistRole).toString(), QStringLiteral("Various Artists"));
3657 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::AlbumRole).toString(), QStringLiteral("album1"));
3658 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::TrackNumberRole).toInt(), 1);
3659 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::DiscNumberRole).toInt(), 1);
3660 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::ColumnsRoles::IsValidRole).toBool(), true);
3661 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::ColumnsRoles::TitleRole).toString(), QStringLiteral("track1"));
3662 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::ColumnsRoles::ArtistRole).toString(), QStringLiteral("artist1"));
3663 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::ColumnsRoles::AlbumArtistRole).toString(), QStringLiteral("artist1"));
3664 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::ColumnsRoles::AlbumRole).toString(), QStringLiteral("album2"));
3665 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::ColumnsRoles::TrackNumberRole).toInt(), 1);
3666 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::ColumnsRoles::DiscNumberRole).toInt(), 1);
3667 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::ColumnsRoles::IsValidRole).toBool(), true);
3668 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::ColumnsRoles::TitleRole).toString(), QStringLiteral("track2"));
3669 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::ColumnsRoles::ArtistRole).toString(), QStringLiteral("artist1"));
3670 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::ColumnsRoles::AlbumArtistRole).toString(), QStringLiteral("artist1"));
3671 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::ColumnsRoles::AlbumRole).toString(), QStringLiteral("album2"));
3672 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::ColumnsRoles::TrackNumberRole).toInt(), 2);
3673 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::ColumnsRoles::DiscNumberRole).toInt(), 1);
3674 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(3, 0), MediaPlayList::ColumnsRoles::IsValidRole).toBool(), true);
3675 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(3, 0), MediaPlayList::ColumnsRoles::TitleRole).toString(), QStringLiteral("track3"));
3676 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(3, 0), MediaPlayList::ColumnsRoles::ArtistRole).toString(), QStringLiteral("artist1"));
3677 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(3, 0), MediaPlayList::ColumnsRoles::AlbumArtistRole).toString(), QStringLiteral("artist1"));
3678 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(3, 0), MediaPlayList::ColumnsRoles::AlbumRole).toString(), QStringLiteral("album2"));
3679 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(3, 0), MediaPlayList::ColumnsRoles::TrackNumberRole).toInt(), 3);
3680 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(3, 0), MediaPlayList::ColumnsRoles::DiscNumberRole).toInt(), 1);
3681 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(4, 0), MediaPlayList::ColumnsRoles::IsValidRole).toBool(), true);
3682 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(4, 0), MediaPlayList::ColumnsRoles::TitleRole).toString(), QStringLiteral("track4"));
3683 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(4, 0), MediaPlayList::ColumnsRoles::ArtistRole).toString(), QStringLiteral("artist1"));
3684 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(4, 0), MediaPlayList::ColumnsRoles::AlbumArtistRole).toString(), QStringLiteral("artist1"));
3685 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(4, 0), MediaPlayList::ColumnsRoles::AlbumRole).toString(), QStringLiteral("album2"));
3686 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(4, 0), MediaPlayList::ColumnsRoles::TrackNumberRole).toInt(), 4);
3687 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(4, 0), MediaPlayList::ColumnsRoles::DiscNumberRole).toInt(), 1);
3688 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(5, 0), MediaPlayList::ColumnsRoles::IsValidRole).toBool(), true);
3689 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(5, 0), MediaPlayList::ColumnsRoles::TitleRole).toString(), QStringLiteral("track5"));
3690 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(5, 0), MediaPlayList::ColumnsRoles::ArtistRole).toString(), QStringLiteral("artist1"));
3691 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(5, 0), MediaPlayList::ColumnsRoles::AlbumArtistRole).toString(), QStringLiteral("artist1"));
3692 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(5, 0), MediaPlayList::ColumnsRoles::AlbumRole).toString(), QStringLiteral("album2"));
3693 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(5, 0), MediaPlayList::ColumnsRoles::TrackNumberRole).toInt(), 5);
3694 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(5, 0), MediaPlayList::ColumnsRoles::DiscNumberRole).toInt(), 1);
3695
3696 myPlayListProxyModel.removeSelection({2, 4, 5});
3697
3698 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 4);
3699 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
3700 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 2);
3701 QCOMPARE(rowsRemovedSpy.count(), 4);
3702 QCOMPARE(rowsMovedSpy.count(), 0);
3703 QCOMPARE(rowsInsertedSpy.count(), 2);
3704 QCOMPARE(persistentStateChangedSpy.count(), 6);
3705 QCOMPARE(dataChangedSpy.count(), 0);
3706 QCOMPARE(newTrackByNameInListSpy.count(), 0);
3707 QCOMPARE(newEntryInListSpy.count(), 1);
3708
3709 QCOMPARE(myPlayListProxyModel.tracksCount(), 3);
3710
3711 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::IsValidRole).toBool(), true);
3712 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::TitleRole).toString(), QStringLiteral("track1"));
3713 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::ArtistRole).toString(), QStringLiteral("artist1"));
3714 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::AlbumArtistRole).toString(), QStringLiteral("Various Artists"));
3715 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::AlbumRole).toString(), QStringLiteral("album1"));
3716 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::TrackNumberRole).toInt(), 1);
3717 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::DiscNumberRole).toInt(), 1);
3718 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::ColumnsRoles::IsValidRole).toBool(), true);
3719 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::ColumnsRoles::TitleRole).toString(), QStringLiteral("track1"));
3720 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::ColumnsRoles::ArtistRole).toString(), QStringLiteral("artist1"));
3721 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::ColumnsRoles::AlbumArtistRole).toString(), QStringLiteral("artist1"));
3722 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::ColumnsRoles::AlbumRole).toString(), QStringLiteral("album2"));
3723 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::ColumnsRoles::TrackNumberRole).toInt(), 1);
3724 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::ColumnsRoles::DiscNumberRole).toInt(), 1);
3725 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::ColumnsRoles::IsValidRole).toBool(), true);
3726 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::ColumnsRoles::TitleRole).toString(), QStringLiteral("track3"));
3727 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::ColumnsRoles::ArtistRole).toString(), QStringLiteral("artist1"));
3728 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::ColumnsRoles::AlbumArtistRole).toString(), QStringLiteral("artist1"));
3729 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::ColumnsRoles::AlbumRole).toString(), QStringLiteral("album2"));
3730 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::ColumnsRoles::TrackNumberRole).toInt(), 3);
3731 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::ColumnsRoles::DiscNumberRole).toInt(), 1);
3732 }
3733
testReplaceAndPlayArtist()3734 void MediaPlayListProxyModelTest::testReplaceAndPlayArtist()
3735 {
3736 MediaPlayList myPlayList;
3737 QAbstractItemModelTester testModel(&myPlayList);
3738 MediaPlayListProxyModel myPlayListProxyModel;
3739 myPlayListProxyModel.setPlayListModel(&myPlayList);
3740 QAbstractItemModelTester testProxyModel(&myPlayListProxyModel);
3741 DatabaseInterface myDatabaseContent;
3742 TracksListener myListener(&myDatabaseContent);
3743
3744 QSignalSpy rowsAboutToBeMovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsAboutToBeMoved);
3745 QSignalSpy rowsAboutToBeRemovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsAboutToBeRemoved);
3746 QSignalSpy rowsAboutToBeInsertedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsAboutToBeInserted);
3747 QSignalSpy rowsMovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsMoved);
3748 QSignalSpy rowsRemovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsRemoved);
3749 QSignalSpy rowsInsertedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsInserted);
3750 QSignalSpy persistentStateChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::persistentStateChanged);
3751 QSignalSpy dataChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::dataChanged);
3752 QSignalSpy newTrackByNameInListSpy(&myPlayList, &MediaPlayList::newTrackByNameInList);
3753 QSignalSpy newEntryInListSpy(&myPlayList, &MediaPlayList::newEntryInList);
3754 QSignalSpy newUrlInListSpy(&myPlayList, &MediaPlayList::newUrlInList);
3755
3756 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
3757 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
3758 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 0);
3759 QCOMPARE(rowsRemovedSpy.count(), 0);
3760 QCOMPARE(rowsMovedSpy.count(), 0);
3761 QCOMPARE(rowsInsertedSpy.count(), 0);
3762 QCOMPARE(persistentStateChangedSpy.count(), 0);
3763 QCOMPARE(dataChangedSpy.count(), 0);
3764 QCOMPARE(newTrackByNameInListSpy.count(), 0);
3765 QCOMPARE(newEntryInListSpy.count(), 0);
3766
3767 myDatabaseContent.init(QStringLiteral("testDbDirectContent"));
3768
3769 connect(&myListener, &TracksListener::trackHasChanged,
3770 &myPlayList, &MediaPlayList::trackChanged,
3771 Qt::QueuedConnection);
3772 connect(&myListener, &TracksListener::tracksListAdded,
3773 &myPlayList, &MediaPlayList::tracksListAdded,
3774 Qt::QueuedConnection);
3775 connect(&myPlayList, &MediaPlayList::newTrackByNameInList,
3776 &myListener, &TracksListener::trackByNameInList,
3777 Qt::QueuedConnection);
3778 connect(&myPlayList, &MediaPlayList::newEntryInList,
3779 &myListener, &TracksListener::newEntryInList,
3780 Qt::QueuedConnection);
3781 connect(&myPlayList, &MediaPlayList::newUrlInList,
3782 &myListener, &TracksListener::newUrlInList,
3783 Qt::QueuedConnection);
3784 connect(&myDatabaseContent, &DatabaseInterface::tracksAdded,
3785 &myListener, &TracksListener::tracksAdded);
3786
3787 myDatabaseContent.insertTracksList(mNewTracks, mNewCovers);
3788
3789 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
3790 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
3791 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 0);
3792 QCOMPARE(rowsRemovedSpy.count(), 0);
3793 QCOMPARE(rowsMovedSpy.count(), 0);
3794 QCOMPARE(rowsInsertedSpy.count(), 0);
3795 QCOMPARE(persistentStateChangedSpy.count(), 0);
3796 QCOMPARE(dataChangedSpy.count(), 0);
3797 QCOMPARE(newTrackByNameInListSpy.count(), 0);
3798 QCOMPARE(newEntryInListSpy.count(), 0);
3799
3800 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Artist}}, QStringLiteral("artist3"), {}}},
3801 ElisaUtils::PlayListEnqueueMode::ReplacePlayList, ElisaUtils::PlayListEnqueueTriggerPlay::TriggerPlay);
3802
3803 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
3804 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
3805 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 1);
3806 QCOMPARE(rowsRemovedSpy.count(), 0);
3807 QCOMPARE(rowsMovedSpy.count(), 0);
3808 QCOMPARE(rowsInsertedSpy.count(), 1);
3809 QCOMPARE(persistentStateChangedSpy.count(), 1);
3810 QCOMPARE(dataChangedSpy.count(), 0);
3811 QCOMPARE(newTrackByNameInListSpy.count(), 0);
3812 QCOMPARE(newEntryInListSpy.count(), 1);
3813
3814 QCOMPARE(rowsAboutToBeInsertedSpy.wait(), true);
3815
3816 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 1);
3817 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
3818 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 2);
3819 QCOMPARE(rowsRemovedSpy.count(), 1);
3820 QCOMPARE(rowsMovedSpy.count(), 0);
3821 QCOMPARE(rowsInsertedSpy.count(), 2);
3822 QCOMPARE(persistentStateChangedSpy.count(), 3);
3823 QCOMPARE(dataChangedSpy.count(), 0);
3824 QCOMPARE(newTrackByNameInListSpy.count(), 0);
3825 QCOMPARE(newEntryInListSpy.count(), 1);
3826
3827 QCOMPARE(myPlayListProxyModel.tracksCount(), 1);
3828
3829 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::IsValidRole).toBool(), true);
3830 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::TitleRole).toString(), QStringLiteral("track3"));
3831 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::DurationRole).toTime().msecsSinceStartOfDay(), 3);
3832 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::ArtistRole).toString(), QStringLiteral("artist3"));
3833 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::AlbumArtistRole).toString(), QStringLiteral("Various Artists"));
3834 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::AlbumRole).toString(), QStringLiteral("album1"));
3835 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::TrackNumberRole).toInt(), 3);
3836 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::DiscNumberRole).toInt(), 3);
3837 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::ImageUrlRole).toUrl(), QUrl::fromLocalFile(QStringLiteral("album1")));
3838 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::ResourceRole).toUrl(), QUrl::fromUserInput(QStringLiteral("/$3")));
3839 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::IsPlayingRole).toBool(), false);
3840 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::IsSingleDiscAlbumRole).toBool(), false);
3841
3842 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Artist}}, QStringLiteral("artist4"), {}}},
3843 ElisaUtils::PlayListEnqueueMode::ReplacePlayList, ElisaUtils::PlayListEnqueueTriggerPlay::TriggerPlay);
3844
3845 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 2);
3846 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
3847 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 3);
3848 QCOMPARE(rowsRemovedSpy.count(), 2);
3849 QCOMPARE(rowsMovedSpy.count(), 0);
3850 QCOMPARE(rowsInsertedSpy.count(), 3);
3851 QCOMPARE(persistentStateChangedSpy.count(), 5);
3852 QCOMPARE(dataChangedSpy.count(), 0);
3853 QCOMPARE(newTrackByNameInListSpy.count(), 0);
3854 QCOMPARE(newEntryInListSpy.count(), 2);
3855
3856 QCOMPARE(rowsAboutToBeInsertedSpy.wait(), true);
3857
3858 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 3);
3859 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
3860 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 4);
3861 QCOMPARE(rowsRemovedSpy.count(), 3);
3862 QCOMPARE(rowsMovedSpy.count(), 0);
3863 QCOMPARE(rowsInsertedSpy.count(), 4);
3864 QCOMPARE(persistentStateChangedSpy.count(), 7);
3865 QCOMPARE(dataChangedSpy.count(), 0);
3866 QCOMPARE(newTrackByNameInListSpy.count(), 0);
3867 QCOMPARE(newEntryInListSpy.count(), 2);
3868
3869 QCOMPARE(myPlayListProxyModel.tracksCount(), 1);
3870
3871 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::IsValidRole).toBool(), true);
3872 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::TitleRole).toString(), QStringLiteral("track4"));
3873 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::DurationRole).toTime().msecsSinceStartOfDay(), 4);
3874 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::ArtistRole).toString(), QStringLiteral("artist4"));
3875 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::AlbumArtistRole).toString(), QStringLiteral("Various Artists"));
3876 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::AlbumRole).toString(), QStringLiteral("album1"));
3877 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::TrackNumberRole).toInt(), 4);
3878 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::DiscNumberRole).toInt(), 4);
3879 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::ImageUrlRole).toUrl(), QUrl::fromLocalFile(QStringLiteral("album1")));
3880 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::ResourceRole).toUrl(), QUrl::fromUserInput(QStringLiteral("/$4")));
3881 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::IsPlayingRole).toBool(), false);
3882 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::IsSingleDiscAlbumRole).toBool(), false);
3883 }
3884
testReplaceAndPlayTrackId()3885 void MediaPlayListProxyModelTest::testReplaceAndPlayTrackId()
3886 {
3887 MediaPlayList myPlayList;
3888 QAbstractItemModelTester testModel(&myPlayList);
3889 MediaPlayListProxyModel myPlayListProxyModel;
3890 myPlayListProxyModel.setPlayListModel(&myPlayList);
3891 QAbstractItemModelTester testProxyModel(&myPlayListProxyModel);
3892 DatabaseInterface myDatabaseContent;
3893 TracksListener myListener(&myDatabaseContent);
3894
3895 QSignalSpy rowsAboutToBeMovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsAboutToBeMoved);
3896 QSignalSpy rowsAboutToBeRemovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsAboutToBeRemoved);
3897 QSignalSpy rowsAboutToBeInsertedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsAboutToBeInserted);
3898 QSignalSpy rowsMovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsMoved);
3899 QSignalSpy rowsRemovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsRemoved);
3900 QSignalSpy rowsInsertedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsInserted);
3901 QSignalSpy persistentStateChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::persistentStateChanged);
3902 QSignalSpy dataChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::dataChanged);
3903 QSignalSpy newTrackByNameInListSpy(&myPlayList, &MediaPlayList::newTrackByNameInList);
3904 QSignalSpy newEntryInListSpy(&myPlayList, &MediaPlayList::newEntryInList);
3905 QSignalSpy newUrlInListSpy(&myPlayList, &MediaPlayList::newUrlInList);
3906
3907 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
3908 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
3909 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 0);
3910 QCOMPARE(rowsRemovedSpy.count(), 0);
3911 QCOMPARE(rowsMovedSpy.count(), 0);
3912 QCOMPARE(rowsInsertedSpy.count(), 0);
3913 QCOMPARE(persistentStateChangedSpy.count(), 0);
3914 QCOMPARE(dataChangedSpy.count(), 0);
3915 QCOMPARE(newTrackByNameInListSpy.count(), 0);
3916 QCOMPARE(newEntryInListSpy.count(), 0);
3917
3918 myDatabaseContent.init(QStringLiteral("testDbDirectContent"));
3919
3920 connect(&myListener, &TracksListener::trackHasChanged,
3921 &myPlayList, &MediaPlayList::trackChanged,
3922 Qt::QueuedConnection);
3923 connect(&myListener, &TracksListener::tracksListAdded,
3924 &myPlayList, &MediaPlayList::tracksListAdded,
3925 Qt::QueuedConnection);
3926 connect(&myPlayList, &MediaPlayList::newTrackByNameInList,
3927 &myListener, &TracksListener::trackByNameInList,
3928 Qt::QueuedConnection);
3929 connect(&myPlayList, &MediaPlayList::newEntryInList,
3930 &myListener, &TracksListener::newEntryInList,
3931 Qt::QueuedConnection);
3932 connect(&myPlayList, &MediaPlayList::newUrlInList,
3933 &myListener, &TracksListener::newUrlInList,
3934 Qt::QueuedConnection);
3935 connect(&myDatabaseContent, &DatabaseInterface::tracksAdded,
3936 &myListener, &TracksListener::tracksAdded);
3937
3938 myDatabaseContent.insertTracksList(mNewTracks, mNewCovers);
3939
3940 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
3941 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
3942 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 0);
3943 QCOMPARE(rowsRemovedSpy.count(), 0);
3944 QCOMPARE(rowsMovedSpy.count(), 0);
3945 QCOMPARE(rowsInsertedSpy.count(), 0);
3946 QCOMPARE(persistentStateChangedSpy.count(), 0);
3947 QCOMPARE(dataChangedSpy.count(), 0);
3948 QCOMPARE(newTrackByNameInListSpy.count(), 0);
3949 QCOMPARE(newEntryInListSpy.count(), 0);
3950
3951 auto firstTrackId = myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track3"), QStringLiteral("artist3"),
3952 QStringLiteral("album1"), 3, 3);
3953
3954 QCOMPARE(firstTrackId != 0, true);
3955
3956 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track}, {DataTypes::DatabaseIdRole, firstTrackId}}, {}, {}}},
3957 ElisaUtils::PlayListEnqueueMode::ReplacePlayList, ElisaUtils::PlayListEnqueueTriggerPlay::TriggerPlay);
3958
3959 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
3960 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
3961 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 1);
3962 QCOMPARE(rowsRemovedSpy.count(), 0);
3963 QCOMPARE(rowsMovedSpy.count(), 0);
3964 QCOMPARE(rowsInsertedSpy.count(), 1);
3965 QCOMPARE(persistentStateChangedSpy.count(), 1);
3966 QCOMPARE(dataChangedSpy.count(), 0);
3967 QCOMPARE(newTrackByNameInListSpy.count(), 0);
3968 QCOMPARE(newEntryInListSpy.count(), 1);
3969
3970 QCOMPARE(dataChangedSpy.wait(), true);
3971
3972 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
3973 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
3974 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 1);
3975 QCOMPARE(rowsRemovedSpy.count(), 0);
3976 QCOMPARE(rowsMovedSpy.count(), 0);
3977 QCOMPARE(rowsInsertedSpy.count(), 1);
3978 QCOMPARE(persistentStateChangedSpy.count(), 1);
3979 QCOMPARE(dataChangedSpy.count(), 1);
3980 QCOMPARE(newTrackByNameInListSpy.count(), 0);
3981 QCOMPARE(newEntryInListSpy.count(), 1);
3982
3983 QCOMPARE(myPlayListProxyModel.tracksCount(), 1);
3984
3985 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::IsValidRole).toBool(), true);
3986 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::TitleRole).toString(), QStringLiteral("track3"));
3987 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::DurationRole).toTime().msecsSinceStartOfDay(), 3);
3988 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::ArtistRole).toString(), QStringLiteral("artist3"));
3989 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::AlbumArtistRole).toString(), QStringLiteral("Various Artists"));
3990 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::AlbumRole).toString(), QStringLiteral("album1"));
3991 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::TrackNumberRole).toInt(), 3);
3992 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::DiscNumberRole).toInt(), 3);
3993 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::ImageUrlRole).toUrl(), QUrl::fromLocalFile(QStringLiteral("album1")));
3994 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::ResourceRole).toUrl(), QUrl::fromUserInput(QStringLiteral("/$3")));
3995 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::IsPlayingRole).toBool(), false);
3996 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::IsSingleDiscAlbumRole).toBool(), false);
3997
3998 auto secondTrackId = myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track4"), QStringLiteral("artist4"),
3999 QStringLiteral("album1"), 4, 4);
4000
4001 QCOMPARE(secondTrackId != 0, true);
4002
4003 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track}, {DataTypes::DatabaseIdRole, secondTrackId}}, {}, {}}},
4004 ElisaUtils::PlayListEnqueueMode::ReplacePlayList, ElisaUtils::PlayListEnqueueTriggerPlay::TriggerPlay);
4005
4006 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 1);
4007 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
4008 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 2);
4009 QCOMPARE(rowsRemovedSpy.count(), 1);
4010 QCOMPARE(rowsMovedSpy.count(), 0);
4011 QCOMPARE(rowsInsertedSpy.count(), 2);
4012 QCOMPARE(persistentStateChangedSpy.count(), 3);
4013 QCOMPARE(dataChangedSpy.count(), 1);
4014 QCOMPARE(newTrackByNameInListSpy.count(), 0);
4015 QCOMPARE(newEntryInListSpy.count(), 2);
4016
4017 QCOMPARE(dataChangedSpy.wait(), true);
4018
4019 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 1);
4020 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
4021 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 2);
4022 QCOMPARE(rowsRemovedSpy.count(), 1);
4023 QCOMPARE(rowsMovedSpy.count(), 0);
4024 QCOMPARE(rowsInsertedSpy.count(), 2);
4025 QCOMPARE(persistentStateChangedSpy.count(), 3);
4026 QCOMPARE(dataChangedSpy.count(), 2);
4027 QCOMPARE(newTrackByNameInListSpy.count(), 0);
4028 QCOMPARE(newEntryInListSpy.count(), 2);
4029
4030 QCOMPARE(myPlayListProxyModel.tracksCount(), 1);
4031
4032 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::IsValidRole).toBool(), true);
4033 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::TitleRole).toString(), QStringLiteral("track4"));
4034 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::DurationRole).toTime().msecsSinceStartOfDay(), 4);
4035 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::ArtistRole).toString(), QStringLiteral("artist4"));
4036 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::AlbumArtistRole).toString(), QStringLiteral("Various Artists"));
4037 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::AlbumRole).toString(), QStringLiteral("album1"));
4038 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::TrackNumberRole).toInt(), 4);
4039 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::DiscNumberRole).toInt(), 4);
4040 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::ImageUrlRole).toUrl(), QUrl::fromLocalFile(QStringLiteral("album1")));
4041 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::ResourceRole).toUrl(), QUrl::fromUserInput(QStringLiteral("/$4")));
4042 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::IsPlayingRole).toBool(), false);
4043 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::IsSingleDiscAlbumRole).toBool(), false);
4044 }
4045
testTrackBeenRemoved()4046 void MediaPlayListProxyModelTest::testTrackBeenRemoved()
4047 {
4048 MediaPlayList myPlayList;
4049 QAbstractItemModelTester testModel(&myPlayList);
4050 MediaPlayListProxyModel myPlayListProxyModel;
4051 myPlayListProxyModel.setPlayListModel(&myPlayList);
4052 QAbstractItemModelTester testProxyModel(&myPlayListProxyModel);
4053 DatabaseInterface myDatabaseContent;
4054 TracksListener myListener(&myDatabaseContent);
4055
4056 QSignalSpy rowsAboutToBeMovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsAboutToBeMoved);
4057 QSignalSpy rowsAboutToBeRemovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsAboutToBeRemoved);
4058 QSignalSpy rowsAboutToBeInsertedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsAboutToBeInserted);
4059 QSignalSpy rowsMovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsMoved);
4060 QSignalSpy rowsRemovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsRemoved);
4061 QSignalSpy rowsInsertedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsInserted);
4062 QSignalSpy persistentStateChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::persistentStateChanged);
4063 QSignalSpy dataChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::dataChanged);
4064 QSignalSpy newTrackByNameInListSpy(&myPlayList, &MediaPlayList::newTrackByNameInList);
4065 QSignalSpy newEntryInListSpy(&myPlayList, &MediaPlayList::newEntryInList);
4066 QSignalSpy newUrlInListSpy(&myPlayList, &MediaPlayList::newUrlInList);
4067
4068 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
4069 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
4070 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 0);
4071 QCOMPARE(rowsRemovedSpy.count(), 0);
4072 QCOMPARE(rowsMovedSpy.count(), 0);
4073 QCOMPARE(rowsInsertedSpy.count(), 0);
4074 QCOMPARE(persistentStateChangedSpy.count(), 0);
4075 QCOMPARE(dataChangedSpy.count(), 0);
4076 QCOMPARE(newTrackByNameInListSpy.count(), 0);
4077 QCOMPARE(newEntryInListSpy.count(), 0);
4078
4079 myDatabaseContent.init(QStringLiteral("testDbDirectContent"));
4080
4081 connect(&myListener, &TracksListener::trackHasChanged,
4082 &myPlayList, &MediaPlayList::trackChanged,
4083 Qt::QueuedConnection);
4084 connect(&myListener, &TracksListener::tracksListAdded,
4085 &myPlayList, &MediaPlayList::tracksListAdded,
4086 Qt::QueuedConnection);
4087 connect(&myPlayList, &MediaPlayList::newTrackByNameInList,
4088 &myListener, &TracksListener::trackByNameInList,
4089 Qt::QueuedConnection);
4090 connect(&myPlayList, &MediaPlayList::newEntryInList,
4091 &myListener, &TracksListener::newEntryInList,
4092 Qt::QueuedConnection);
4093 connect(&myPlayList, &MediaPlayList::newUrlInList,
4094 &myListener, &TracksListener::newUrlInList,
4095 Qt::QueuedConnection);
4096 connect(&myDatabaseContent, &DatabaseInterface::tracksAdded,
4097 &myListener, &TracksListener::tracksAdded);
4098
4099 myDatabaseContent.insertTracksList(mNewTracks, mNewCovers);
4100
4101 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
4102 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
4103 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 0);
4104 QCOMPARE(rowsRemovedSpy.count(), 0);
4105 QCOMPARE(rowsMovedSpy.count(), 0);
4106 QCOMPARE(rowsInsertedSpy.count(), 0);
4107 QCOMPARE(persistentStateChangedSpy.count(), 0);
4108 QCOMPARE(dataChangedSpy.count(), 0);
4109 QCOMPARE(newTrackByNameInListSpy.count(), 0);
4110 QCOMPARE(newEntryInListSpy.count(), 0);
4111
4112 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Artist}}, QStringLiteral("artist1"), {}}},
4113 ElisaUtils::PlayListEnqueueMode::ReplacePlayList, ElisaUtils::PlayListEnqueueTriggerPlay::TriggerPlay);
4114
4115 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
4116 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
4117 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 1);
4118 QCOMPARE(rowsRemovedSpy.count(), 0);
4119 QCOMPARE(rowsMovedSpy.count(), 0);
4120 QCOMPARE(rowsInsertedSpy.count(), 1);
4121 QCOMPARE(persistentStateChangedSpy.count(), 1);
4122 QCOMPARE(dataChangedSpy.count(), 0);
4123 QCOMPARE(newTrackByNameInListSpy.count(), 0);
4124 QCOMPARE(newEntryInListSpy.count(), 1);
4125
4126 QCOMPARE(rowsAboutToBeInsertedSpy.wait(), true);
4127
4128 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 1);
4129 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
4130 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 2);
4131 QCOMPARE(rowsRemovedSpy.count(), 1);
4132 QCOMPARE(rowsMovedSpy.count(), 0);
4133 QCOMPARE(rowsInsertedSpy.count(), 2);
4134 QCOMPARE(persistentStateChangedSpy.count(), 3);
4135 QCOMPARE(dataChangedSpy.count(), 0);
4136 QCOMPARE(newTrackByNameInListSpy.count(), 0);
4137 QCOMPARE(newEntryInListSpy.count(), 1);
4138
4139 QCOMPARE(myPlayListProxyModel.tracksCount(), 6);
4140
4141 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::IsValidRole).toBool(), true);
4142 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::TitleRole).toString(), QStringLiteral("track1"));
4143 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::ArtistRole).toString(), QStringLiteral("artist1"));
4144 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::AlbumArtistRole).toString(), QStringLiteral("Various Artists"));
4145 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::AlbumRole).toString(), QStringLiteral("album1"));
4146 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::TrackNumberRole).toInt(), 1);
4147 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::DiscNumberRole).toInt(), 1);
4148 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::ColumnsRoles::IsValidRole).toBool(), true);
4149 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::ColumnsRoles::TitleRole).toString(), QStringLiteral("track1"));
4150 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::ColumnsRoles::ArtistRole).toString(), QStringLiteral("artist1"));
4151 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::ColumnsRoles::AlbumArtistRole).toString(), QStringLiteral("artist1"));
4152 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::ColumnsRoles::AlbumRole).toString(), QStringLiteral("album2"));
4153 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::ColumnsRoles::TrackNumberRole).toInt(), 1);
4154 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::ColumnsRoles::DiscNumberRole).toInt(), 1);
4155 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::ColumnsRoles::IsValidRole).toBool(), true);
4156 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::ColumnsRoles::TitleRole).toString(), QStringLiteral("track2"));
4157 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::ColumnsRoles::ArtistRole).toString(), QStringLiteral("artist1"));
4158 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::ColumnsRoles::AlbumArtistRole).toString(), QStringLiteral("artist1"));
4159 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::ColumnsRoles::AlbumRole).toString(), QStringLiteral("album2"));
4160 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::ColumnsRoles::TrackNumberRole).toInt(), 2);
4161 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::ColumnsRoles::DiscNumberRole).toInt(), 1);
4162 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(3, 0), MediaPlayList::ColumnsRoles::IsValidRole).toBool(), true);
4163 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(3, 0), MediaPlayList::ColumnsRoles::TitleRole).toString(), QStringLiteral("track3"));
4164 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(3, 0), MediaPlayList::ColumnsRoles::ArtistRole).toString(), QStringLiteral("artist1"));
4165 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(3, 0), MediaPlayList::ColumnsRoles::AlbumArtistRole).toString(), QStringLiteral("artist1"));
4166 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(3, 0), MediaPlayList::ColumnsRoles::AlbumRole).toString(), QStringLiteral("album2"));
4167 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(3, 0), MediaPlayList::ColumnsRoles::TrackNumberRole).toInt(), 3);
4168 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(3, 0), MediaPlayList::ColumnsRoles::DiscNumberRole).toInt(), 1);
4169 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(4, 0), MediaPlayList::ColumnsRoles::IsValidRole).toBool(), true);
4170 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(4, 0), MediaPlayList::ColumnsRoles::TitleRole).toString(), QStringLiteral("track4"));
4171 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(4, 0), MediaPlayList::ColumnsRoles::ArtistRole).toString(), QStringLiteral("artist1"));
4172 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(4, 0), MediaPlayList::ColumnsRoles::AlbumArtistRole).toString(), QStringLiteral("artist1"));
4173 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(4, 0), MediaPlayList::ColumnsRoles::AlbumRole).toString(), QStringLiteral("album2"));
4174 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(4, 0), MediaPlayList::ColumnsRoles::TrackNumberRole).toInt(), 4);
4175 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(4, 0), MediaPlayList::ColumnsRoles::DiscNumberRole).toInt(), 1);
4176 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(5, 0), MediaPlayList::ColumnsRoles::IsValidRole).toBool(), true);
4177 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(5, 0), MediaPlayList::ColumnsRoles::TitleRole).toString(), QStringLiteral("track5"));
4178 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(5, 0), MediaPlayList::ColumnsRoles::ArtistRole).toString(), QStringLiteral("artist1"));
4179 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(5, 0), MediaPlayList::ColumnsRoles::AlbumArtistRole).toString(), QStringLiteral("artist1"));
4180 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(5, 0), MediaPlayList::ColumnsRoles::AlbumRole).toString(), QStringLiteral("album2"));
4181 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(5, 0), MediaPlayList::ColumnsRoles::TrackNumberRole).toInt(), 5);
4182 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(5, 0), MediaPlayList::ColumnsRoles::DiscNumberRole).toInt(), 1);
4183
4184 auto removedTrackId = myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track2"), QStringLiteral("artist1"),
4185 QStringLiteral("album2"), 2, 1);
4186
4187 QCOMPARE(removedTrackId != 0, true);
4188
4189 auto removedTrack = myDatabaseContent.trackDataFromDatabaseId(removedTrackId);
4190
4191 QVERIFY(!removedTrack.isEmpty());
4192
4193 myPlayList.trackRemoved(removedTrack[DataTypes::DatabaseIdRole].toULongLong());
4194
4195 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 1);
4196 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
4197 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 2);
4198 QCOMPARE(rowsRemovedSpy.count(), 1);
4199 QCOMPARE(rowsMovedSpy.count(), 0);
4200 QCOMPARE(rowsInsertedSpy.count(), 2);
4201 QCOMPARE(persistentStateChangedSpy.count(), 3);
4202 QCOMPARE(dataChangedSpy.count(), 1);
4203 QCOMPARE(newTrackByNameInListSpy.count(), 0);
4204 QCOMPARE(newEntryInListSpy.count(), 1);
4205
4206 QCOMPARE(myPlayListProxyModel.tracksCount(), 6);
4207
4208 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::IsValidRole).toBool(), true);
4209 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::TitleRole).toString(), QStringLiteral("track1"));
4210 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::ArtistRole).toString(), QStringLiteral("artist1"));
4211 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::AlbumArtistRole).toString(), QStringLiteral("Various Artists"));
4212 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::AlbumRole).toString(), QStringLiteral("album1"));
4213 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::TrackNumberRole).toInt(), 1);
4214 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::DiscNumberRole).toInt(), 1);
4215 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::ColumnsRoles::IsValidRole).toBool(), true);
4216 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::ColumnsRoles::TitleRole).toString(), QStringLiteral("track1"));
4217 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::ColumnsRoles::ArtistRole).toString(), QStringLiteral("artist1"));
4218 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::ColumnsRoles::AlbumArtistRole).toString(), QStringLiteral("artist1"));
4219 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::ColumnsRoles::AlbumRole).toString(), QStringLiteral("album2"));
4220 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::ColumnsRoles::TrackNumberRole).toInt(), 1);
4221 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::ColumnsRoles::DiscNumberRole).toInt(), 1);
4222 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::ColumnsRoles::IsValidRole).toBool(), false);
4223 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::ColumnsRoles::TitleRole).toString(), QStringLiteral("track2"));
4224 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::ColumnsRoles::ArtistRole).toString(), QStringLiteral("artist1"));
4225 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::ColumnsRoles::AlbumArtistRole).toString(), QStringLiteral("artist1"));
4226 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::ColumnsRoles::AlbumRole).toString(), QStringLiteral("album2"));
4227 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::ColumnsRoles::TrackNumberRole).toInt(), -1);
4228 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::ColumnsRoles::DiscNumberRole).toInt(), 0);
4229 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(3, 0), MediaPlayList::ColumnsRoles::IsValidRole).toBool(), true);
4230 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(3, 0), MediaPlayList::ColumnsRoles::TitleRole).toString(), QStringLiteral("track3"));
4231 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(3, 0), MediaPlayList::ColumnsRoles::ArtistRole).toString(), QStringLiteral("artist1"));
4232 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(3, 0), MediaPlayList::ColumnsRoles::AlbumArtistRole).toString(), QStringLiteral("artist1"));
4233 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(3, 0), MediaPlayList::ColumnsRoles::AlbumRole).toString(), QStringLiteral("album2"));
4234 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(3, 0), MediaPlayList::ColumnsRoles::TrackNumberRole).toInt(), 3);
4235 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(3, 0), MediaPlayList::ColumnsRoles::DiscNumberRole).toInt(), 1);
4236 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(4, 0), MediaPlayList::ColumnsRoles::IsValidRole).toBool(), true);
4237 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(4, 0), MediaPlayList::ColumnsRoles::TitleRole).toString(), QStringLiteral("track4"));
4238 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(4, 0), MediaPlayList::ColumnsRoles::ArtistRole).toString(), QStringLiteral("artist1"));
4239 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(4, 0), MediaPlayList::ColumnsRoles::AlbumArtistRole).toString(), QStringLiteral("artist1"));
4240 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(4, 0), MediaPlayList::ColumnsRoles::AlbumRole).toString(), QStringLiteral("album2"));
4241 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(4, 0), MediaPlayList::ColumnsRoles::TrackNumberRole).toInt(), 4);
4242 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(4, 0), MediaPlayList::ColumnsRoles::DiscNumberRole).toInt(), 1);
4243 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(5, 0), MediaPlayList::ColumnsRoles::IsValidRole).toBool(), true);
4244 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(5, 0), MediaPlayList::ColumnsRoles::TitleRole).toString(), QStringLiteral("track5"));
4245 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(5, 0), MediaPlayList::ColumnsRoles::ArtistRole).toString(), QStringLiteral("artist1"));
4246 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(5, 0), MediaPlayList::ColumnsRoles::AlbumArtistRole).toString(), QStringLiteral("artist1"));
4247 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(5, 0), MediaPlayList::ColumnsRoles::AlbumRole).toString(), QStringLiteral("album2"));
4248 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(5, 0), MediaPlayList::ColumnsRoles::TrackNumberRole).toInt(), 5);
4249 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(5, 0), MediaPlayList::ColumnsRoles::DiscNumberRole).toInt(), 1);
4250 }
4251
finishPlayList()4252 void MediaPlayListProxyModelTest::finishPlayList()
4253 {
4254 MediaPlayList myPlayList;
4255 QAbstractItemModelTester testModel(&myPlayList);
4256 MediaPlayListProxyModel myPlayListProxyModel;
4257 myPlayListProxyModel.setPlayListModel(&myPlayList);
4258 QAbstractItemModelTester testProxyModel(&myPlayListProxyModel);
4259 DatabaseInterface myDatabaseContent;
4260 TracksListener myListener(&myDatabaseContent);
4261
4262 QSignalSpy currentTrackChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::currentTrackChanged);
4263 QSignalSpy playListFinishedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::playListFinished);
4264
4265 myDatabaseContent.init(QStringLiteral("testDbDirectContent"));
4266
4267 connect(&myListener, &TracksListener::trackHasChanged,
4268 &myPlayList, &MediaPlayList::trackChanged,
4269 Qt::QueuedConnection);
4270 connect(&myListener, &TracksListener::tracksListAdded,
4271 &myPlayList, &MediaPlayList::tracksListAdded,
4272 Qt::QueuedConnection);
4273 connect(&myPlayList, &MediaPlayList::newTrackByNameInList,
4274 &myListener, &TracksListener::trackByNameInList,
4275 Qt::QueuedConnection);
4276 connect(&myPlayList, &MediaPlayList::newEntryInList,
4277 &myListener, &TracksListener::newEntryInList,
4278 Qt::QueuedConnection);
4279 connect(&myPlayList, &MediaPlayList::newUrlInList,
4280 &myListener, &TracksListener::newUrlInList,
4281 Qt::QueuedConnection);
4282 connect(&myDatabaseContent, &DatabaseInterface::tracksAdded,
4283 &myListener, &TracksListener::tracksAdded);
4284
4285 myDatabaseContent.insertTracksList(mNewTracks, mNewCovers);
4286
4287 QCOMPARE(currentTrackChangedSpy.count(), 0);
4288 QCOMPARE(playListFinishedSpy.count(), 0);
4289
4290 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track},
4291 {DataTypes::DatabaseIdRole, myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track1"), QStringLiteral("artist1"), QStringLiteral("album2"), 1, 1)}},
4292 QStringLiteral("track1"), {}}}, {}, {});
4293 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track},
4294 {DataTypes::DatabaseIdRole, myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track3"), QStringLiteral("artist2"), QStringLiteral("album1"), 3, 3)}},
4295 QStringLiteral("track3"), {}}}, {}, {});
4296
4297 QCOMPARE(currentTrackChangedSpy.count(), 1);
4298 QCOMPARE(playListFinishedSpy.count(), 0);
4299
4300 QCOMPARE(myPlayListProxyModel.currentTrack(), QPersistentModelIndex(myPlayListProxyModel.index(0, 0)));
4301
4302 myPlayListProxyModel.skipNextTrack();
4303
4304 QCOMPARE(currentTrackChangedSpy.count(), 2);
4305 QCOMPARE(playListFinishedSpy.count(), 0);
4306
4307 QCOMPARE(myPlayListProxyModel.currentTrack(), QPersistentModelIndex(myPlayListProxyModel.index(1, 0)));
4308
4309 myPlayListProxyModel.skipNextTrack();
4310
4311 QCOMPARE(currentTrackChangedSpy.count(), 3);
4312 QCOMPARE(playListFinishedSpy.count(), 1);
4313
4314 QCOMPARE(myPlayListProxyModel.currentTrack(), QPersistentModelIndex(myPlayListProxyModel.index(0, 0)));
4315 }
4316
removeBeforeCurrentTrack()4317 void MediaPlayListProxyModelTest::removeBeforeCurrentTrack()
4318 {
4319 MediaPlayList myPlayList;
4320 QAbstractItemModelTester testModel(&myPlayList);
4321 MediaPlayListProxyModel myPlayListProxyModel;
4322 myPlayListProxyModel.setPlayListModel(&myPlayList);
4323 QAbstractItemModelTester testProxyModel(&myPlayListProxyModel);
4324 DatabaseInterface myDatabaseContent;
4325 TracksListener myListener(&myDatabaseContent);
4326
4327 QSignalSpy currentTrackChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::currentTrackChanged);
4328 QSignalSpy playListFinishedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::playListFinished);
4329
4330 myDatabaseContent.init(QStringLiteral("testDbDirectContent"));
4331
4332 connect(&myListener, &TracksListener::trackHasChanged,
4333 &myPlayList, &MediaPlayList::trackChanged,
4334 Qt::QueuedConnection);
4335 connect(&myListener, &TracksListener::tracksListAdded,
4336 &myPlayList, &MediaPlayList::tracksListAdded,
4337 Qt::QueuedConnection);
4338 connect(&myPlayList, &MediaPlayList::newTrackByNameInList,
4339 &myListener, &TracksListener::trackByNameInList,
4340 Qt::QueuedConnection);
4341 connect(&myPlayList, &MediaPlayList::newEntryInList,
4342 &myListener, &TracksListener::newEntryInList,
4343 Qt::QueuedConnection);
4344 connect(&myPlayList, &MediaPlayList::newUrlInList,
4345 &myListener, &TracksListener::newUrlInList,
4346 Qt::QueuedConnection);
4347 connect(&myDatabaseContent, &DatabaseInterface::tracksAdded,
4348 &myListener, &TracksListener::tracksAdded);
4349
4350 myDatabaseContent.insertTracksList(mNewTracks, mNewCovers);
4351
4352 QCOMPARE(currentTrackChangedSpy.count(), 0);
4353 QCOMPARE(playListFinishedSpy.count(), 0);
4354
4355 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track},
4356 {DataTypes::DatabaseIdRole, myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track1"), QStringLiteral("artist1"), QStringLiteral("album2"), 1, 1)}},
4357 QStringLiteral("track1"), {}}}, {}, {});
4358 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track},
4359 {DataTypes::DatabaseIdRole, myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track3"), QStringLiteral("artist3"), QStringLiteral("album1"), 3, 3)}},
4360 QStringLiteral("track3"), {}}}, {}, {});
4361 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track},
4362 {DataTypes::DatabaseIdRole, myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track5"), QStringLiteral("artist1"), QStringLiteral("album2"), 5, 1)}},
4363 QStringLiteral("track5"), {}}}, {}, {});
4364 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track},
4365 {DataTypes::DatabaseIdRole, myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track1"), QStringLiteral("artist1"), QStringLiteral("album2"), 1, 1)}},
4366 QStringLiteral("track1"), {}}}, {}, {});
4367
4368 QCOMPARE(currentTrackChangedSpy.count(), 1);
4369 QCOMPARE(playListFinishedSpy.count(), 0);
4370
4371 QCOMPARE(myPlayListProxyModel.currentTrack(), QPersistentModelIndex(myPlayListProxyModel.index(0, 0)));
4372
4373 myPlayListProxyModel.skipNextTrack();
4374
4375 QCOMPARE(currentTrackChangedSpy.count(), 2);
4376 QCOMPARE(playListFinishedSpy.count(), 0);
4377
4378 QCOMPARE(myPlayListProxyModel.currentTrack(), QPersistentModelIndex(myPlayListProxyModel.index(1, 0)));
4379
4380 myPlayListProxyModel.skipNextTrack();
4381
4382 QCOMPARE(currentTrackChangedSpy.count(), 3);
4383 QCOMPARE(playListFinishedSpy.count(), 0);
4384
4385 QCOMPARE(myPlayListProxyModel.currentTrack(), QPersistentModelIndex(myPlayListProxyModel.index(2, 0)));
4386
4387 myPlayListProxyModel.skipNextTrack();
4388
4389 QCOMPARE(currentTrackChangedSpy.count(), 4);
4390 QCOMPARE(playListFinishedSpy.count(), 0);
4391
4392 QCOMPARE(myPlayListProxyModel.currentTrack(), QPersistentModelIndex(myPlayListProxyModel.index(3, 0)));
4393
4394 myPlayListProxyModel.removeRow(1);
4395
4396 QCOMPARE(currentTrackChangedSpy.count(), 4);
4397 QCOMPARE(playListFinishedSpy.count(), 0);
4398 }
4399
switchToTrackTest()4400 void MediaPlayListProxyModelTest::switchToTrackTest()
4401 {
4402 MediaPlayList myPlayList;
4403 QAbstractItemModelTester testModel(&myPlayList);
4404 MediaPlayListProxyModel myPlayListProxyModel;
4405 myPlayListProxyModel.setPlayListModel(&myPlayList);
4406 QAbstractItemModelTester testProxyModel(&myPlayListProxyModel);
4407 DatabaseInterface myDatabaseContent;
4408 TracksListener myListener(&myDatabaseContent);
4409
4410 QSignalSpy currentTrackChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::currentTrackChanged);
4411 QSignalSpy playListFinishedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::playListFinished);
4412
4413 myDatabaseContent.init(QStringLiteral("testDbDirectContent"));
4414
4415 connect(&myListener, &TracksListener::trackHasChanged,
4416 &myPlayList, &MediaPlayList::trackChanged,
4417 Qt::QueuedConnection);
4418 connect(&myListener, &TracksListener::tracksListAdded,
4419 &myPlayList, &MediaPlayList::tracksListAdded,
4420 Qt::QueuedConnection);
4421 connect(&myPlayList, &MediaPlayList::newTrackByNameInList,
4422 &myListener, &TracksListener::trackByNameInList,
4423 Qt::QueuedConnection);
4424 connect(&myPlayList, &MediaPlayList::newEntryInList,
4425 &myListener, &TracksListener::newEntryInList,
4426 Qt::QueuedConnection);
4427 connect(&myPlayList, &MediaPlayList::newUrlInList,
4428 &myListener, &TracksListener::newUrlInList,
4429 Qt::QueuedConnection);
4430 connect(&myDatabaseContent, &DatabaseInterface::tracksAdded,
4431 &myListener, &TracksListener::tracksAdded);
4432
4433 myDatabaseContent.insertTracksList(mNewTracks, mNewCovers);
4434
4435 QCOMPARE(currentTrackChangedSpy.count(), 0);
4436 QCOMPARE(playListFinishedSpy.count(), 0);
4437
4438 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track},
4439 {DataTypes::DatabaseIdRole, myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track1"), QStringLiteral("artist1"), QStringLiteral("album2"), 1, 1)}},
4440 QStringLiteral("track1"), {}}}, {}, {});
4441 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track},
4442 {DataTypes::DatabaseIdRole, myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track3"), QStringLiteral("artist3"), QStringLiteral("album1"), 3, 3)}},
4443 QStringLiteral("track3"), {}}}, {}, {});
4444 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track},
4445 {DataTypes::DatabaseIdRole, myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track4"), QStringLiteral("artist1"), QStringLiteral("album1"), 4, 4)}},
4446 QStringLiteral("track4"), {}}}, {}, {});
4447 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track},
4448 {DataTypes::DatabaseIdRole, myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track2"), QStringLiteral("artist1"), QStringLiteral("album1"), 2, 2)}},
4449 QStringLiteral("track2"), {}}}, {}, {});
4450 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track},
4451 {DataTypes::DatabaseIdRole, myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track1"), QStringLiteral("artist1"), QStringLiteral("album2"), 1, 1)}},
4452 QStringLiteral("track1"), {}}}, {}, {});
4453
4454 QCOMPARE(currentTrackChangedSpy.count(), 1);
4455 QCOMPARE(playListFinishedSpy.count(), 0);
4456
4457 QCOMPARE(myPlayListProxyModel.currentTrack(), QPersistentModelIndex(myPlayListProxyModel.index(0, 0)));
4458
4459 myPlayListProxyModel.switchTo(4);
4460
4461 QCOMPARE(currentTrackChangedSpy.count(), 2);
4462 QCOMPARE(playListFinishedSpy.count(), 0);
4463
4464 QCOMPARE(myPlayListProxyModel.currentTrack(), QPersistentModelIndex(myPlayListProxyModel.index(4, 0)));
4465 }
4466
singleTrack()4467 void MediaPlayListProxyModelTest::singleTrack()
4468 {
4469 MediaPlayList myPlayList;
4470 QAbstractItemModelTester testModel(&myPlayList);
4471 MediaPlayListProxyModel myPlayListProxyModel;
4472 myPlayListProxyModel.setPlayListModel(&myPlayList);
4473 QAbstractItemModelTester testProxyModel(&myPlayListProxyModel);
4474 DatabaseInterface myDatabaseContent;
4475 TracksListener myListener(&myDatabaseContent);
4476
4477 QSignalSpy currentTrackChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::currentTrackChanged);
4478 QSignalSpy playListFinishedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::playListFinished);
4479
4480 myDatabaseContent.init(QStringLiteral("testDbDirectContent"));
4481
4482 connect(&myListener, &TracksListener::trackHasChanged,
4483 &myPlayList, &MediaPlayList::trackChanged,
4484 Qt::QueuedConnection);
4485 connect(&myListener, &TracksListener::tracksListAdded,
4486 &myPlayList, &MediaPlayList::tracksListAdded,
4487 Qt::QueuedConnection);
4488 connect(&myPlayList, &MediaPlayList::newTrackByNameInList,
4489 &myListener, &TracksListener::trackByNameInList,
4490 Qt::QueuedConnection);
4491 connect(&myPlayList, &MediaPlayList::newEntryInList,
4492 &myListener, &TracksListener::newEntryInList,
4493 Qt::QueuedConnection);
4494 connect(&myPlayList, &MediaPlayList::newUrlInList,
4495 &myListener, &TracksListener::newUrlInList,
4496 Qt::QueuedConnection);
4497 connect(&myDatabaseContent, &DatabaseInterface::tracksAdded,
4498 &myListener, &TracksListener::tracksAdded);
4499
4500 QCOMPARE(currentTrackChangedSpy.count(), 0);
4501 QCOMPARE(playListFinishedSpy.count(), 0);
4502
4503 myDatabaseContent.insertTracksList(mNewTracks, mNewCovers);
4504
4505 QCOMPARE(currentTrackChangedSpy.count(), 0);
4506 QCOMPARE(playListFinishedSpy.count(), 0);
4507
4508 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track},
4509 {DataTypes::DatabaseIdRole, myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track1"), QStringLiteral("artist1"), QStringLiteral("album2"), 1, 1)}},
4510 QStringLiteral("track1"), {}}}, {}, {});
4511
4512 QCOMPARE(currentTrackChangedSpy.count(), 1);
4513 QCOMPARE(playListFinishedSpy.count(), 0);
4514
4515 QCOMPARE(myPlayListProxyModel.currentTrack(), QPersistentModelIndex(myPlayListProxyModel.index(0, 0)));
4516
4517 myPlayListProxyModel.skipNextTrack();
4518
4519 QCOMPARE(currentTrackChangedSpy.count(), 2);
4520 QCOMPARE(playListFinishedSpy.count(), 1);
4521
4522 QCOMPARE(myPlayListProxyModel.currentTrack(), QPersistentModelIndex(myPlayListProxyModel.index(0, 0)));
4523 }
4524
testBringUpAndRemoveCase()4525 void MediaPlayListProxyModelTest::testBringUpAndRemoveCase()
4526 {
4527 MediaPlayList myPlayList;
4528 QAbstractItemModelTester testModel(&myPlayList);
4529 MediaPlayListProxyModel myPlayListProxyModel;
4530 myPlayListProxyModel.setPlayListModel(&myPlayList);
4531 QAbstractItemModelTester testProxyModel(&myPlayListProxyModel);
4532 DatabaseInterface myDatabaseContent;
4533 TracksListener myListener(&myDatabaseContent);
4534
4535 QSignalSpy currentTrackChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::currentTrackChanged);
4536 QSignalSpy playListFinishedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::playListFinished);
4537
4538 myDatabaseContent.init(QStringLiteral("testDbDirectContent"));
4539
4540 connect(&myListener, &TracksListener::trackHasChanged,
4541 &myPlayList, &MediaPlayList::trackChanged,
4542 Qt::QueuedConnection);
4543 connect(&myListener, &TracksListener::tracksListAdded,
4544 &myPlayList, &MediaPlayList::tracksListAdded,
4545 Qt::QueuedConnection);
4546 connect(&myPlayList, &MediaPlayList::newTrackByNameInList,
4547 &myListener, &TracksListener::trackByNameInList,
4548 Qt::QueuedConnection);
4549 connect(&myPlayList, &MediaPlayList::newEntryInList,
4550 &myListener, &TracksListener::newEntryInList,
4551 Qt::QueuedConnection);
4552 connect(&myPlayList, &MediaPlayList::newUrlInList,
4553 &myListener, &TracksListener::newUrlInList,
4554 Qt::QueuedConnection);
4555 connect(&myDatabaseContent, &DatabaseInterface::tracksAdded,
4556 &myListener, &TracksListener::tracksAdded);
4557
4558 myDatabaseContent.insertTracksList(mNewTracks, mNewCovers);
4559
4560 QCOMPARE(currentTrackChangedSpy.count(), 0);
4561 QCOMPARE(playListFinishedSpy.count(), 0);
4562
4563 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track},
4564 {DataTypes::DatabaseIdRole, myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track1"), QStringLiteral("artist1"), QStringLiteral("album2"), 1, 1)}},
4565 QStringLiteral("track1"), {}}}, {}, {});
4566
4567 QCOMPARE(currentTrackChangedSpy.count(), 1);
4568 QCOMPARE(playListFinishedSpy.count(), 0);
4569
4570 QCOMPARE(myPlayListProxyModel.currentTrack(), QPersistentModelIndex(myPlayListProxyModel.index(0, 0)));
4571
4572 myPlayListProxyModel.removeRow(0);
4573
4574 QCOMPARE(currentTrackChangedSpy.count(), 2);
4575 QCOMPARE(playListFinishedSpy.count(), 1);
4576
4577 QCOMPARE(myPlayListProxyModel.currentTrack(), QPersistentModelIndex());
4578 }
4579
testBringUpAndRemoveLastCase()4580 void MediaPlayListProxyModelTest::testBringUpAndRemoveLastCase()
4581 {
4582 MediaPlayList myPlayList;
4583 QAbstractItemModelTester testModel(&myPlayList);
4584 MediaPlayListProxyModel myPlayListProxyModel;
4585 myPlayListProxyModel.setPlayListModel(&myPlayList);
4586 QAbstractItemModelTester testProxyModel(&myPlayListProxyModel);
4587 DatabaseInterface myDatabaseContent;
4588 TracksListener myListener(&myDatabaseContent);
4589
4590 QSignalSpy currentTrackChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::currentTrackChanged);
4591 QSignalSpy playListFinishedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::playListFinished);
4592
4593 myDatabaseContent.init(QStringLiteral("testDbDirectContent"));
4594
4595 connect(&myListener, &TracksListener::trackHasChanged,
4596 &myPlayList, &MediaPlayList::trackChanged,
4597 Qt::QueuedConnection);
4598 connect(&myListener, &TracksListener::tracksListAdded,
4599 &myPlayList, &MediaPlayList::tracksListAdded,
4600 Qt::QueuedConnection);
4601 connect(&myPlayList, &MediaPlayList::newTrackByNameInList,
4602 &myListener, &TracksListener::trackByNameInList,
4603 Qt::QueuedConnection);
4604 connect(&myPlayList, &MediaPlayList::newEntryInList,
4605 &myListener, &TracksListener::newEntryInList,
4606 Qt::QueuedConnection);
4607 connect(&myPlayList, &MediaPlayList::newUrlInList,
4608 &myListener, &TracksListener::newUrlInList,
4609 Qt::QueuedConnection);
4610 connect(&myDatabaseContent, &DatabaseInterface::tracksAdded,
4611 &myListener, &TracksListener::tracksAdded);
4612
4613 QCOMPARE(currentTrackChangedSpy.count(), 0);
4614 QCOMPARE(playListFinishedSpy.count(), 0);
4615
4616 myDatabaseContent.insertTracksList(mNewTracks, mNewCovers);
4617
4618 QCOMPARE(currentTrackChangedSpy.count(), 0);
4619 QCOMPARE(playListFinishedSpy.count(), 0);
4620
4621 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track},
4622 {DataTypes::DatabaseIdRole, myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track1"), QStringLiteral("artist1"), QStringLiteral("album2"), 1, 1)}},
4623 QStringLiteral("track1"), {}}}, {}, {});
4624 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track},
4625 {DataTypes::DatabaseIdRole, myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track2"), QStringLiteral("artist1"), QStringLiteral("album2"), 2, 1)}},
4626 QStringLiteral("track2"), {}}}, {}, {});
4627 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track},
4628 {DataTypes::DatabaseIdRole, myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track3"), QStringLiteral("artist1"), QStringLiteral("album2"), 3, 1)}},
4629 QStringLiteral("track3"), {}}}, {}, {});
4630
4631 QCOMPARE(currentTrackChangedSpy.count(), 1);
4632 QCOMPARE(playListFinishedSpy.count(), 0);
4633
4634 QCOMPARE(myPlayListProxyModel.currentTrack(), QPersistentModelIndex(myPlayListProxyModel.index(0, 0)));
4635
4636 myPlayListProxyModel.skipNextTrack();
4637
4638 QCOMPARE(currentTrackChangedSpy.count(), 2);
4639 QCOMPARE(playListFinishedSpy.count(), 0);
4640
4641 QCOMPARE(myPlayListProxyModel.currentTrack(), QPersistentModelIndex(myPlayListProxyModel.index(1, 0)));
4642
4643 myPlayListProxyModel.skipNextTrack();
4644
4645 QCOMPARE(currentTrackChangedSpy.count(), 3);
4646 QCOMPARE(playListFinishedSpy.count(), 0);
4647
4648 QCOMPARE(myPlayListProxyModel.currentTrack(), QPersistentModelIndex(myPlayListProxyModel.index(2, 0)));
4649
4650 myPlayListProxyModel.removeRow(2);
4651
4652 QCOMPARE(currentTrackChangedSpy.count(), 4);
4653 QCOMPARE(playListFinishedSpy.count(), 1);
4654
4655 QCOMPARE(myPlayListProxyModel.currentTrack(), QPersistentModelIndex(myPlayListProxyModel.index(0, 0)));
4656 }
4657
testBringUpAndRemoveMultipleCase()4658 void MediaPlayListProxyModelTest::testBringUpAndRemoveMultipleCase()
4659 {
4660 MediaPlayList myPlayList;
4661 QAbstractItemModelTester testModel(&myPlayList);
4662 MediaPlayListProxyModel myPlayListProxyModel;
4663 myPlayListProxyModel.setPlayListModel(&myPlayList);
4664 QAbstractItemModelTester testProxyModel(&myPlayListProxyModel);
4665 DatabaseInterface myDatabaseContent;
4666 TracksListener myListener(&myDatabaseContent);
4667
4668 QSignalSpy currentTrackChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::currentTrackChanged);
4669 QSignalSpy playListFinishedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::playListFinished);
4670
4671 myDatabaseContent.init(QStringLiteral("testDbDirectContent"));
4672
4673 connect(&myListener, &TracksListener::trackHasChanged,
4674 &myPlayList, &MediaPlayList::trackChanged,
4675 Qt::QueuedConnection);
4676 connect(&myListener, &TracksListener::tracksListAdded,
4677 &myPlayList, &MediaPlayList::tracksListAdded,
4678 Qt::QueuedConnection);
4679 connect(&myPlayList, &MediaPlayList::newTrackByNameInList,
4680 &myListener, &TracksListener::trackByNameInList,
4681 Qt::QueuedConnection);
4682 connect(&myPlayList, &MediaPlayList::newEntryInList,
4683 &myListener, &TracksListener::newEntryInList,
4684 Qt::QueuedConnection);
4685 connect(&myPlayList, &MediaPlayList::newUrlInList,
4686 &myListener, &TracksListener::newUrlInList,
4687 Qt::QueuedConnection);
4688 connect(&myDatabaseContent, &DatabaseInterface::tracksAdded,
4689 &myListener, &TracksListener::tracksAdded);
4690
4691 myDatabaseContent.insertTracksList(mNewTracks, mNewCovers);
4692
4693 QCOMPARE(currentTrackChangedSpy.count(), 0);
4694 QCOMPARE(playListFinishedSpy.count(), 0);
4695
4696 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track},
4697 {DataTypes::DatabaseIdRole, myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track1"), QStringLiteral("artist1"), QStringLiteral("album2"), 1, 1)}},
4698 QStringLiteral("track1"), {}}}, {}, {});
4699
4700 QCOMPARE(currentTrackChangedSpy.count(), 1);
4701 QCOMPARE(playListFinishedSpy.count(), 0);
4702
4703 QCOMPARE(myPlayListProxyModel.currentTrack(), QPersistentModelIndex(myPlayListProxyModel.index(0, 0)));
4704
4705 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track},
4706 {DataTypes::DatabaseIdRole, myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track2"), QStringLiteral("artist1"), QStringLiteral("album1"), 2, 2)}},
4707 QStringLiteral("track2"), {}}}, {}, {});
4708
4709 QCOMPARE(currentTrackChangedSpy.count(), 1);
4710 QCOMPARE(playListFinishedSpy.count(), 0);
4711
4712 myPlayListProxyModel.removeRow(0);
4713
4714 QCOMPARE(currentTrackChangedSpy.count(), 2);
4715 QCOMPARE(playListFinishedSpy.count(), 0);
4716
4717 QCOMPARE(myPlayListProxyModel.currentTrack(), QPersistentModelIndex(myPlayListProxyModel.index(0, 0)));
4718 }
4719
testBringUpAndDownCase()4720 void MediaPlayListProxyModelTest::testBringUpAndDownCase()
4721 {
4722 MediaPlayList myPlayList;
4723 QAbstractItemModelTester testModel(&myPlayList);
4724 MediaPlayListProxyModel myPlayListProxyModel;
4725 myPlayListProxyModel.setPlayListModel(&myPlayList);
4726 QAbstractItemModelTester testProxyModel(&myPlayListProxyModel);
4727 DatabaseInterface myDatabaseContent;
4728 TracksListener myListener(&myDatabaseContent);
4729
4730 QSignalSpy currentTrackChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::currentTrackChanged);
4731 QSignalSpy playListFinishedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::playListFinished);
4732
4733 myDatabaseContent.init(QStringLiteral("testDbDirectContent"));
4734
4735 connect(&myListener, &TracksListener::trackHasChanged,
4736 &myPlayList, &MediaPlayList::trackChanged,
4737 Qt::QueuedConnection);
4738 connect(&myListener, &TracksListener::tracksListAdded,
4739 &myPlayList, &MediaPlayList::tracksListAdded,
4740 Qt::QueuedConnection);
4741 connect(&myPlayList, &MediaPlayList::newTrackByNameInList,
4742 &myListener, &TracksListener::trackByNameInList,
4743 Qt::QueuedConnection);
4744 connect(&myPlayList, &MediaPlayList::newEntryInList,
4745 &myListener, &TracksListener::newEntryInList,
4746 Qt::QueuedConnection);
4747 connect(&myPlayList, &MediaPlayList::newUrlInList,
4748 &myListener, &TracksListener::newUrlInList,
4749 Qt::QueuedConnection);
4750 connect(&myDatabaseContent, &DatabaseInterface::tracksAdded,
4751 &myListener, &TracksListener::tracksAdded);
4752
4753 QCOMPARE(currentTrackChangedSpy.count(), 0);
4754 QCOMPARE(playListFinishedSpy.count(), 0);
4755
4756 myDatabaseContent.insertTracksList(mNewTracks, mNewCovers);
4757
4758 QCOMPARE(currentTrackChangedSpy.count(), 0);
4759 QCOMPARE(playListFinishedSpy.count(), 0);
4760
4761 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track},
4762 {DataTypes::DatabaseIdRole, myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track1"), QStringLiteral("artist1"), QStringLiteral("album2"), 1, 1)}},
4763 QStringLiteral("track1"), {}}}, {}, {});
4764
4765 QCOMPARE(currentTrackChangedSpy.count(), 1);
4766 QCOMPARE(playListFinishedSpy.count(), 0);
4767
4768 QCOMPARE(myPlayListProxyModel.currentTrack(), QPersistentModelIndex(myPlayListProxyModel.index(0, 0)));
4769
4770 myPlayListProxyModel.removeRow(0);
4771
4772 QCOMPARE(currentTrackChangedSpy.count(), 2);
4773 QCOMPARE(playListFinishedSpy.count(), 1);
4774
4775 QCOMPARE(myPlayListProxyModel.currentTrack(), QPersistentModelIndex());
4776 }
4777
testBringUpCase()4778 void MediaPlayListProxyModelTest::testBringUpCase()
4779 {
4780 MediaPlayList myPlayList;
4781 QAbstractItemModelTester testModel(&myPlayList);
4782 MediaPlayListProxyModel myPlayListProxyModel;
4783 myPlayListProxyModel.setPlayListModel(&myPlayList);
4784 QAbstractItemModelTester testProxyModel(&myPlayListProxyModel);
4785 DatabaseInterface myDatabaseContent;
4786 TracksListener myListener(&myDatabaseContent);
4787
4788 QSignalSpy currentTrackChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::currentTrackChanged);
4789 QSignalSpy playListFinishedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::playListFinished);
4790
4791 myDatabaseContent.init(QStringLiteral("testDbDirectContent"));
4792
4793 connect(&myListener, &TracksListener::trackHasChanged,
4794 &myPlayList, &MediaPlayList::trackChanged,
4795 Qt::QueuedConnection);
4796 connect(&myListener, &TracksListener::tracksListAdded,
4797 &myPlayList, &MediaPlayList::tracksListAdded,
4798 Qt::QueuedConnection);
4799 connect(&myPlayList, &MediaPlayList::newTrackByNameInList,
4800 &myListener, &TracksListener::trackByNameInList,
4801 Qt::QueuedConnection);
4802 connect(&myPlayList, &MediaPlayList::newEntryInList,
4803 &myListener, &TracksListener::newEntryInList,
4804 Qt::QueuedConnection);
4805 connect(&myPlayList, &MediaPlayList::newUrlInList,
4806 &myListener, &TracksListener::newUrlInList,
4807 Qt::QueuedConnection);
4808 connect(&myDatabaseContent, &DatabaseInterface::tracksAdded,
4809 &myListener, &TracksListener::tracksAdded);
4810
4811 QCOMPARE(currentTrackChangedSpy.count(), 0);
4812 QCOMPARE(playListFinishedSpy.count(), 0);
4813
4814 myDatabaseContent.insertTracksList(mNewTracks, mNewCovers);
4815
4816 QCOMPARE(currentTrackChangedSpy.count(), 0);
4817 QCOMPARE(playListFinishedSpy.count(), 0);
4818
4819 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track},
4820 {DataTypes::DatabaseIdRole, myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track1"), QStringLiteral("artist1"), QStringLiteral("album2"), 1, 1)}},
4821 QStringLiteral("track1"), {}}}, {}, {});
4822
4823 QCOMPARE(currentTrackChangedSpy.count(), 1);
4824 QCOMPARE(playListFinishedSpy.count(), 0);
4825
4826 QCOMPARE(myPlayListProxyModel.currentTrack(), QPersistentModelIndex(myPlayListProxyModel.index(0, 0)));
4827 }
4828
testBringUpCaseFromNewAlbum()4829 void MediaPlayListProxyModelTest::testBringUpCaseFromNewAlbum()
4830 {
4831 MediaPlayList myPlayList;
4832 QAbstractItemModelTester testModel(&myPlayList);
4833 MediaPlayListProxyModel myPlayListProxyModel;
4834 myPlayListProxyModel.setPlayListModel(&myPlayList);
4835 QAbstractItemModelTester testProxyModel(&myPlayListProxyModel);
4836 DatabaseInterface myDatabaseContent;
4837 TracksListener myListener(&myDatabaseContent);
4838
4839 QSignalSpy currentTrackChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::currentTrackChanged);
4840 QSignalSpy playListFinishedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::playListFinished);
4841
4842 myDatabaseContent.init(QStringLiteral("testDbDirectContent"));
4843
4844 connect(&myListener, &TracksListener::trackHasChanged,
4845 &myPlayList, &MediaPlayList::trackChanged,
4846 Qt::QueuedConnection);
4847 connect(&myListener, &TracksListener::tracksListAdded,
4848 &myPlayList, &MediaPlayList::tracksListAdded,
4849 Qt::QueuedConnection);
4850 connect(&myPlayList, &MediaPlayList::newTrackByNameInList,
4851 &myListener, &TracksListener::trackByNameInList,
4852 Qt::QueuedConnection);
4853 connect(&myPlayList, &MediaPlayList::newEntryInList,
4854 &myListener, &TracksListener::newEntryInList,
4855 Qt::QueuedConnection);
4856 connect(&myPlayList, &MediaPlayList::newUrlInList,
4857 &myListener, &TracksListener::newUrlInList,
4858 Qt::QueuedConnection);
4859 connect(&myDatabaseContent, &DatabaseInterface::tracksAdded,
4860 &myListener, &TracksListener::tracksAdded);
4861
4862 QCOMPARE(currentTrackChangedSpy.count(), 0);
4863 QCOMPARE(playListFinishedSpy.count(), 0);
4864
4865 myDatabaseContent.insertTracksList(mNewTracks, mNewCovers);
4866
4867 QCOMPARE(currentTrackChangedSpy.count(), 0);
4868 QCOMPARE(playListFinishedSpy.count(), 0);
4869
4870 auto newTrackID = myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track1"), QStringLiteral("artist1"),
4871 QStringLiteral("album2"), 1, 1);
4872
4873 QVERIFY(newTrackID != 0);
4874
4875 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track},
4876 {DataTypes::DatabaseIdRole, newTrackID}}, QStringLiteral("track1"), {}}}, {}, {});
4877
4878 QCOMPARE(currentTrackChangedSpy.count(), 1);
4879 QCOMPARE(playListFinishedSpy.count(), 0);
4880
4881 QCOMPARE(myPlayListProxyModel.currentTrack(), QPersistentModelIndex(myPlayListProxyModel.index(0, 0)));
4882 }
4883
testSetData()4884 void MediaPlayListProxyModelTest::testSetData()
4885 {
4886 MediaPlayList myPlayList;
4887 QAbstractItemModelTester testModel(&myPlayList);
4888 MediaPlayListProxyModel myPlayListProxyModel;
4889 myPlayListProxyModel.setPlayListModel(&myPlayList);
4890 QAbstractItemModelTester testProxyModel(&myPlayListProxyModel);
4891 DatabaseInterface myDatabaseContent;
4892 TracksListener myListener(&myDatabaseContent);
4893
4894 QSignalSpy rowsAboutToBeMovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsAboutToBeMoved);
4895 QSignalSpy rowsAboutToBeRemovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsAboutToBeRemoved);
4896 QSignalSpy rowsAboutToBeInsertedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsAboutToBeInserted);
4897 QSignalSpy rowsMovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsMoved);
4898 QSignalSpy rowsRemovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsRemoved);
4899 QSignalSpy rowsInsertedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsInserted);
4900 QSignalSpy persistentStateChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::persistentStateChanged);
4901 QSignalSpy dataChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::dataChanged);
4902 QSignalSpy newTrackByNameInListSpy(&myPlayList, &MediaPlayList::newTrackByNameInList);
4903 QSignalSpy newEntryInListSpy(&myPlayList, &MediaPlayList::newEntryInList);
4904 QSignalSpy newUrlInListSpy(&myPlayList, &MediaPlayList::newUrlInList);
4905
4906 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
4907 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
4908 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 0);
4909 QCOMPARE(rowsRemovedSpy.count(), 0);
4910 QCOMPARE(rowsMovedSpy.count(), 0);
4911 QCOMPARE(rowsInsertedSpy.count(), 0);
4912 QCOMPARE(persistentStateChangedSpy.count(), 0);
4913 QCOMPARE(dataChangedSpy.count(), 0);
4914 QCOMPARE(newTrackByNameInListSpy.count(), 0);
4915 QCOMPARE(newEntryInListSpy.count(), 0);
4916
4917 myDatabaseContent.init(QStringLiteral("testDbDirectContent"));
4918
4919 connect(&myListener, &TracksListener::trackHasChanged,
4920 &myPlayList, &MediaPlayList::trackChanged,
4921 Qt::QueuedConnection);
4922 connect(&myListener, &TracksListener::tracksListAdded,
4923 &myPlayList, &MediaPlayList::tracksListAdded,
4924 Qt::QueuedConnection);
4925 connect(&myPlayList, &MediaPlayList::newTrackByNameInList,
4926 &myListener, &TracksListener::trackByNameInList,
4927 Qt::QueuedConnection);
4928 connect(&myPlayList, &MediaPlayList::newEntryInList,
4929 &myListener, &TracksListener::newEntryInList,
4930 Qt::QueuedConnection);
4931 connect(&myPlayList, &MediaPlayList::newUrlInList,
4932 &myListener, &TracksListener::newUrlInList,
4933 Qt::QueuedConnection);
4934 connect(&myDatabaseContent, &DatabaseInterface::tracksAdded,
4935 &myListener, &TracksListener::tracksAdded);
4936
4937 myDatabaseContent.insertTracksList(mNewTracks, mNewCovers);
4938
4939 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
4940 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
4941 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 0);
4942 QCOMPARE(rowsRemovedSpy.count(), 0);
4943 QCOMPARE(rowsMovedSpy.count(), 0);
4944 QCOMPARE(rowsInsertedSpy.count(), 0);
4945 QCOMPARE(persistentStateChangedSpy.count(), 0);
4946 QCOMPARE(dataChangedSpy.count(), 0);
4947 QCOMPARE(newTrackByNameInListSpy.count(), 0);
4948 QCOMPARE(newEntryInListSpy.count(), 0);
4949
4950 auto firstTrackId = myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track1"), QStringLiteral("artist2"),
4951 QStringLiteral("album3"), 1, 1);
4952 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track},
4953 {DataTypes::DatabaseIdRole, firstTrackId}}, {}, {}}}, {}, {});
4954
4955 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
4956 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
4957 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 1);
4958 QCOMPARE(rowsRemovedSpy.count(), 0);
4959 QCOMPARE(rowsMovedSpy.count(), 0);
4960 QCOMPARE(rowsInsertedSpy.count(), 1);
4961 QCOMPARE(persistentStateChangedSpy.count(), 1);
4962 QCOMPARE(dataChangedSpy.count(), 0);
4963 QCOMPARE(newTrackByNameInListSpy.count(), 0);
4964 QCOMPARE(newEntryInListSpy.count(), 1);
4965
4966 QCOMPARE(dataChangedSpy.wait(), true);
4967
4968 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
4969 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
4970 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 1);
4971 QCOMPARE(rowsRemovedSpy.count(), 0);
4972 QCOMPARE(rowsMovedSpy.count(), 0);
4973 QCOMPARE(rowsInsertedSpy.count(), 1);
4974 QCOMPARE(persistentStateChangedSpy.count(), 1);
4975 QCOMPARE(dataChangedSpy.count(), 1);
4976 QCOMPARE(newTrackByNameInListSpy.count(), 0);
4977 QCOMPARE(newEntryInListSpy.count(), 1);
4978
4979 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::IsPlayingRole).toBool(), false);
4980
4981 auto secondTrackId = myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track1"), QStringLiteral("artist1"),
4982 QStringLiteral("album1"), 1, 1);
4983 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track},
4984 {DataTypes::DatabaseIdRole, secondTrackId}}, {}, {}}}, {}, {});
4985
4986 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
4987 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
4988 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 2);
4989 QCOMPARE(rowsRemovedSpy.count(), 0);
4990 QCOMPARE(rowsMovedSpy.count(), 0);
4991 QCOMPARE(rowsInsertedSpy.count(), 2);
4992 QCOMPARE(persistentStateChangedSpy.count(), 2);
4993 QCOMPARE(dataChangedSpy.count(), 1);
4994 QCOMPARE(newTrackByNameInListSpy.count(), 0);
4995 QCOMPARE(newEntryInListSpy.count(), 2);
4996
4997 QCOMPARE(dataChangedSpy.wait(), true);
4998
4999 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
5000 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
5001 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 2);
5002 QCOMPARE(rowsRemovedSpy.count(), 0);
5003 QCOMPARE(rowsMovedSpy.count(), 0);
5004 QCOMPARE(rowsInsertedSpy.count(), 2);
5005 QCOMPARE(persistentStateChangedSpy.count(), 2);
5006 QCOMPARE(dataChangedSpy.count(), 2);
5007 QCOMPARE(newTrackByNameInListSpy.count(), 0);
5008 QCOMPARE(newEntryInListSpy.count(), 2);
5009
5010 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::IsPlayingRole).toBool(), false);
5011 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::ColumnsRoles::IsPlayingRole).toBool(), false);
5012
5013 auto thirdTrackId = myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track2"), QStringLiteral("artist2"),
5014 QStringLiteral("album3"), 2, 1);
5015 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track},
5016 {DataTypes::DatabaseIdRole, thirdTrackId}}, {}, {}}}, {}, {});
5017
5018 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
5019 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
5020 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 3);
5021 QCOMPARE(rowsRemovedSpy.count(), 0);
5022 QCOMPARE(rowsMovedSpy.count(), 0);
5023 QCOMPARE(rowsInsertedSpy.count(), 3);
5024 QCOMPARE(persistentStateChangedSpy.count(), 3);
5025 QCOMPARE(dataChangedSpy.count(), 2);
5026 QCOMPARE(newTrackByNameInListSpy.count(), 0);
5027 QCOMPARE(newEntryInListSpy.count(), 3);
5028
5029 QCOMPARE(dataChangedSpy.wait(), true);
5030
5031 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
5032 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
5033 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 3);
5034 QCOMPARE(rowsRemovedSpy.count(), 0);
5035 QCOMPARE(rowsMovedSpy.count(), 0);
5036 QCOMPARE(rowsInsertedSpy.count(), 3);
5037 QCOMPARE(persistentStateChangedSpy.count(), 3);
5038 QCOMPARE(dataChangedSpy.count(), 3);
5039 QCOMPARE(newTrackByNameInListSpy.count(), 0);
5040 QCOMPARE(newEntryInListSpy.count(), 3);
5041
5042 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::IsPlayingRole).toBool(), false);
5043 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::ColumnsRoles::IsPlayingRole).toBool(), false);
5044 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::ColumnsRoles::IsPlayingRole).toBool(), false);
5045
5046 QCOMPARE(myPlayListProxyModel.setData(myPlayListProxyModel.index(2, 0), true, MediaPlayList::ColumnsRoles::IsPlayingRole), true);
5047
5048 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
5049 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
5050 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 3);
5051 QCOMPARE(rowsRemovedSpy.count(), 0);
5052 QCOMPARE(rowsMovedSpy.count(), 0);
5053 QCOMPARE(rowsInsertedSpy.count(), 3);
5054 QCOMPARE(persistentStateChangedSpy.count(), 3);
5055 QCOMPARE(dataChangedSpy.count(), 4);
5056 QCOMPARE(newTrackByNameInListSpy.count(), 0);
5057 QCOMPARE(newEntryInListSpy.count(), 3);
5058
5059 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ColumnsRoles::IsPlayingRole).toBool(), false);
5060 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::ColumnsRoles::IsPlayingRole).toBool(), false);
5061 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(2, 0), MediaPlayList::ColumnsRoles::IsPlayingRole).toBool(), true);
5062
5063 QCOMPARE(myPlayListProxyModel.setData(myPlayListProxyModel.index(2, 0), true, MediaPlayList::ColumnsRoles::SecondaryTextRole), false);
5064
5065 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
5066 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
5067 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 3);
5068 QCOMPARE(rowsRemovedSpy.count(), 0);
5069 QCOMPARE(rowsMovedSpy.count(), 0);
5070 QCOMPARE(rowsInsertedSpy.count(), 3);
5071 QCOMPARE(persistentStateChangedSpy.count(), 3);
5072 QCOMPARE(dataChangedSpy.count(), 4);
5073 QCOMPARE(newTrackByNameInListSpy.count(), 0);
5074 QCOMPARE(newEntryInListSpy.count(), 3);
5075
5076 QCOMPARE(myPlayListProxyModel.setData(myPlayListProxyModel.index(4, 0), true, MediaPlayList::ColumnsRoles::TitleRole), false);
5077
5078 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
5079 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
5080 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 3);
5081 QCOMPARE(rowsRemovedSpy.count(), 0);
5082 QCOMPARE(rowsMovedSpy.count(), 0);
5083 QCOMPARE(rowsInsertedSpy.count(), 3);
5084 QCOMPARE(persistentStateChangedSpy.count(), 3);
5085 QCOMPARE(dataChangedSpy.count(), 4);
5086 QCOMPARE(newTrackByNameInListSpy.count(), 0);
5087 QCOMPARE(newEntryInListSpy.count(), 3);
5088
5089 QCOMPARE(myPlayListProxyModel.setData({}, true, MediaPlayList::ColumnsRoles::TitleRole), false);
5090
5091 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
5092 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
5093 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 3);
5094 QCOMPARE(rowsRemovedSpy.count(), 0);
5095 QCOMPARE(rowsMovedSpy.count(), 0);
5096 QCOMPARE(rowsInsertedSpy.count(), 3);
5097 QCOMPARE(persistentStateChangedSpy.count(), 3);
5098 QCOMPARE(dataChangedSpy.count(), 4);
5099 QCOMPARE(newTrackByNameInListSpy.count(), 0);
5100 QCOMPARE(newEntryInListSpy.count(), 3);
5101 }
5102
testHasHeader()5103 void MediaPlayListProxyModelTest::testHasHeader()
5104 {
5105 MediaPlayList myPlayList;
5106 QAbstractItemModelTester testModel(&myPlayList);
5107 MediaPlayListProxyModel myPlayListProxyModel;
5108 myPlayListProxyModel.setPlayListModel(&myPlayList);
5109 QAbstractItemModelTester testProxyModel(&myPlayListProxyModel);
5110 DatabaseInterface myDatabaseContent;
5111 TracksListener myListener(&myDatabaseContent);
5112
5113 QSignalSpy rowsAboutToBeMovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsAboutToBeMoved);
5114 QSignalSpy rowsAboutToBeRemovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsAboutToBeRemoved);
5115 QSignalSpy rowsAboutToBeInsertedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsAboutToBeInserted);
5116 QSignalSpy rowsMovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsMoved);
5117 QSignalSpy rowsRemovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsRemoved);
5118 QSignalSpy rowsInsertedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsInserted);
5119 QSignalSpy persistentStateChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::persistentStateChanged);
5120 QSignalSpy dataChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::dataChanged);
5121 QSignalSpy newTrackByNameInListSpy(&myPlayList, &MediaPlayList::newTrackByNameInList);
5122 QSignalSpy newEntryInListSpy(&myPlayList, &MediaPlayList::newEntryInList);
5123 QSignalSpy newUrlInListSpy(&myPlayList, &MediaPlayList::newUrlInList);
5124
5125 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
5126 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
5127 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 0);
5128 QCOMPARE(rowsRemovedSpy.count(), 0);
5129 QCOMPARE(rowsMovedSpy.count(), 0);
5130 QCOMPARE(rowsInsertedSpy.count(), 0);
5131 QCOMPARE(persistentStateChangedSpy.count(), 0);
5132 QCOMPARE(dataChangedSpy.count(), 0);
5133 QCOMPARE(newTrackByNameInListSpy.count(), 0);
5134 QCOMPARE(newEntryInListSpy.count(), 0);
5135
5136 myDatabaseContent.init(QStringLiteral("testDbDirectContent"));
5137
5138 connect(&myListener, &TracksListener::trackHasChanged,
5139 &myPlayList, &MediaPlayList::trackChanged,
5140 Qt::QueuedConnection);
5141 connect(&myListener, &TracksListener::tracksListAdded,
5142 &myPlayList, &MediaPlayList::tracksListAdded,
5143 Qt::QueuedConnection);
5144 connect(&myPlayList, &MediaPlayList::newTrackByNameInList,
5145 &myListener, &TracksListener::trackByNameInList,
5146 Qt::QueuedConnection);
5147 connect(&myPlayList, &MediaPlayList::newEntryInList,
5148 &myListener, &TracksListener::newEntryInList,
5149 Qt::QueuedConnection);
5150 connect(&myPlayList, &MediaPlayList::newUrlInList,
5151 &myListener, &TracksListener::newUrlInList,
5152 Qt::QueuedConnection);
5153 connect(&myDatabaseContent, &DatabaseInterface::tracksAdded,
5154 &myListener, &TracksListener::tracksAdded);
5155
5156 myDatabaseContent.insertTracksList(mNewTracks, mNewCovers);
5157
5158 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
5159 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
5160 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 0);
5161 QCOMPARE(rowsRemovedSpy.count(), 0);
5162 QCOMPARE(rowsMovedSpy.count(), 0);
5163 QCOMPARE(rowsInsertedSpy.count(), 0);
5164 QCOMPARE(persistentStateChangedSpy.count(), 0);
5165 QCOMPARE(dataChangedSpy.count(), 0);
5166 QCOMPARE(newTrackByNameInListSpy.count(), 0);
5167 QCOMPARE(newEntryInListSpy.count(), 0);
5168
5169 auto firstTrackId = myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track1"), QStringLiteral("artist1"), QStringLiteral("album2"), 1, 1);
5170 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track},
5171 {DataTypes::DatabaseIdRole, firstTrackId}}, {}, {}}}, {}, {});
5172
5173 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
5174 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
5175 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 1);
5176 QCOMPARE(rowsRemovedSpy.count(), 0);
5177 QCOMPARE(rowsMovedSpy.count(), 0);
5178 QCOMPARE(rowsInsertedSpy.count(), 1);
5179 QCOMPARE(persistentStateChangedSpy.count(), 1);
5180 QCOMPARE(dataChangedSpy.count(), 0);
5181 QCOMPARE(newTrackByNameInListSpy.count(), 0);
5182 QCOMPARE(newEntryInListSpy.count(), 1);
5183
5184 QCOMPARE(dataChangedSpy.wait(), true);
5185
5186 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
5187 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
5188 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 1);
5189 QCOMPARE(rowsRemovedSpy.count(), 0);
5190 QCOMPARE(rowsMovedSpy.count(), 0);
5191 QCOMPARE(rowsInsertedSpy.count(), 1);
5192 QCOMPARE(persistentStateChangedSpy.count(), 1);
5193 QCOMPARE(dataChangedSpy.count(), 1);
5194 QCOMPARE(newTrackByNameInListSpy.count(), 0);
5195 QCOMPARE(newEntryInListSpy.count(), 1);
5196
5197 auto secondTrackId = myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track1"), QStringLiteral("artist1"), QStringLiteral("album1"), 1, 1);
5198 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track},
5199 {DataTypes::DatabaseIdRole, secondTrackId}}, {}, {}}}, {}, {});
5200
5201 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
5202 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
5203 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 2);
5204 QCOMPARE(rowsRemovedSpy.count(), 0);
5205 QCOMPARE(rowsMovedSpy.count(), 0);
5206 QCOMPARE(rowsInsertedSpy.count(), 2);
5207 QCOMPARE(persistentStateChangedSpy.count(), 2);
5208 QCOMPARE(dataChangedSpy.count(), 1);
5209 QCOMPARE(newTrackByNameInListSpy.count(), 0);
5210 QCOMPARE(newEntryInListSpy.count(), 2);
5211
5212 QCOMPARE(dataChangedSpy.wait(), true);
5213
5214 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
5215 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
5216 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 2);
5217 QCOMPARE(rowsRemovedSpy.count(), 0);
5218 QCOMPARE(rowsMovedSpy.count(), 0);
5219 QCOMPARE(rowsInsertedSpy.count(), 2);
5220 QCOMPARE(persistentStateChangedSpy.count(), 2);
5221 QCOMPARE(dataChangedSpy.count(), 2);
5222 QCOMPARE(newTrackByNameInListSpy.count(), 0);
5223 QCOMPARE(newEntryInListSpy.count(), 2);
5224
5225 auto thirdTrackId = myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track2"), QStringLiteral("artist1"), QStringLiteral("album2"), 2, 1);
5226 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track},
5227 {DataTypes::DatabaseIdRole, thirdTrackId}}, {}, {}}}, {}, {});
5228
5229 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
5230 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
5231 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 3);
5232 QCOMPARE(rowsRemovedSpy.count(), 0);
5233 QCOMPARE(rowsMovedSpy.count(), 0);
5234 QCOMPARE(rowsInsertedSpy.count(), 3);
5235 QCOMPARE(persistentStateChangedSpy.count(), 3);
5236 QCOMPARE(dataChangedSpy.count(), 2);
5237 QCOMPARE(newTrackByNameInListSpy.count(), 0);
5238 QCOMPARE(newEntryInListSpy.count(), 3);
5239
5240 QCOMPARE(dataChangedSpy.wait(), true);
5241
5242 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
5243 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
5244 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 3);
5245 QCOMPARE(rowsRemovedSpy.count(), 0);
5246 QCOMPARE(rowsMovedSpy.count(), 0);
5247 QCOMPARE(rowsInsertedSpy.count(), 3);
5248 QCOMPARE(persistentStateChangedSpy.count(), 3);
5249 QCOMPARE(dataChangedSpy.count(), 3);
5250 QCOMPARE(newTrackByNameInListSpy.count(), 0);
5251 QCOMPARE(newEntryInListSpy.count(), 3);
5252
5253 auto fourthTrackId = myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track3"), QStringLiteral("artist1"), QStringLiteral("album2"), 3, 1);
5254 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track},
5255 {DataTypes::DatabaseIdRole, fourthTrackId}}, {}, {}}}, {}, {});
5256
5257 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
5258 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
5259 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 4);
5260 QCOMPARE(rowsRemovedSpy.count(), 0);
5261 QCOMPARE(rowsMovedSpy.count(), 0);
5262 QCOMPARE(rowsInsertedSpy.count(), 4);
5263 QCOMPARE(persistentStateChangedSpy.count(), 4);
5264 QCOMPARE(dataChangedSpy.count(), 3);
5265 QCOMPARE(newTrackByNameInListSpy.count(), 0);
5266 QCOMPARE(newEntryInListSpy.count(), 4);
5267
5268 QCOMPARE(dataChangedSpy.wait(), true);
5269
5270 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
5271 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
5272 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 4);
5273 QCOMPARE(rowsRemovedSpy.count(), 0);
5274 QCOMPARE(rowsMovedSpy.count(), 0);
5275 QCOMPARE(rowsInsertedSpy.count(), 4);
5276 QCOMPARE(persistentStateChangedSpy.count(), 4);
5277 QCOMPARE(dataChangedSpy.count(), 4);
5278 QCOMPARE(newTrackByNameInListSpy.count(), 0);
5279 QCOMPARE(newEntryInListSpy.count(), 4);
5280
5281 myPlayListProxyModel.removeRow(2);
5282
5283 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 1);
5284 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
5285 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 4);
5286 QCOMPARE(rowsRemovedSpy.count(), 1);
5287 QCOMPARE(rowsMovedSpy.count(), 0);
5288 QCOMPARE(rowsInsertedSpy.count(), 4);
5289 QCOMPARE(persistentStateChangedSpy.count(), 5);
5290 QCOMPARE(dataChangedSpy.count(), 4);
5291 QCOMPARE(newTrackByNameInListSpy.count(), 0);
5292 QCOMPARE(newEntryInListSpy.count(), 4);
5293 }
5294
testHasHeaderWithRemove()5295 void MediaPlayListProxyModelTest::testHasHeaderWithRemove()
5296 {
5297 MediaPlayList myPlayList;
5298 QAbstractItemModelTester testModel(&myPlayList);
5299 MediaPlayListProxyModel myPlayListProxyModel;
5300 myPlayListProxyModel.setPlayListModel(&myPlayList);
5301 QAbstractItemModelTester testProxyModel(&myPlayListProxyModel);
5302 DatabaseInterface myDatabaseContent;
5303 TracksListener myListener(&myDatabaseContent);
5304
5305 QSignalSpy rowsAboutToBeMovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsAboutToBeMoved);
5306 QSignalSpy rowsAboutToBeRemovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsAboutToBeRemoved);
5307 QSignalSpy rowsAboutToBeInsertedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsAboutToBeInserted);
5308 QSignalSpy rowsMovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsMoved);
5309 QSignalSpy rowsRemovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsRemoved);
5310 QSignalSpy rowsInsertedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsInserted);
5311 QSignalSpy persistentStateChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::persistentStateChanged);
5312 QSignalSpy dataChangedSpy(&myPlayList, &MediaPlayListProxyModel::dataChanged);
5313 QSignalSpy newTrackByNameInListSpy(&myPlayList, &MediaPlayList::newTrackByNameInList);
5314 QSignalSpy newEntryInListSpy(&myPlayList, &MediaPlayList::newEntryInList);
5315 QSignalSpy newUrlInListSpy(&myPlayList, &MediaPlayList::newUrlInList);
5316
5317 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
5318 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
5319 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 0);
5320 QCOMPARE(rowsRemovedSpy.count(), 0);
5321 QCOMPARE(rowsMovedSpy.count(), 0);
5322 QCOMPARE(rowsInsertedSpy.count(), 0);
5323 QCOMPARE(persistentStateChangedSpy.count(), 0);
5324 QCOMPARE(dataChangedSpy.count(), 0);
5325 QCOMPARE(newTrackByNameInListSpy.count(), 0);
5326 QCOMPARE(newEntryInListSpy.count(), 0);
5327
5328 myDatabaseContent.init(QStringLiteral("testDbDirectContent"));
5329
5330 connect(&myListener, &TracksListener::trackHasChanged,
5331 &myPlayList, &MediaPlayList::trackChanged,
5332 Qt::QueuedConnection);
5333 connect(&myListener, &TracksListener::tracksListAdded,
5334 &myPlayList, &MediaPlayList::tracksListAdded,
5335 Qt::QueuedConnection);
5336 connect(&myPlayList, &MediaPlayList::newTrackByNameInList,
5337 &myListener, &TracksListener::trackByNameInList,
5338 Qt::QueuedConnection);
5339 connect(&myPlayList, &MediaPlayList::newEntryInList,
5340 &myListener, &TracksListener::newEntryInList,
5341 Qt::QueuedConnection);
5342 connect(&myPlayList, &MediaPlayList::newUrlInList,
5343 &myListener, &TracksListener::newUrlInList,
5344 Qt::QueuedConnection);
5345 connect(&myDatabaseContent, &DatabaseInterface::tracksAdded,
5346 &myListener, &TracksListener::tracksAdded);
5347
5348 myDatabaseContent.insertTracksList(mNewTracks, mNewCovers);
5349
5350 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
5351 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
5352 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 0);
5353 QCOMPARE(rowsRemovedSpy.count(), 0);
5354 QCOMPARE(rowsMovedSpy.count(), 0);
5355 QCOMPARE(rowsInsertedSpy.count(), 0);
5356 QCOMPARE(persistentStateChangedSpy.count(), 0);
5357 QCOMPARE(dataChangedSpy.count(), 0);
5358 QCOMPARE(newTrackByNameInListSpy.count(), 0);
5359 QCOMPARE(newEntryInListSpy.count(), 0);
5360
5361 auto firstTrackId = myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track1"), QStringLiteral("artist1"), QStringLiteral("album2"), 1, 1);
5362 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track},
5363 {DataTypes::DatabaseIdRole, firstTrackId}}, {}, {}}}, {}, {});
5364
5365 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
5366 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
5367 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 1);
5368 QCOMPARE(rowsRemovedSpy.count(), 0);
5369 QCOMPARE(rowsMovedSpy.count(), 0);
5370 QCOMPARE(rowsInsertedSpy.count(), 1);
5371 QCOMPARE(persistentStateChangedSpy.count(), 1);
5372 QCOMPARE(dataChangedSpy.count(), 0);
5373 QCOMPARE(newTrackByNameInListSpy.count(), 0);
5374 QCOMPARE(newEntryInListSpy.count(), 1);
5375
5376 QCOMPARE(dataChangedSpy.wait(), true);
5377
5378 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
5379 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
5380 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 1);
5381 QCOMPARE(rowsRemovedSpy.count(), 0);
5382 QCOMPARE(rowsMovedSpy.count(), 0);
5383 QCOMPARE(rowsInsertedSpy.count(), 1);
5384 QCOMPARE(persistentStateChangedSpy.count(), 1);
5385 QCOMPARE(dataChangedSpy.count(), 1);
5386 QCOMPARE(newTrackByNameInListSpy.count(), 0);
5387 QCOMPARE(newEntryInListSpy.count(), 1);
5388
5389 auto secondTrackId = myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track2"), QStringLiteral("artist1"), QStringLiteral("album2"), 2, 1);
5390 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track},
5391 {DataTypes::DatabaseIdRole, secondTrackId}}, {}, {}}}, {}, {});
5392
5393 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
5394 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
5395 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 2);
5396 QCOMPARE(rowsRemovedSpy.count(), 0);
5397 QCOMPARE(rowsMovedSpy.count(), 0);
5398 QCOMPARE(rowsInsertedSpy.count(), 2);
5399 QCOMPARE(persistentStateChangedSpy.count(), 2);
5400 QCOMPARE(dataChangedSpy.count(), 1);
5401 QCOMPARE(newTrackByNameInListSpy.count(), 0);
5402 QCOMPARE(newEntryInListSpy.count(), 2);
5403
5404 QCOMPARE(dataChangedSpy.wait(), true);
5405
5406 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
5407 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
5408 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 2);
5409 QCOMPARE(rowsRemovedSpy.count(), 0);
5410 QCOMPARE(rowsMovedSpy.count(), 0);
5411 QCOMPARE(rowsInsertedSpy.count(), 2);
5412 QCOMPARE(persistentStateChangedSpy.count(), 2);
5413 QCOMPARE(dataChangedSpy.count(), 2);
5414 QCOMPARE(newTrackByNameInListSpy.count(), 0);
5415 QCOMPARE(newEntryInListSpy.count(), 2);
5416
5417 auto thirdTrackId = myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track1"), QStringLiteral("artist1"), QStringLiteral("album1"), 1, 1);
5418 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track},
5419 {DataTypes::DatabaseIdRole, thirdTrackId}}, {}, {}}}, {}, {});
5420
5421 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
5422 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
5423 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 3);
5424 QCOMPARE(rowsRemovedSpy.count(), 0);
5425 QCOMPARE(rowsMovedSpy.count(), 0);
5426 QCOMPARE(rowsInsertedSpy.count(), 3);
5427 QCOMPARE(persistentStateChangedSpy.count(), 3);
5428 QCOMPARE(dataChangedSpy.count(), 2);
5429 QCOMPARE(newTrackByNameInListSpy.count(), 0);
5430 QCOMPARE(newEntryInListSpy.count(), 3);
5431
5432 QCOMPARE(dataChangedSpy.wait(), true);
5433
5434 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
5435 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
5436 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 3);
5437 QCOMPARE(rowsRemovedSpy.count(), 0);
5438 QCOMPARE(rowsMovedSpy.count(), 0);
5439 QCOMPARE(rowsInsertedSpy.count(), 3);
5440 QCOMPARE(persistentStateChangedSpy.count(), 3);
5441 QCOMPARE(dataChangedSpy.count(), 3);
5442 QCOMPARE(newTrackByNameInListSpy.count(), 0);
5443 QCOMPARE(newEntryInListSpy.count(), 3);
5444
5445 auto fourthTrackId = myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track3"), QStringLiteral("artist1"), QStringLiteral("album2"), 3, 1);
5446 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track},
5447 {DataTypes::DatabaseIdRole, fourthTrackId}}, {}, {}}}, {}, {});
5448
5449 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
5450 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
5451 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 4);
5452 QCOMPARE(rowsRemovedSpy.count(), 0);
5453 QCOMPARE(rowsMovedSpy.count(), 0);
5454 QCOMPARE(rowsInsertedSpy.count(), 4);
5455 QCOMPARE(persistentStateChangedSpy.count(), 4);
5456 QCOMPARE(dataChangedSpy.count(), 3);
5457 QCOMPARE(newTrackByNameInListSpy.count(), 0);
5458 QCOMPARE(newEntryInListSpy.count(), 4);
5459
5460 QCOMPARE(dataChangedSpy.wait(), true);
5461
5462 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
5463 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
5464 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 4);
5465 QCOMPARE(rowsRemovedSpy.count(), 0);
5466 QCOMPARE(rowsMovedSpy.count(), 0);
5467 QCOMPARE(rowsInsertedSpy.count(), 4);
5468 QCOMPARE(persistentStateChangedSpy.count(), 4);
5469 QCOMPARE(dataChangedSpy.count(), 4);
5470 QCOMPARE(newTrackByNameInListSpy.count(), 0);
5471 QCOMPARE(newEntryInListSpy.count(), 4);
5472
5473 myPlayListProxyModel.removeRow(2);
5474
5475 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 1);
5476 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
5477 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 4);
5478 QCOMPARE(rowsRemovedSpy.count(), 1);
5479 QCOMPARE(rowsMovedSpy.count(), 0);
5480 QCOMPARE(rowsInsertedSpy.count(), 4);
5481 QCOMPARE(persistentStateChangedSpy.count(), 5);
5482 QCOMPARE(dataChangedSpy.count(), 4);
5483 QCOMPARE(newTrackByNameInListSpy.count(), 0);
5484 QCOMPARE(newEntryInListSpy.count(), 4);
5485
5486 myPlayListProxyModel.removeRow(0);
5487
5488 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 2);
5489 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
5490 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 4);
5491 QCOMPARE(rowsRemovedSpy.count(), 2);
5492 QCOMPARE(rowsMovedSpy.count(), 0);
5493 QCOMPARE(rowsInsertedSpy.count(), 4);
5494 QCOMPARE(persistentStateChangedSpy.count(), 6);
5495 QCOMPARE(dataChangedSpy.count(), 4);
5496 QCOMPARE(newTrackByNameInListSpy.count(), 0);
5497 QCOMPARE(newEntryInListSpy.count(), 4);
5498 }
5499
testHasHeaderMoveFirst()5500 void MediaPlayListProxyModelTest::testHasHeaderMoveFirst()
5501 {
5502 MediaPlayList myPlayList;
5503 QAbstractItemModelTester testModel(&myPlayList);
5504 MediaPlayListProxyModel myPlayListProxyModel;
5505 myPlayListProxyModel.setPlayListModel(&myPlayList);
5506 QAbstractItemModelTester testProxyModel(&myPlayListProxyModel);
5507 DatabaseInterface myDatabaseContent;
5508 TracksListener myListener(&myDatabaseContent);
5509
5510 QSignalSpy rowsAboutToBeMovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsAboutToBeMoved);
5511 QSignalSpy rowsAboutToBeRemovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsAboutToBeRemoved);
5512 QSignalSpy rowsAboutToBeInsertedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsAboutToBeInserted);
5513 QSignalSpy rowsMovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsMoved);
5514 QSignalSpy rowsRemovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsRemoved);
5515 QSignalSpy rowsInsertedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsInserted);
5516 QSignalSpy persistentStateChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::persistentStateChanged);
5517 QSignalSpy dataChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::dataChanged);
5518 QSignalSpy newTrackByNameInListSpy(&myPlayList, &MediaPlayList::newTrackByNameInList);
5519 QSignalSpy newEntryInListSpy(&myPlayList, &MediaPlayList::newEntryInList);
5520 QSignalSpy newUrlInListSpy(&myPlayList, &MediaPlayList::newUrlInList);
5521
5522 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
5523 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
5524 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 0);
5525 QCOMPARE(rowsRemovedSpy.count(), 0);
5526 QCOMPARE(rowsMovedSpy.count(), 0);
5527 QCOMPARE(rowsInsertedSpy.count(), 0);
5528 QCOMPARE(persistentStateChangedSpy.count(), 0);
5529 QCOMPARE(dataChangedSpy.count(), 0);
5530 QCOMPARE(newTrackByNameInListSpy.count(), 0);
5531 QCOMPARE(newEntryInListSpy.count(), 0);
5532
5533 myDatabaseContent.init(QStringLiteral("testDbDirectContent"));
5534
5535 connect(&myListener, &TracksListener::trackHasChanged,
5536 &myPlayList, &MediaPlayList::trackChanged,
5537 Qt::QueuedConnection);
5538 connect(&myListener, &TracksListener::tracksListAdded,
5539 &myPlayList, &MediaPlayList::tracksListAdded,
5540 Qt::QueuedConnection);
5541 connect(&myPlayList, &MediaPlayList::newTrackByNameInList,
5542 &myListener, &TracksListener::trackByNameInList,
5543 Qt::QueuedConnection);
5544 connect(&myPlayList, &MediaPlayList::newEntryInList,
5545 &myListener, &TracksListener::newEntryInList,
5546 Qt::QueuedConnection);
5547 connect(&myPlayList, &MediaPlayList::newUrlInList,
5548 &myListener, &TracksListener::newUrlInList,
5549 Qt::QueuedConnection);
5550 connect(&myDatabaseContent, &DatabaseInterface::tracksAdded,
5551 &myListener, &TracksListener::tracksAdded);
5552
5553 myDatabaseContent.insertTracksList(mNewTracks, mNewCovers);
5554
5555 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
5556 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
5557 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 0);
5558 QCOMPARE(rowsRemovedSpy.count(), 0);
5559 QCOMPARE(rowsMovedSpy.count(), 0);
5560 QCOMPARE(rowsInsertedSpy.count(), 0);
5561 QCOMPARE(persistentStateChangedSpy.count(), 0);
5562 QCOMPARE(dataChangedSpy.count(), 0);
5563 QCOMPARE(newTrackByNameInListSpy.count(), 0);
5564 QCOMPARE(newEntryInListSpy.count(), 0);
5565
5566 auto firstTrackId = myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track1"), QStringLiteral("artist1"), QStringLiteral("album2"), 1, 1);
5567 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track},
5568 {DataTypes::DatabaseIdRole, firstTrackId}}, {}, {}}}, {}, {});
5569
5570 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
5571 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
5572 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 1);
5573 QCOMPARE(rowsRemovedSpy.count(), 0);
5574 QCOMPARE(rowsMovedSpy.count(), 0);
5575 QCOMPARE(rowsInsertedSpy.count(), 1);
5576 QCOMPARE(persistentStateChangedSpy.count(), 1);
5577 QCOMPARE(dataChangedSpy.count(), 0);
5578 QCOMPARE(newTrackByNameInListSpy.count(), 0);
5579 QCOMPARE(newEntryInListSpy.count(), 1);
5580
5581 QCOMPARE(dataChangedSpy.wait(), true);
5582
5583 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
5584 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
5585 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 1);
5586 QCOMPARE(rowsRemovedSpy.count(), 0);
5587 QCOMPARE(rowsMovedSpy.count(), 0);
5588 QCOMPARE(rowsInsertedSpy.count(), 1);
5589 QCOMPARE(persistentStateChangedSpy.count(), 1);
5590 QCOMPARE(dataChangedSpy.count(), 1);
5591 QCOMPARE(newTrackByNameInListSpy.count(), 0);
5592 QCOMPARE(newEntryInListSpy.count(), 1);
5593
5594 auto secondTrackId = myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track2"), QStringLiteral("artist1"), QStringLiteral("album2"), 2, 1);
5595 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track},
5596 {DataTypes::DatabaseIdRole, secondTrackId}}, {}, {}}}, {}, {});
5597
5598 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
5599 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
5600 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 2);
5601 QCOMPARE(rowsRemovedSpy.count(), 0);
5602 QCOMPARE(rowsMovedSpy.count(), 0);
5603 QCOMPARE(rowsInsertedSpy.count(), 2);
5604 QCOMPARE(persistentStateChangedSpy.count(), 2);
5605 QCOMPARE(dataChangedSpy.count(), 1);
5606 QCOMPARE(newTrackByNameInListSpy.count(), 0);
5607 QCOMPARE(newEntryInListSpy.count(), 2);
5608
5609 QCOMPARE(dataChangedSpy.wait(), true);
5610
5611 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
5612 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
5613 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 2);
5614 QCOMPARE(rowsRemovedSpy.count(), 0);
5615 QCOMPARE(rowsMovedSpy.count(), 0);
5616 QCOMPARE(rowsInsertedSpy.count(), 2);
5617 QCOMPARE(persistentStateChangedSpy.count(), 2);
5618 QCOMPARE(dataChangedSpy.count(), 2);
5619 QCOMPARE(newTrackByNameInListSpy.count(), 0);
5620 QCOMPARE(newEntryInListSpy.count(), 2);
5621
5622 auto thirdTrackId = myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track3"), QStringLiteral("artist1"), QStringLiteral("album2"), 3, 1);
5623 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track},
5624 {DataTypes::DatabaseIdRole, thirdTrackId}}, {}, {}}}, {}, {});
5625
5626 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
5627 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
5628 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 3);
5629 QCOMPARE(rowsRemovedSpy.count(), 0);
5630 QCOMPARE(rowsMovedSpy.count(), 0);
5631 QCOMPARE(rowsInsertedSpy.count(), 3);
5632 QCOMPARE(persistentStateChangedSpy.count(), 3);
5633 QCOMPARE(dataChangedSpy.count(), 2);
5634 QCOMPARE(newTrackByNameInListSpy.count(), 0);
5635 QCOMPARE(newEntryInListSpy.count(), 3);
5636
5637 QCOMPARE(dataChangedSpy.wait(), true);
5638
5639 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
5640 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
5641 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 3);
5642 QCOMPARE(rowsRemovedSpy.count(), 0);
5643 QCOMPARE(rowsMovedSpy.count(), 0);
5644 QCOMPARE(rowsInsertedSpy.count(), 3);
5645 QCOMPARE(persistentStateChangedSpy.count(), 3);
5646 QCOMPARE(dataChangedSpy.count(), 3);
5647 QCOMPARE(newTrackByNameInListSpy.count(), 0);
5648 QCOMPARE(newEntryInListSpy.count(), 3);
5649
5650 auto fourthTrackId = myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track4"), QStringLiteral("artist1"), QStringLiteral("album2"), 4, 1);
5651 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track},
5652 {DataTypes::DatabaseIdRole, fourthTrackId}}, {}, {}}}, {}, {});
5653
5654 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
5655 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
5656 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 4);
5657 QCOMPARE(rowsRemovedSpy.count(), 0);
5658 QCOMPARE(rowsMovedSpy.count(), 0);
5659 QCOMPARE(rowsInsertedSpy.count(), 4);
5660 QCOMPARE(persistentStateChangedSpy.count(), 4);
5661 QCOMPARE(dataChangedSpy.count(), 3);
5662 QCOMPARE(newTrackByNameInListSpy.count(), 0);
5663 QCOMPARE(newEntryInListSpy.count(), 4);
5664
5665 QCOMPARE(dataChangedSpy.wait(), true);
5666
5667 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
5668 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
5669 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 4);
5670 QCOMPARE(rowsRemovedSpy.count(), 0);
5671 QCOMPARE(rowsMovedSpy.count(), 0);
5672 QCOMPARE(rowsInsertedSpy.count(), 4);
5673 QCOMPARE(persistentStateChangedSpy.count(), 4);
5674 QCOMPARE(dataChangedSpy.count(), 4);
5675 QCOMPARE(newTrackByNameInListSpy.count(), 0);
5676 QCOMPARE(newEntryInListSpy.count(), 4);
5677
5678 myPlayListProxyModel.moveRow(0, 3);
5679
5680 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
5681 QCOMPARE(rowsAboutToBeMovedSpy.count(), 1);
5682 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 4);
5683 QCOMPARE(rowsRemovedSpy.count(), 0);
5684 QCOMPARE(rowsMovedSpy.count(), 1);
5685 QCOMPARE(rowsInsertedSpy.count(), 4);
5686 QCOMPARE(persistentStateChangedSpy.count(), 5);
5687 QCOMPARE(dataChangedSpy.count(), 4);
5688 QCOMPARE(newTrackByNameInListSpy.count(), 0);
5689 QCOMPARE(newEntryInListSpy.count(), 4);
5690 }
5691
testHasHeaderMoveAnother()5692 void MediaPlayListProxyModelTest::testHasHeaderMoveAnother()
5693 {
5694 MediaPlayList myPlayList;
5695 QAbstractItemModelTester testModel(&myPlayList);
5696 MediaPlayListProxyModel myPlayListProxyModel;
5697 myPlayListProxyModel.setPlayListModel(&myPlayList);
5698 QAbstractItemModelTester testProxyModel(&myPlayListProxyModel);
5699 DatabaseInterface myDatabaseContent;
5700 TracksListener myListener(&myDatabaseContent);
5701
5702 QSignalSpy rowsAboutToBeMovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsAboutToBeMoved);
5703 QSignalSpy rowsAboutToBeRemovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsAboutToBeRemoved);
5704 QSignalSpy rowsAboutToBeInsertedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsAboutToBeInserted);
5705 QSignalSpy rowsMovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsMoved);
5706 QSignalSpy rowsRemovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsRemoved);
5707 QSignalSpy rowsInsertedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsInserted);
5708 QSignalSpy persistentStateChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::persistentStateChanged);
5709 QSignalSpy dataChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::dataChanged);
5710 QSignalSpy newTrackByNameInListSpy(&myPlayList, &MediaPlayList::newTrackByNameInList);
5711 QSignalSpy newEntryInListSpy(&myPlayList, &MediaPlayList::newEntryInList);
5712 QSignalSpy newUrlInListSpy(&myPlayList, &MediaPlayList::newUrlInList);
5713
5714 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
5715 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
5716 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 0);
5717 QCOMPARE(rowsRemovedSpy.count(), 0);
5718 QCOMPARE(rowsMovedSpy.count(), 0);
5719 QCOMPARE(rowsInsertedSpy.count(), 0);
5720 QCOMPARE(persistentStateChangedSpy.count(), 0);
5721 QCOMPARE(dataChangedSpy.count(), 0);
5722 QCOMPARE(newTrackByNameInListSpy.count(), 0);
5723 QCOMPARE(newEntryInListSpy.count(), 0);
5724
5725 myDatabaseContent.init(QStringLiteral("testDbDirectContent"));
5726
5727 connect(&myListener, &TracksListener::trackHasChanged,
5728 &myPlayList, &MediaPlayList::trackChanged,
5729 Qt::QueuedConnection);
5730 connect(&myListener, &TracksListener::tracksListAdded,
5731 &myPlayList, &MediaPlayList::tracksListAdded,
5732 Qt::QueuedConnection);
5733 connect(&myPlayList, &MediaPlayList::newTrackByNameInList,
5734 &myListener, &TracksListener::trackByNameInList,
5735 Qt::QueuedConnection);
5736 connect(&myPlayList, &MediaPlayList::newEntryInList,
5737 &myListener, &TracksListener::newEntryInList,
5738 Qt::QueuedConnection);
5739 connect(&myPlayList, &MediaPlayList::newUrlInList,
5740 &myListener, &TracksListener::newUrlInList,
5741 Qt::QueuedConnection);
5742 connect(&myDatabaseContent, &DatabaseInterface::tracksAdded,
5743 &myListener, &TracksListener::tracksAdded);
5744
5745 myDatabaseContent.insertTracksList(mNewTracks, mNewCovers);
5746
5747 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
5748 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
5749 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 0);
5750 QCOMPARE(rowsRemovedSpy.count(), 0);
5751 QCOMPARE(rowsMovedSpy.count(), 0);
5752 QCOMPARE(rowsInsertedSpy.count(), 0);
5753 QCOMPARE(persistentStateChangedSpy.count(), 0);
5754 QCOMPARE(dataChangedSpy.count(), 0);
5755 QCOMPARE(newTrackByNameInListSpy.count(), 0);
5756 QCOMPARE(newEntryInListSpy.count(), 0);
5757
5758 auto firstTrackId = myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track1"), QStringLiteral("artist1"), QStringLiteral("album2"), 1, 1);
5759 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track},
5760 {DataTypes::DatabaseIdRole, firstTrackId}}, {}, {}}}, {}, {});
5761
5762 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
5763 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
5764 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 1);
5765 QCOMPARE(rowsRemovedSpy.count(), 0);
5766 QCOMPARE(rowsMovedSpy.count(), 0);
5767 QCOMPARE(rowsInsertedSpy.count(), 1);
5768 QCOMPARE(persistentStateChangedSpy.count(), 1);
5769 QCOMPARE(dataChangedSpy.count(), 0);
5770 QCOMPARE(newTrackByNameInListSpy.count(), 0);
5771 QCOMPARE(newEntryInListSpy.count(), 1);
5772
5773 QCOMPARE(dataChangedSpy.wait(), true);
5774
5775 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
5776 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
5777 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 1);
5778 QCOMPARE(rowsRemovedSpy.count(), 0);
5779 QCOMPARE(rowsMovedSpy.count(), 0);
5780 QCOMPARE(rowsInsertedSpy.count(), 1);
5781 QCOMPARE(persistentStateChangedSpy.count(), 1);
5782 QCOMPARE(dataChangedSpy.count(), 1);
5783 QCOMPARE(newTrackByNameInListSpy.count(), 0);
5784 QCOMPARE(newEntryInListSpy.count(), 1);
5785
5786 auto secondTrackId = myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track2"), QStringLiteral("artist1"), QStringLiteral("album2"), 2, 1);
5787 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track},
5788 {DataTypes::DatabaseIdRole, secondTrackId}}, {}, {}}}, {}, {});
5789
5790 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
5791 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
5792 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 2);
5793 QCOMPARE(rowsRemovedSpy.count(), 0);
5794 QCOMPARE(rowsMovedSpy.count(), 0);
5795 QCOMPARE(rowsInsertedSpy.count(), 2);
5796 QCOMPARE(persistentStateChangedSpy.count(), 2);
5797 QCOMPARE(dataChangedSpy.count(), 1);
5798 QCOMPARE(newTrackByNameInListSpy.count(), 0);
5799 QCOMPARE(newEntryInListSpy.count(), 2);
5800
5801 QCOMPARE(dataChangedSpy.wait(), true);
5802
5803 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
5804 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
5805 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 2);
5806 QCOMPARE(rowsRemovedSpy.count(), 0);
5807 QCOMPARE(rowsMovedSpy.count(), 0);
5808 QCOMPARE(rowsInsertedSpy.count(), 2);
5809 QCOMPARE(persistentStateChangedSpy.count(), 2);
5810 QCOMPARE(dataChangedSpy.count(), 2);
5811 QCOMPARE(newTrackByNameInListSpy.count(), 0);
5812 QCOMPARE(newEntryInListSpy.count(), 2);
5813
5814 auto thirdTrackId = myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track3"), QStringLiteral("artist1"), QStringLiteral("album2"), 3, 1);
5815 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track},
5816 {DataTypes::DatabaseIdRole, thirdTrackId}}, {}, {}}}, {}, {});
5817
5818 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
5819 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
5820 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 3);
5821 QCOMPARE(rowsRemovedSpy.count(), 0);
5822 QCOMPARE(rowsMovedSpy.count(), 0);
5823 QCOMPARE(rowsInsertedSpy.count(), 3);
5824 QCOMPARE(persistentStateChangedSpy.count(), 3);
5825 QCOMPARE(dataChangedSpy.count(), 2);
5826 QCOMPARE(newTrackByNameInListSpy.count(), 0);
5827 QCOMPARE(newEntryInListSpy.count(), 3);
5828
5829 QCOMPARE(dataChangedSpy.wait(), true);
5830
5831 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
5832 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
5833 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 3);
5834 QCOMPARE(rowsRemovedSpy.count(), 0);
5835 QCOMPARE(rowsMovedSpy.count(), 0);
5836 QCOMPARE(rowsInsertedSpy.count(), 3);
5837 QCOMPARE(persistentStateChangedSpy.count(), 3);
5838 QCOMPARE(dataChangedSpy.count(), 3);
5839 QCOMPARE(newTrackByNameInListSpy.count(), 0);
5840 QCOMPARE(newEntryInListSpy.count(), 3);
5841
5842 auto fourthTrackId = myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track4"), QStringLiteral("artist1"), QStringLiteral("album2"), 4, 1);
5843 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track},
5844 {DataTypes::DatabaseIdRole, fourthTrackId}}, {}, {}}}, {}, {});
5845
5846 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
5847 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
5848 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 4);
5849 QCOMPARE(rowsRemovedSpy.count(), 0);
5850 QCOMPARE(rowsMovedSpy.count(), 0);
5851 QCOMPARE(rowsInsertedSpy.count(), 4);
5852 QCOMPARE(persistentStateChangedSpy.count(), 4);
5853 QCOMPARE(dataChangedSpy.count(), 3);
5854 QCOMPARE(newTrackByNameInListSpy.count(), 0);
5855 QCOMPARE(newEntryInListSpy.count(), 4);
5856
5857 QCOMPARE(dataChangedSpy.wait(), true);
5858
5859 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
5860 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
5861 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 4);
5862 QCOMPARE(rowsRemovedSpy.count(), 0);
5863 QCOMPARE(rowsMovedSpy.count(), 0);
5864 QCOMPARE(rowsInsertedSpy.count(), 4);
5865 QCOMPARE(persistentStateChangedSpy.count(), 4);
5866 QCOMPARE(dataChangedSpy.count(), 4);
5867 QCOMPARE(newTrackByNameInListSpy.count(), 0);
5868 QCOMPARE(newEntryInListSpy.count(), 4);
5869
5870 myPlayListProxyModel.moveRow(3, 0);
5871
5872 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
5873 QCOMPARE(rowsAboutToBeMovedSpy.count(), 1);
5874 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 4);
5875 QCOMPARE(rowsRemovedSpy.count(), 0);
5876 QCOMPARE(rowsMovedSpy.count(), 1);
5877 QCOMPARE(rowsInsertedSpy.count(), 4);
5878 QCOMPARE(persistentStateChangedSpy.count(), 5);
5879 QCOMPARE(dataChangedSpy.count(), 4);
5880 QCOMPARE(newTrackByNameInListSpy.count(), 0);
5881 QCOMPARE(newEntryInListSpy.count(), 4);
5882 }
5883
testHasHeaderAlbumWithSameTitle()5884 void MediaPlayListProxyModelTest::testHasHeaderAlbumWithSameTitle()
5885 {
5886 MediaPlayList myPlayList;
5887 QAbstractItemModelTester testModel(&myPlayList);
5888 MediaPlayListProxyModel myPlayListProxyModel;
5889 myPlayListProxyModel.setPlayListModel(&myPlayList);
5890 QAbstractItemModelTester testProxyModel(&myPlayListProxyModel);
5891 DatabaseInterface myDatabaseContent;
5892 TracksListener myListener(&myDatabaseContent);
5893
5894 QSignalSpy rowsAboutToBeMovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsAboutToBeMoved);
5895 QSignalSpy rowsAboutToBeRemovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsAboutToBeRemoved);
5896 QSignalSpy rowsAboutToBeInsertedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsAboutToBeInserted);
5897 QSignalSpy rowsMovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsMoved);
5898 QSignalSpy rowsRemovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsRemoved);
5899 QSignalSpy rowsInsertedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsInserted);
5900 QSignalSpy persistentStateChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::persistentStateChanged);
5901 QSignalSpy dataChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::dataChanged);
5902 QSignalSpy newTrackByNameInListSpy(&myPlayList, &MediaPlayList::newTrackByNameInList);
5903 QSignalSpy newEntryInListSpy(&myPlayList, &MediaPlayList::newEntryInList);
5904 QSignalSpy newUrlInListSpy(&myPlayList, &MediaPlayList::newUrlInList);
5905
5906 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
5907 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
5908 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 0);
5909 QCOMPARE(rowsRemovedSpy.count(), 0);
5910 QCOMPARE(rowsMovedSpy.count(), 0);
5911 QCOMPARE(rowsInsertedSpy.count(), 0);
5912 QCOMPARE(persistentStateChangedSpy.count(), 0);
5913 QCOMPARE(dataChangedSpy.count(), 0);
5914 QCOMPARE(newTrackByNameInListSpy.count(), 0);
5915 QCOMPARE(newEntryInListSpy.count(), 0);
5916
5917 myDatabaseContent.init(QStringLiteral("testDbDirectContent"));
5918
5919 connect(&myListener, &TracksListener::trackHasChanged,
5920 &myPlayList, &MediaPlayList::trackChanged,
5921 Qt::QueuedConnection);
5922 connect(&myListener, &TracksListener::tracksListAdded,
5923 &myPlayList, &MediaPlayList::tracksListAdded,
5924 Qt::QueuedConnection);
5925 connect(&myPlayList, &MediaPlayList::newTrackByNameInList,
5926 &myListener, &TracksListener::trackByNameInList,
5927 Qt::QueuedConnection);
5928 connect(&myPlayList, &MediaPlayList::newEntryInList,
5929 &myListener, &TracksListener::newEntryInList,
5930 Qt::QueuedConnection);
5931 connect(&myPlayList, &MediaPlayList::newUrlInList,
5932 &myListener, &TracksListener::newUrlInList,
5933 Qt::QueuedConnection);
5934 connect(&myDatabaseContent, &DatabaseInterface::tracksAdded,
5935 &myListener, &TracksListener::tracksAdded);
5936
5937 myDatabaseContent.insertTracksList(mNewTracks, mNewCovers);
5938
5939 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
5940 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
5941 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 0);
5942 QCOMPARE(rowsRemovedSpy.count(), 0);
5943 QCOMPARE(rowsMovedSpy.count(), 0);
5944 QCOMPARE(rowsInsertedSpy.count(), 0);
5945 QCOMPARE(persistentStateChangedSpy.count(), 0);
5946 QCOMPARE(dataChangedSpy.count(), 0);
5947 QCOMPARE(newTrackByNameInListSpy.count(), 0);
5948 QCOMPARE(newEntryInListSpy.count(), 0);
5949
5950 auto firstTrackId = myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track1"), QStringLiteral("artist2"),
5951 QStringLiteral("album3"), 1, 1);
5952 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track},
5953 {DataTypes::DatabaseIdRole, firstTrackId}}, {}, {}}}, {}, {});
5954
5955 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
5956 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
5957 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 1);
5958 QCOMPARE(rowsRemovedSpy.count(), 0);
5959 QCOMPARE(rowsMovedSpy.count(), 0);
5960 QCOMPARE(rowsInsertedSpy.count(), 1);
5961 QCOMPARE(persistentStateChangedSpy.count(), 1);
5962 QCOMPARE(dataChangedSpy.count(), 0);
5963 QCOMPARE(newTrackByNameInListSpy.count(), 0);
5964 QCOMPARE(newEntryInListSpy.count(), 1);
5965
5966 QCOMPARE(dataChangedSpy.wait(), true);
5967
5968 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
5969 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
5970 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 1);
5971 QCOMPARE(rowsRemovedSpy.count(), 0);
5972 QCOMPARE(rowsMovedSpy.count(), 0);
5973 QCOMPARE(rowsInsertedSpy.count(), 1);
5974 QCOMPARE(persistentStateChangedSpy.count(), 1);
5975 QCOMPARE(dataChangedSpy.count(), 1);
5976 QCOMPARE(newTrackByNameInListSpy.count(), 0);
5977 QCOMPARE(newEntryInListSpy.count(), 1);
5978
5979 auto secondTrackId = myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track1"), QStringLiteral("artist1"),
5980 QStringLiteral("album1"), 1, 1);
5981 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track},
5982 {DataTypes::DatabaseIdRole, secondTrackId}}, {}, {}}}, {}, {});
5983
5984 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
5985 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
5986 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 2);
5987 QCOMPARE(rowsRemovedSpy.count(), 0);
5988 QCOMPARE(rowsMovedSpy.count(), 0);
5989 QCOMPARE(rowsInsertedSpy.count(), 2);
5990 QCOMPARE(persistentStateChangedSpy.count(), 2);
5991 QCOMPARE(dataChangedSpy.count(), 1);
5992 QCOMPARE(newTrackByNameInListSpy.count(), 0);
5993 QCOMPARE(newEntryInListSpy.count(), 2);
5994
5995 QCOMPARE(dataChangedSpy.wait(), true);
5996
5997 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
5998 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
5999 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 2);
6000 QCOMPARE(rowsRemovedSpy.count(), 0);
6001 QCOMPARE(rowsMovedSpy.count(), 0);
6002 QCOMPARE(rowsInsertedSpy.count(), 2);
6003 QCOMPARE(persistentStateChangedSpy.count(), 2);
6004 QCOMPARE(dataChangedSpy.count(), 2);
6005 QCOMPARE(newTrackByNameInListSpy.count(), 0);
6006 QCOMPARE(newEntryInListSpy.count(), 2);
6007
6008 auto thirdTrackId = myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track2"), QStringLiteral("artist2"),
6009 QStringLiteral("album3"), 2, 1);
6010 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track},
6011 {DataTypes::DatabaseIdRole, thirdTrackId}}, {}, {}}}, {}, {});
6012
6013 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
6014 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
6015 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 3);
6016 QCOMPARE(rowsRemovedSpy.count(), 0);
6017 QCOMPARE(rowsMovedSpy.count(), 0);
6018 QCOMPARE(rowsInsertedSpy.count(), 3);
6019 QCOMPARE(persistentStateChangedSpy.count(), 3);
6020 QCOMPARE(dataChangedSpy.count(), 2);
6021 QCOMPARE(newTrackByNameInListSpy.count(), 0);
6022 QCOMPARE(newEntryInListSpy.count(), 3);
6023
6024 QCOMPARE(dataChangedSpy.wait(), true);
6025
6026 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
6027 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
6028 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 3);
6029 QCOMPARE(rowsRemovedSpy.count(), 0);
6030 QCOMPARE(rowsMovedSpy.count(), 0);
6031 QCOMPARE(rowsInsertedSpy.count(), 3);
6032 QCOMPARE(persistentStateChangedSpy.count(), 3);
6033 QCOMPARE(dataChangedSpy.count(), 3);
6034 QCOMPARE(newTrackByNameInListSpy.count(), 0);
6035 QCOMPARE(newEntryInListSpy.count(), 3);
6036
6037 auto fourthTrackId = myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track3"), QStringLiteral("artist2"),
6038 QStringLiteral("album3"), 3, 1);
6039 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track},
6040 {DataTypes::DatabaseIdRole, fourthTrackId}}, {}, {}}}, {}, {});
6041
6042 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
6043 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
6044 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 4);
6045 QCOMPARE(rowsRemovedSpy.count(), 0);
6046 QCOMPARE(rowsMovedSpy.count(), 0);
6047 QCOMPARE(rowsInsertedSpy.count(), 4);
6048 QCOMPARE(persistentStateChangedSpy.count(), 4);
6049 QCOMPARE(dataChangedSpy.count(), 3);
6050 QCOMPARE(newTrackByNameInListSpy.count(), 0);
6051 QCOMPARE(newEntryInListSpy.count(), 4);
6052
6053 QCOMPARE(dataChangedSpy.wait(), true);
6054
6055 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
6056 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
6057 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 4);
6058 QCOMPARE(rowsRemovedSpy.count(), 0);
6059 QCOMPARE(rowsMovedSpy.count(), 0);
6060 QCOMPARE(rowsInsertedSpy.count(), 4);
6061 QCOMPARE(persistentStateChangedSpy.count(), 4);
6062 QCOMPARE(dataChangedSpy.count(), 4);
6063 QCOMPARE(newTrackByNameInListSpy.count(), 0);
6064 QCOMPARE(newEntryInListSpy.count(), 4);
6065
6066 auto fithTrackId = myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track9"), QStringLiteral("artist2"),
6067 QStringLiteral("album3"), 9, 1);
6068 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track},
6069 {DataTypes::DatabaseIdRole, fithTrackId}}, {}, {}}}, {}, {});
6070
6071 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
6072 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
6073 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 5);
6074 QCOMPARE(rowsRemovedSpy.count(), 0);
6075 QCOMPARE(rowsMovedSpy.count(), 0);
6076 QCOMPARE(rowsInsertedSpy.count(), 5);
6077 QCOMPARE(persistentStateChangedSpy.count(), 5);
6078 QCOMPARE(dataChangedSpy.count(), 4);
6079 QCOMPARE(newTrackByNameInListSpy.count(), 0);
6080 QCOMPARE(newEntryInListSpy.count(), 5);
6081
6082 QCOMPARE(dataChangedSpy.wait(), true);
6083
6084 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
6085 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
6086 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 5);
6087 QCOMPARE(rowsRemovedSpy.count(), 0);
6088 QCOMPARE(rowsMovedSpy.count(), 0);
6089 QCOMPARE(rowsInsertedSpy.count(), 5);
6090 QCOMPARE(persistentStateChangedSpy.count(), 5);
6091 QCOMPARE(dataChangedSpy.count(), 5);
6092 QCOMPARE(newTrackByNameInListSpy.count(), 0);
6093 QCOMPARE(newEntryInListSpy.count(), 5);
6094
6095 auto sixthTrackId = myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track1"), QStringLiteral("artist7"),
6096 QStringLiteral("album3"), 1, 1);
6097 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track},
6098 {DataTypes::DatabaseIdRole, sixthTrackId}}, {}, {}}}, {}, {});
6099
6100 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
6101 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
6102 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 6);
6103 QCOMPARE(rowsRemovedSpy.count(), 0);
6104 QCOMPARE(rowsMovedSpy.count(), 0);
6105 QCOMPARE(rowsInsertedSpy.count(), 6);
6106 QCOMPARE(persistentStateChangedSpy.count(), 6);
6107 QCOMPARE(dataChangedSpy.count(), 5);
6108 QCOMPARE(newTrackByNameInListSpy.count(), 0);
6109 QCOMPARE(newEntryInListSpy.count(), 6);
6110
6111 QCOMPARE(dataChangedSpy.wait(), true);
6112
6113 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
6114 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
6115 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 6);
6116 QCOMPARE(rowsRemovedSpy.count(), 0);
6117 QCOMPARE(rowsMovedSpy.count(), 0);
6118 QCOMPARE(rowsInsertedSpy.count(), 6);
6119 QCOMPARE(persistentStateChangedSpy.count(), 6);
6120 QCOMPARE(dataChangedSpy.count(), 6);
6121 QCOMPARE(newTrackByNameInListSpy.count(), 0);
6122 QCOMPARE(newEntryInListSpy.count(), 6);
6123 }
6124
testHasHeaderMoveFirstLikeQml()6125 void MediaPlayListProxyModelTest::testHasHeaderMoveFirstLikeQml()
6126 {
6127 MediaPlayList myPlayList;
6128 QAbstractItemModelTester testModel(&myPlayList);
6129 MediaPlayListProxyModel myPlayListProxyModel;
6130 myPlayListProxyModel.setPlayListModel(&myPlayList);
6131 QAbstractItemModelTester testProxyModel(&myPlayListProxyModel);
6132 DatabaseInterface myDatabaseContent;
6133 TracksListener myListener(&myDatabaseContent);
6134
6135 QSignalSpy rowsAboutToBeMovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsAboutToBeMoved);
6136 QSignalSpy rowsAboutToBeRemovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsAboutToBeRemoved);
6137 QSignalSpy rowsAboutToBeInsertedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsAboutToBeInserted);
6138 QSignalSpy rowsMovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsMoved);
6139 QSignalSpy rowsRemovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsRemoved);
6140 QSignalSpy rowsInsertedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsInserted);
6141 QSignalSpy persistentStateChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::persistentStateChanged);
6142 QSignalSpy dataChangedSpy(&myPlayListProxyModel, &MediaPlayList::dataChanged);
6143 QSignalSpy newTrackByNameInListSpy(&myPlayList, &MediaPlayList::newTrackByNameInList);
6144 QSignalSpy newEntryInListSpy(&myPlayList, &MediaPlayList::newEntryInList);
6145 QSignalSpy newUrlInListSpy(&myPlayList, &MediaPlayList::newUrlInList);
6146
6147 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
6148 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
6149 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 0);
6150 QCOMPARE(rowsRemovedSpy.count(), 0);
6151 QCOMPARE(rowsMovedSpy.count(), 0);
6152 QCOMPARE(rowsInsertedSpy.count(), 0);
6153 QCOMPARE(persistentStateChangedSpy.count(), 0);
6154 QCOMPARE(dataChangedSpy.count(), 0);
6155 QCOMPARE(newTrackByNameInListSpy.count(), 0);
6156 QCOMPARE(newEntryInListSpy.count(), 0);
6157
6158 myDatabaseContent.init(QStringLiteral("testDbDirectContent"));
6159
6160 connect(&myListener, &TracksListener::trackHasChanged,
6161 &myPlayList, &MediaPlayList::trackChanged,
6162 Qt::QueuedConnection);
6163 connect(&myListener, &TracksListener::tracksListAdded,
6164 &myPlayList, &MediaPlayList::tracksListAdded,
6165 Qt::QueuedConnection);
6166 connect(&myPlayList, &MediaPlayList::newTrackByNameInList,
6167 &myListener, &TracksListener::trackByNameInList,
6168 Qt::QueuedConnection);
6169 connect(&myPlayList, &MediaPlayList::newEntryInList,
6170 &myListener, &TracksListener::newEntryInList,
6171 Qt::QueuedConnection);
6172 connect(&myPlayList, &MediaPlayList::newUrlInList,
6173 &myListener, &TracksListener::newUrlInList,
6174 Qt::QueuedConnection);
6175 connect(&myDatabaseContent, &DatabaseInterface::tracksAdded,
6176 &myListener, &TracksListener::tracksAdded);
6177
6178 myDatabaseContent.insertTracksList(mNewTracks, mNewCovers);
6179
6180 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
6181 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
6182 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 0);
6183 QCOMPARE(rowsRemovedSpy.count(), 0);
6184 QCOMPARE(rowsMovedSpy.count(), 0);
6185 QCOMPARE(rowsInsertedSpy.count(), 0);
6186 QCOMPARE(persistentStateChangedSpy.count(), 0);
6187 QCOMPARE(dataChangedSpy.count(), 0);
6188 QCOMPARE(newTrackByNameInListSpy.count(), 0);
6189 QCOMPARE(newEntryInListSpy.count(), 0);
6190
6191 auto firstTrackId = myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track1"), QStringLiteral("artist1"), QStringLiteral("album2"), 1, 1);
6192 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track},
6193 {DataTypes::DatabaseIdRole, firstTrackId}}, {}, {}}}, {}, {});
6194
6195 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
6196 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
6197 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 1);
6198 QCOMPARE(rowsRemovedSpy.count(), 0);
6199 QCOMPARE(rowsMovedSpy.count(), 0);
6200 QCOMPARE(rowsInsertedSpy.count(), 1);
6201 QCOMPARE(persistentStateChangedSpy.count(), 1);
6202 QCOMPARE(dataChangedSpy.count(), 0);
6203 QCOMPARE(newTrackByNameInListSpy.count(), 0);
6204 QCOMPARE(newEntryInListSpy.count(), 1);
6205
6206 QCOMPARE(dataChangedSpy.wait(), true);
6207
6208 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
6209 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
6210 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 1);
6211 QCOMPARE(rowsRemovedSpy.count(), 0);
6212 QCOMPARE(rowsMovedSpy.count(), 0);
6213 QCOMPARE(rowsInsertedSpy.count(), 1);
6214 QCOMPARE(persistentStateChangedSpy.count(), 1);
6215 QCOMPARE(dataChangedSpy.count(), 1);
6216 QCOMPARE(newTrackByNameInListSpy.count(), 0);
6217 QCOMPARE(newEntryInListSpy.count(), 1);
6218
6219 auto secondTrackId = myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track2"), QStringLiteral("artist1"), QStringLiteral("album2"), 2, 1);
6220 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track},
6221 {DataTypes::DatabaseIdRole, secondTrackId}}, {}, {}}}, {}, {});
6222
6223 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
6224 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
6225 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 2);
6226 QCOMPARE(rowsRemovedSpy.count(), 0);
6227 QCOMPARE(rowsMovedSpy.count(), 0);
6228 QCOMPARE(rowsInsertedSpy.count(), 2);
6229 QCOMPARE(persistentStateChangedSpy.count(), 2);
6230 QCOMPARE(dataChangedSpy.count(), 1);
6231 QCOMPARE(newTrackByNameInListSpy.count(), 0);
6232 QCOMPARE(newEntryInListSpy.count(), 2);
6233
6234 QCOMPARE(dataChangedSpy.wait(), true);
6235
6236 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
6237 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
6238 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 2);
6239 QCOMPARE(rowsRemovedSpy.count(), 0);
6240 QCOMPARE(rowsMovedSpy.count(), 0);
6241 QCOMPARE(rowsInsertedSpy.count(), 2);
6242 QCOMPARE(persistentStateChangedSpy.count(), 2);
6243 QCOMPARE(dataChangedSpy.count(), 2);
6244 QCOMPARE(newTrackByNameInListSpy.count(), 0);
6245 QCOMPARE(newEntryInListSpy.count(), 2);
6246
6247 auto thirdTrackId = myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track3"), QStringLiteral("artist1"), QStringLiteral("album2"), 3, 1);
6248 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track},
6249 {DataTypes::DatabaseIdRole, thirdTrackId}}, {}, {}}}, {}, {});
6250
6251 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
6252 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
6253 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 3);
6254 QCOMPARE(rowsRemovedSpy.count(), 0);
6255 QCOMPARE(rowsMovedSpy.count(), 0);
6256 QCOMPARE(rowsInsertedSpy.count(), 3);
6257 QCOMPARE(persistentStateChangedSpy.count(), 3);
6258 QCOMPARE(dataChangedSpy.count(), 2);
6259 QCOMPARE(newTrackByNameInListSpy.count(), 0);
6260 QCOMPARE(newEntryInListSpy.count(), 3);
6261
6262 QCOMPARE(dataChangedSpy.wait(), true);
6263
6264 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
6265 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
6266 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 3);
6267 QCOMPARE(rowsRemovedSpy.count(), 0);
6268 QCOMPARE(rowsMovedSpy.count(), 0);
6269 QCOMPARE(rowsInsertedSpy.count(), 3);
6270 QCOMPARE(persistentStateChangedSpy.count(), 3);
6271 QCOMPARE(dataChangedSpy.count(), 3);
6272 QCOMPARE(newTrackByNameInListSpy.count(), 0);
6273 QCOMPARE(newEntryInListSpy.count(), 3);
6274
6275 auto fourthTrackId = myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track4"), QStringLiteral("artist1"), QStringLiteral("album2"), 4, 1);
6276 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track},
6277 {DataTypes::DatabaseIdRole, fourthTrackId}}, {}, {}}}, {}, {});
6278
6279 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
6280 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
6281 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 4);
6282 QCOMPARE(rowsRemovedSpy.count(), 0);
6283 QCOMPARE(rowsMovedSpy.count(), 0);
6284 QCOMPARE(rowsInsertedSpy.count(), 4);
6285 QCOMPARE(persistentStateChangedSpy.count(), 4);
6286 QCOMPARE(dataChangedSpy.count(), 3);
6287 QCOMPARE(newTrackByNameInListSpy.count(), 0);
6288 QCOMPARE(newEntryInListSpy.count(), 4);
6289
6290 QCOMPARE(dataChangedSpy.wait(), true);
6291
6292 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
6293 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
6294 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 4);
6295 QCOMPARE(rowsRemovedSpy.count(), 0);
6296 QCOMPARE(rowsMovedSpy.count(), 0);
6297 QCOMPARE(rowsInsertedSpy.count(), 4);
6298 QCOMPARE(persistentStateChangedSpy.count(), 4);
6299 QCOMPARE(dataChangedSpy.count(), 4);
6300 QCOMPARE(newTrackByNameInListSpy.count(), 0);
6301 QCOMPARE(newEntryInListSpy.count(), 4);
6302
6303 myPlayListProxyModel.moveRow(0, 3);
6304
6305 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
6306 QCOMPARE(rowsAboutToBeMovedSpy.count(), 1);
6307 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 4);
6308 QCOMPARE(rowsRemovedSpy.count(), 0);
6309 QCOMPARE(rowsMovedSpy.count(), 1);
6310 QCOMPARE(rowsInsertedSpy.count(), 4);
6311 QCOMPARE(persistentStateChangedSpy.count(), 5);
6312 QCOMPARE(dataChangedSpy.count(), 4);
6313 QCOMPARE(newTrackByNameInListSpy.count(), 0);
6314 QCOMPARE(newEntryInListSpy.count(), 4);
6315 }
6316
testHasHeaderMoveAnotherLikeQml()6317 void MediaPlayListProxyModelTest::testHasHeaderMoveAnotherLikeQml()
6318 {
6319 MediaPlayList myPlayList;
6320 QAbstractItemModelTester testModel(&myPlayList);
6321 MediaPlayListProxyModel myPlayListProxyModel;
6322 myPlayListProxyModel.setPlayListModel(&myPlayList);
6323 QAbstractItemModelTester testProxyModel(&myPlayListProxyModel);
6324 DatabaseInterface myDatabaseContent;
6325 TracksListener myListener(&myDatabaseContent);
6326
6327 QSignalSpy rowsAboutToBeMovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsAboutToBeMoved);
6328 QSignalSpy rowsAboutToBeRemovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsAboutToBeRemoved);
6329 QSignalSpy rowsAboutToBeInsertedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsAboutToBeInserted);
6330 QSignalSpy rowsMovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsMoved);
6331 QSignalSpy rowsRemovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsRemoved);
6332 QSignalSpy rowsInsertedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsInserted);
6333 QSignalSpy persistentStateChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::persistentStateChanged);
6334 QSignalSpy dataChangedSpy(&myPlayListProxyModel, &MediaPlayList::dataChanged);
6335 QSignalSpy newTrackByNameInListSpy(&myPlayList, &MediaPlayList::newTrackByNameInList);
6336 QSignalSpy newEntryInListSpy(&myPlayList, &MediaPlayList::newEntryInList);
6337 QSignalSpy newUrlInListSpy(&myPlayList, &MediaPlayList::newUrlInList);
6338
6339 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
6340 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
6341 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 0);
6342 QCOMPARE(rowsRemovedSpy.count(), 0);
6343 QCOMPARE(rowsMovedSpy.count(), 0);
6344 QCOMPARE(rowsInsertedSpy.count(), 0);
6345 QCOMPARE(persistentStateChangedSpy.count(), 0);
6346 QCOMPARE(dataChangedSpy.count(), 0);
6347 QCOMPARE(newTrackByNameInListSpy.count(), 0);
6348 QCOMPARE(newEntryInListSpy.count(), 0);
6349
6350 myDatabaseContent.init(QStringLiteral("testDbDirectContent"));
6351
6352 connect(&myListener, &TracksListener::trackHasChanged,
6353 &myPlayList, &MediaPlayList::trackChanged,
6354 Qt::QueuedConnection);
6355 connect(&myListener, &TracksListener::tracksListAdded,
6356 &myPlayList, &MediaPlayList::tracksListAdded,
6357 Qt::QueuedConnection);
6358 connect(&myPlayList, &MediaPlayList::newTrackByNameInList,
6359 &myListener, &TracksListener::trackByNameInList,
6360 Qt::QueuedConnection);
6361 connect(&myPlayList, &MediaPlayList::newEntryInList,
6362 &myListener, &TracksListener::newEntryInList,
6363 Qt::QueuedConnection);
6364 connect(&myPlayList, &MediaPlayList::newUrlInList,
6365 &myListener, &TracksListener::newUrlInList,
6366 Qt::QueuedConnection);
6367 connect(&myDatabaseContent, &DatabaseInterface::tracksAdded,
6368 &myListener, &TracksListener::tracksAdded);
6369
6370 myDatabaseContent.insertTracksList(mNewTracks, mNewCovers);
6371
6372 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
6373 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
6374 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 0);
6375 QCOMPARE(rowsRemovedSpy.count(), 0);
6376 QCOMPARE(rowsMovedSpy.count(), 0);
6377 QCOMPARE(rowsInsertedSpy.count(), 0);
6378 QCOMPARE(persistentStateChangedSpy.count(), 0);
6379 QCOMPARE(dataChangedSpy.count(), 0);
6380 QCOMPARE(newTrackByNameInListSpy.count(), 0);
6381 QCOMPARE(newEntryInListSpy.count(), 0);
6382
6383 auto firstTrackId = myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track1"), QStringLiteral("artist1"), QStringLiteral("album2"), 1, 1);
6384 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track},
6385 {DataTypes::DatabaseIdRole, firstTrackId}}, {}, {}}}, {}, {});
6386
6387 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
6388 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
6389 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 1);
6390 QCOMPARE(rowsRemovedSpy.count(), 0);
6391 QCOMPARE(rowsMovedSpy.count(), 0);
6392 QCOMPARE(rowsInsertedSpy.count(), 1);
6393 QCOMPARE(persistentStateChangedSpy.count(), 1);
6394 QCOMPARE(dataChangedSpy.count(), 0);
6395 QCOMPARE(newTrackByNameInListSpy.count(), 0);
6396 QCOMPARE(newEntryInListSpy.count(), 1);
6397
6398 QCOMPARE(dataChangedSpy.wait(), true);
6399
6400 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
6401 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
6402 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 1);
6403 QCOMPARE(rowsRemovedSpy.count(), 0);
6404 QCOMPARE(rowsMovedSpy.count(), 0);
6405 QCOMPARE(rowsInsertedSpy.count(), 1);
6406 QCOMPARE(persistentStateChangedSpy.count(), 1);
6407 QCOMPARE(dataChangedSpy.count(), 1);
6408 QCOMPARE(newTrackByNameInListSpy.count(), 0);
6409 QCOMPARE(newEntryInListSpy.count(), 1);
6410
6411 auto secondTrackId = myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track2"), QStringLiteral("artist1"), QStringLiteral("album2"), 2, 1);
6412 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track},
6413 {DataTypes::DatabaseIdRole, secondTrackId}}, {}, {}}}, {}, {});
6414
6415 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
6416 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
6417 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 2);
6418 QCOMPARE(rowsRemovedSpy.count(), 0);
6419 QCOMPARE(rowsMovedSpy.count(), 0);
6420 QCOMPARE(rowsInsertedSpy.count(), 2);
6421 QCOMPARE(persistentStateChangedSpy.count(), 2);
6422 QCOMPARE(dataChangedSpy.count(), 1);
6423 QCOMPARE(newTrackByNameInListSpy.count(), 0);
6424 QCOMPARE(newEntryInListSpy.count(), 2);
6425
6426 QCOMPARE(dataChangedSpy.wait(), true);
6427
6428 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
6429 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
6430 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 2);
6431 QCOMPARE(rowsRemovedSpy.count(), 0);
6432 QCOMPARE(rowsMovedSpy.count(), 0);
6433 QCOMPARE(rowsInsertedSpy.count(), 2);
6434 QCOMPARE(persistentStateChangedSpy.count(), 2);
6435 QCOMPARE(dataChangedSpy.count(), 2);
6436 QCOMPARE(newTrackByNameInListSpy.count(), 0);
6437 QCOMPARE(newEntryInListSpy.count(), 2);
6438
6439 auto thirdTrackId = myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track3"), QStringLiteral("artist1"), QStringLiteral("album2"), 3, 1);
6440 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track},
6441 {DataTypes::DatabaseIdRole, thirdTrackId}}, {}, {}}}, {}, {});
6442
6443 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
6444 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
6445 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 3);
6446 QCOMPARE(rowsRemovedSpy.count(), 0);
6447 QCOMPARE(rowsMovedSpy.count(), 0);
6448 QCOMPARE(rowsInsertedSpy.count(), 3);
6449 QCOMPARE(persistentStateChangedSpy.count(), 3);
6450 QCOMPARE(dataChangedSpy.count(), 2);
6451 QCOMPARE(newTrackByNameInListSpy.count(), 0);
6452 QCOMPARE(newEntryInListSpy.count(), 3);
6453
6454 QCOMPARE(dataChangedSpy.wait(), true);
6455
6456 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
6457 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
6458 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 3);
6459 QCOMPARE(rowsRemovedSpy.count(), 0);
6460 QCOMPARE(rowsMovedSpy.count(), 0);
6461 QCOMPARE(rowsInsertedSpy.count(), 3);
6462 QCOMPARE(persistentStateChangedSpy.count(), 3);
6463 QCOMPARE(dataChangedSpy.count(), 3);
6464 QCOMPARE(newTrackByNameInListSpy.count(), 0);
6465 QCOMPARE(newEntryInListSpy.count(), 3);
6466
6467 auto fourthTrackId = myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track4"), QStringLiteral("artist1"), QStringLiteral("album2"), 4, 1);
6468 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track},
6469 {DataTypes::DatabaseIdRole, fourthTrackId}}, {}, {}}}, {}, {});
6470
6471 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
6472 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
6473 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 4);
6474 QCOMPARE(rowsRemovedSpy.count(), 0);
6475 QCOMPARE(rowsMovedSpy.count(), 0);
6476 QCOMPARE(rowsInsertedSpy.count(), 4);
6477 QCOMPARE(persistentStateChangedSpy.count(), 4);
6478 QCOMPARE(dataChangedSpy.count(), 3);
6479 QCOMPARE(newTrackByNameInListSpy.count(), 0);
6480 QCOMPARE(newEntryInListSpy.count(), 4);
6481
6482 QCOMPARE(dataChangedSpy.wait(), true);
6483
6484 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
6485 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
6486 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 4);
6487 QCOMPARE(rowsRemovedSpy.count(), 0);
6488 QCOMPARE(rowsMovedSpy.count(), 0);
6489 QCOMPARE(rowsInsertedSpy.count(), 4);
6490 QCOMPARE(persistentStateChangedSpy.count(), 4);
6491 QCOMPARE(dataChangedSpy.count(), 4);
6492 QCOMPARE(newTrackByNameInListSpy.count(), 0);
6493 QCOMPARE(newEntryInListSpy.count(), 4);
6494
6495 myPlayListProxyModel.moveRow(3, 0);
6496
6497 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
6498 QCOMPARE(rowsAboutToBeMovedSpy.count(), 1);
6499 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 4);
6500 QCOMPARE(rowsRemovedSpy.count(), 0);
6501 QCOMPARE(rowsMovedSpy.count(), 1);
6502 QCOMPARE(rowsInsertedSpy.count(), 4);
6503 QCOMPARE(persistentStateChangedSpy.count(), 5);
6504 QCOMPARE(dataChangedSpy.count(), 4);
6505 QCOMPARE(newTrackByNameInListSpy.count(), 0);
6506 QCOMPARE(newEntryInListSpy.count(), 4);
6507 }
6508
testHasHeaderYetAnotherMoveLikeQml()6509 void MediaPlayListProxyModelTest::testHasHeaderYetAnotherMoveLikeQml()
6510 {
6511 MediaPlayList myPlayList;
6512 QAbstractItemModelTester testModel(&myPlayList);
6513 MediaPlayListProxyModel myPlayListProxyModel;
6514 myPlayListProxyModel.setPlayListModel(&myPlayList);
6515 QAbstractItemModelTester testProxyModel(&myPlayListProxyModel);
6516 DatabaseInterface myDatabaseContent;
6517 TracksListener myListener(&myDatabaseContent);
6518
6519 QSignalSpy rowsAboutToBeMovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsAboutToBeMoved);
6520 QSignalSpy rowsAboutToBeRemovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsAboutToBeRemoved);
6521 QSignalSpy rowsAboutToBeInsertedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsAboutToBeInserted);
6522 QSignalSpy rowsMovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsMoved);
6523 QSignalSpy rowsRemovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsRemoved);
6524 QSignalSpy rowsInsertedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsInserted);
6525 QSignalSpy persistentStateChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::persistentStateChanged);
6526 QSignalSpy dataChangedSpy(&myPlayListProxyModel, &MediaPlayList::dataChanged);
6527 QSignalSpy newTrackByNameInListSpy(&myPlayList, &MediaPlayList::newTrackByNameInList);
6528 QSignalSpy newEntryInListSpy(&myPlayList, &MediaPlayList::newEntryInList);
6529 QSignalSpy newUrlInListSpy(&myPlayList, &MediaPlayList::newUrlInList);
6530
6531 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
6532 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
6533 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 0);
6534 QCOMPARE(rowsRemovedSpy.count(), 0);
6535 QCOMPARE(rowsMovedSpy.count(), 0);
6536 QCOMPARE(rowsInsertedSpy.count(), 0);
6537 QCOMPARE(persistentStateChangedSpy.count(), 0);
6538 QCOMPARE(dataChangedSpy.count(), 0);
6539 QCOMPARE(newTrackByNameInListSpy.count(), 0);
6540 QCOMPARE(newEntryInListSpy.count(), 0);
6541
6542 myDatabaseContent.init(QStringLiteral("testDbDirectContent"));
6543
6544 connect(&myListener, &TracksListener::trackHasChanged,
6545 &myPlayList, &MediaPlayList::trackChanged,
6546 Qt::QueuedConnection);
6547 connect(&myListener, &TracksListener::tracksListAdded,
6548 &myPlayList, &MediaPlayList::tracksListAdded,
6549 Qt::QueuedConnection);
6550 connect(&myPlayList, &MediaPlayList::newTrackByNameInList,
6551 &myListener, &TracksListener::trackByNameInList,
6552 Qt::QueuedConnection);
6553 connect(&myPlayList, &MediaPlayList::newEntryInList,
6554 &myListener, &TracksListener::newEntryInList,
6555 Qt::QueuedConnection);
6556 connect(&myPlayList, &MediaPlayList::newUrlInList,
6557 &myListener, &TracksListener::newUrlInList,
6558 Qt::QueuedConnection);
6559 connect(&myDatabaseContent, &DatabaseInterface::tracksAdded,
6560 &myListener, &TracksListener::tracksAdded);
6561
6562 myDatabaseContent.insertTracksList(mNewTracks, mNewCovers);
6563
6564 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
6565 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
6566 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 0);
6567 QCOMPARE(rowsRemovedSpy.count(), 0);
6568 QCOMPARE(rowsMovedSpy.count(), 0);
6569 QCOMPARE(rowsInsertedSpy.count(), 0);
6570 QCOMPARE(persistentStateChangedSpy.count(), 0);
6571 QCOMPARE(dataChangedSpy.count(), 0);
6572 QCOMPARE(newTrackByNameInListSpy.count(), 0);
6573 QCOMPARE(newEntryInListSpy.count(), 0);
6574
6575 auto firstTrackId = myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track1"), QStringLiteral("artist1"), QStringLiteral("album2"), 1, 1);
6576 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track},
6577 {DataTypes::DatabaseIdRole, firstTrackId}}, {}, {}}}, {}, {});
6578
6579 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
6580 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
6581 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 1);
6582 QCOMPARE(rowsRemovedSpy.count(), 0);
6583 QCOMPARE(rowsMovedSpy.count(), 0);
6584 QCOMPARE(rowsInsertedSpy.count(), 1);
6585 QCOMPARE(persistentStateChangedSpy.count(), 1);
6586 QCOMPARE(dataChangedSpy.count(), 0);
6587 QCOMPARE(newTrackByNameInListSpy.count(), 0);
6588 QCOMPARE(newEntryInListSpy.count(), 1);
6589
6590 QCOMPARE(dataChangedSpy.wait(), true);
6591
6592 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
6593 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
6594 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 1);
6595 QCOMPARE(rowsRemovedSpy.count(), 0);
6596 QCOMPARE(rowsMovedSpy.count(), 0);
6597 QCOMPARE(rowsInsertedSpy.count(), 1);
6598 QCOMPARE(persistentStateChangedSpy.count(), 1);
6599 QCOMPARE(dataChangedSpy.count(), 1);
6600 QCOMPARE(newTrackByNameInListSpy.count(), 0);
6601 QCOMPARE(newEntryInListSpy.count(), 1);
6602
6603 auto secondTrackId = myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track2"), QStringLiteral("artist1"), QStringLiteral("album2"), 2, 1);
6604 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track},
6605 {DataTypes::DatabaseIdRole, secondTrackId}}, {}, {}}}, {}, {});
6606
6607 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
6608 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
6609 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 2);
6610 QCOMPARE(rowsRemovedSpy.count(), 0);
6611 QCOMPARE(rowsMovedSpy.count(), 0);
6612 QCOMPARE(rowsInsertedSpy.count(), 2);
6613 QCOMPARE(persistentStateChangedSpy.count(), 2);
6614 QCOMPARE(dataChangedSpy.count(), 1);
6615 QCOMPARE(newTrackByNameInListSpy.count(), 0);
6616 QCOMPARE(newEntryInListSpy.count(), 2);
6617
6618 QCOMPARE(dataChangedSpy.wait(), true);
6619
6620 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
6621 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
6622 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 2);
6623 QCOMPARE(rowsRemovedSpy.count(), 0);
6624 QCOMPARE(rowsMovedSpy.count(), 0);
6625 QCOMPARE(rowsInsertedSpy.count(), 2);
6626 QCOMPARE(persistentStateChangedSpy.count(), 2);
6627 QCOMPARE(dataChangedSpy.count(), 2);
6628 QCOMPARE(newTrackByNameInListSpy.count(), 0);
6629 QCOMPARE(newEntryInListSpy.count(), 2);
6630
6631 auto thirdTrackId = myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track1"), QStringLiteral("artist1"), QStringLiteral("album1"), 1, 1);
6632 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track},
6633 {DataTypes::DatabaseIdRole, thirdTrackId}}, {}, {}}}, {}, {});
6634
6635 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
6636 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
6637 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 3);
6638 QCOMPARE(rowsRemovedSpy.count(), 0);
6639 QCOMPARE(rowsMovedSpy.count(), 0);
6640 QCOMPARE(rowsInsertedSpy.count(), 3);
6641 QCOMPARE(persistentStateChangedSpy.count(), 3);
6642 QCOMPARE(dataChangedSpy.count(), 2);
6643 QCOMPARE(newTrackByNameInListSpy.count(), 0);
6644 QCOMPARE(newEntryInListSpy.count(), 3);
6645
6646 QCOMPARE(dataChangedSpy.wait(), true);
6647
6648 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
6649 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
6650 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 3);
6651 QCOMPARE(rowsRemovedSpy.count(), 0);
6652 QCOMPARE(rowsMovedSpy.count(), 0);
6653 QCOMPARE(rowsInsertedSpy.count(), 3);
6654 QCOMPARE(persistentStateChangedSpy.count(), 3);
6655 QCOMPARE(dataChangedSpy.count(), 3);
6656 QCOMPARE(newTrackByNameInListSpy.count(), 0);
6657 QCOMPARE(newEntryInListSpy.count(), 3);
6658
6659 auto fourthTrackId = myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track4"), QStringLiteral("artist1"), QStringLiteral("album2"), 4, 1);
6660 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track},
6661 {DataTypes::DatabaseIdRole, fourthTrackId}}, {}, {}}}, {}, {});
6662
6663 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
6664 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
6665 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 4);
6666 QCOMPARE(rowsRemovedSpy.count(), 0);
6667 QCOMPARE(rowsMovedSpy.count(), 0);
6668 QCOMPARE(rowsInsertedSpy.count(), 4);
6669 QCOMPARE(persistentStateChangedSpy.count(), 4);
6670 QCOMPARE(dataChangedSpy.count(), 3);
6671 QCOMPARE(newTrackByNameInListSpy.count(), 0);
6672 QCOMPARE(newEntryInListSpy.count(), 4);
6673
6674 QCOMPARE(dataChangedSpy.wait(), true);
6675
6676 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
6677 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
6678 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 4);
6679 QCOMPARE(rowsRemovedSpy.count(), 0);
6680 QCOMPARE(rowsMovedSpy.count(), 0);
6681 QCOMPARE(rowsInsertedSpy.count(), 4);
6682 QCOMPARE(persistentStateChangedSpy.count(), 4);
6683 QCOMPARE(dataChangedSpy.count(), 4);
6684 QCOMPARE(newTrackByNameInListSpy.count(), 0);
6685 QCOMPARE(newEntryInListSpy.count(), 4);
6686
6687 myPlayListProxyModel.moveRow(0, 2);
6688
6689 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
6690 QCOMPARE(rowsAboutToBeMovedSpy.count(), 1);
6691 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 4);
6692 QCOMPARE(rowsRemovedSpy.count(), 0);
6693 QCOMPARE(rowsMovedSpy.count(), 1);
6694 QCOMPARE(rowsInsertedSpy.count(), 4);
6695 QCOMPARE(persistentStateChangedSpy.count(), 5);
6696 QCOMPARE(dataChangedSpy.count(), 4);
6697 QCOMPARE(newTrackByNameInListSpy.count(), 0);
6698 QCOMPARE(newEntryInListSpy.count(), 4);
6699
6700 myPlayListProxyModel.moveRow(2, 0);
6701
6702 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
6703 QCOMPARE(rowsAboutToBeMovedSpy.count(), 2);
6704 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 4);
6705 QCOMPARE(rowsRemovedSpy.count(), 0);
6706 QCOMPARE(rowsMovedSpy.count(), 2);
6707 QCOMPARE(rowsInsertedSpy.count(), 4);
6708 QCOMPARE(persistentStateChangedSpy.count(), 6);
6709 QCOMPARE(dataChangedSpy.count(), 4);
6710 QCOMPARE(newTrackByNameInListSpy.count(), 0);
6711 QCOMPARE(newEntryInListSpy.count(), 4);
6712 }
6713
enqueueFiles()6714 void MediaPlayListProxyModelTest::enqueueFiles()
6715 {
6716 MediaPlayList myPlayList;
6717 QAbstractItemModelTester testModel(&myPlayList);
6718 MediaPlayListProxyModel myPlayListProxyModel;
6719 myPlayListProxyModel.setPlayListModel(&myPlayList);
6720 QAbstractItemModelTester testProxyModel(&myPlayListProxyModel);
6721 DatabaseInterface myDatabaseContent;
6722 TracksListener myListener(&myDatabaseContent);
6723
6724 QSignalSpy rowsAboutToBeMovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsAboutToBeMoved);
6725 QSignalSpy rowsAboutToBeRemovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsAboutToBeRemoved);
6726 QSignalSpy rowsAboutToBeInsertedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsAboutToBeInserted);
6727 QSignalSpy rowsMovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsMoved);
6728 QSignalSpy rowsRemovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsRemoved);
6729 QSignalSpy rowsInsertedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsInserted);
6730 QSignalSpy persistentStateChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::persistentStateChanged);
6731 QSignalSpy dataChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::dataChanged);
6732 QSignalSpy newTrackByNameInListSpy(&myPlayList, &MediaPlayList::newTrackByNameInList);
6733 QSignalSpy newEntryInListSpy(&myPlayList, &MediaPlayList::newEntryInList);
6734 QSignalSpy newUrlInListSpy(&myPlayList, &MediaPlayList::newUrlInList);
6735
6736 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
6737 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
6738 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 0);
6739 QCOMPARE(rowsRemovedSpy.count(), 0);
6740 QCOMPARE(rowsMovedSpy.count(), 0);
6741 QCOMPARE(rowsInsertedSpy.count(), 0);
6742 QCOMPARE(persistentStateChangedSpy.count(), 0);
6743 QCOMPARE(dataChangedSpy.count(), 0);
6744 QCOMPARE(newTrackByNameInListSpy.count(), 0);
6745 QCOMPARE(newEntryInListSpy.count(), 0);
6746 QCOMPARE(newUrlInListSpy.count(), 0);
6747
6748 myDatabaseContent.init(QStringLiteral("testDbDirectContent"));
6749
6750 connect(&myListener, &TracksListener::trackHasChanged,
6751 &myPlayList, &MediaPlayList::trackChanged,
6752 Qt::QueuedConnection);
6753 connect(&myListener, &TracksListener::tracksListAdded,
6754 &myPlayList, &MediaPlayList::tracksListAdded,
6755 Qt::QueuedConnection);
6756 connect(&myPlayList, &MediaPlayList::newTrackByNameInList,
6757 &myListener, &TracksListener::trackByNameInList,
6758 Qt::QueuedConnection);
6759 connect(&myPlayList, &MediaPlayList::newEntryInList,
6760 &myListener, &TracksListener::newEntryInList,
6761 Qt::QueuedConnection);
6762 connect(&myPlayList, &MediaPlayList::newUrlInList,
6763 &myListener, &TracksListener::newUrlInList,
6764 Qt::QueuedConnection);
6765 connect(&myDatabaseContent, &DatabaseInterface::tracksAdded,
6766 &myListener, &TracksListener::tracksAdded);
6767
6768 myDatabaseContent.insertTracksList(mNewTracks, mNewCovers);
6769
6770 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
6771 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
6772 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 0);
6773 QCOMPARE(rowsRemovedSpy.count(), 0);
6774 QCOMPARE(rowsMovedSpy.count(), 0);
6775 QCOMPARE(rowsInsertedSpy.count(), 0);
6776 QCOMPARE(persistentStateChangedSpy.count(), 0);
6777 QCOMPARE(dataChangedSpy.count(), 0);
6778 QCOMPARE(newTrackByNameInListSpy.count(), 0);
6779 QCOMPARE(newEntryInListSpy.count(), 0);
6780 QCOMPARE(newUrlInListSpy.count(), 0);
6781
6782 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track},
6783 {DataTypes::ResourceRole, QUrl::fromLocalFile(QStringLiteral("/$1"))}}, {}, {}},
6784 {{{DataTypes::ElementTypeRole, ElisaUtils::Track},
6785 {DataTypes::ResourceRole, QUrl::fromLocalFile(QStringLiteral("/$2"))}}, {}, {}}}, {}, {});
6786
6787 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
6788 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
6789 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 1);
6790 QCOMPARE(rowsRemovedSpy.count(), 0);
6791 QCOMPARE(rowsMovedSpy.count(), 0);
6792 QCOMPARE(rowsInsertedSpy.count(), 1);
6793 QCOMPARE(persistentStateChangedSpy.count(), 1);
6794 QCOMPARE(dataChangedSpy.count(), 0);
6795 QCOMPARE(newTrackByNameInListSpy.count(), 0);
6796 QCOMPARE(newEntryInListSpy.count(), 0);
6797 QCOMPARE(newUrlInListSpy.count(), 2);
6798
6799 QCOMPARE(myPlayListProxyModel.rowCount(), 2);
6800
6801 QCOMPARE(dataChangedSpy.wait(300), true);
6802
6803 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
6804 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
6805 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 1);
6806 QCOMPARE(rowsRemovedSpy.count(), 0);
6807 QCOMPARE(rowsMovedSpy.count(), 0);
6808 QCOMPARE(rowsInsertedSpy.count(), 1);
6809 QCOMPARE(persistentStateChangedSpy.count(), 1);
6810 QCOMPARE(dataChangedSpy.count(), 2);
6811 QCOMPARE(newTrackByNameInListSpy.count(), 0);
6812 QCOMPARE(newEntryInListSpy.count(), 0);
6813 QCOMPARE(newUrlInListSpy.count(), 2);
6814
6815 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::TitleRole).toString(), QStringLiteral("track1"));
6816 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::AlbumRole).toString(), QStringLiteral("album1"));
6817 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ArtistRole).toString(), QStringLiteral("artist1"));
6818 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::TrackNumberRole).toInt(), 1);
6819 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::DiscNumberRole).toInt(), 1);
6820 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::DurationRole).toTime().msecsSinceStartOfDay(), 1);
6821 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::TitleRole).toString(), QStringLiteral("track2"));
6822 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::AlbumRole).toString(), QStringLiteral("album1"));
6823 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::ArtistRole).toString(), QStringLiteral("artist2"));
6824 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::TrackNumberRole).toInt(), 2);
6825 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::DiscNumberRole).toInt(), 2);
6826 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::DurationRole).toTime().msecsSinceStartOfDay(), 2);
6827 }
6828
enqueueSampleFiles()6829 void MediaPlayListProxyModelTest::enqueueSampleFiles()
6830 {
6831 MediaPlayList myPlayList;
6832 QAbstractItemModelTester testModel(&myPlayList);
6833 MediaPlayListProxyModel myPlayListProxyModel;
6834 myPlayListProxyModel.setPlayListModel(&myPlayList);
6835 QAbstractItemModelTester testProxyModel(&myPlayListProxyModel);
6836 DatabaseInterface myDatabaseContent;
6837 TracksListener myListener(&myDatabaseContent);
6838
6839 QSignalSpy rowsAboutToBeMovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsAboutToBeMoved);
6840 QSignalSpy rowsAboutToBeRemovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsAboutToBeRemoved);
6841 QSignalSpy rowsAboutToBeInsertedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsAboutToBeInserted);
6842 QSignalSpy rowsMovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsMoved);
6843 QSignalSpy rowsRemovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsRemoved);
6844 QSignalSpy rowsInsertedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsInserted);
6845 QSignalSpy persistentStateChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::persistentStateChanged);
6846 QSignalSpy dataChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::dataChanged);
6847 QSignalSpy newTrackByNameInListSpy(&myPlayList, &MediaPlayList::newTrackByNameInList);
6848 QSignalSpy newEntryInListSpy(&myPlayList, &MediaPlayList::newEntryInList);
6849 QSignalSpy newUrlInListSpy(&myPlayList, &MediaPlayList::newUrlInList);
6850
6851 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
6852 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
6853 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 0);
6854 QCOMPARE(rowsRemovedSpy.count(), 0);
6855 QCOMPARE(rowsMovedSpy.count(), 0);
6856 QCOMPARE(rowsInsertedSpy.count(), 0);
6857 QCOMPARE(persistentStateChangedSpy.count(), 0);
6858 QCOMPARE(dataChangedSpy.count(), 0);
6859 QCOMPARE(newTrackByNameInListSpy.count(), 0);
6860 QCOMPARE(newEntryInListSpy.count(), 0);
6861 QCOMPARE(newUrlInListSpy.count(), 0);
6862
6863 myDatabaseContent.init(QStringLiteral("testDbDirectContent"));
6864
6865 connect(&myListener, &TracksListener::trackHasChanged,
6866 &myPlayList, &MediaPlayList::trackChanged,
6867 Qt::QueuedConnection);
6868 connect(&myListener, &TracksListener::tracksListAdded,
6869 &myPlayList, &MediaPlayList::tracksListAdded,
6870 Qt::QueuedConnection);
6871 connect(&myPlayList, &MediaPlayList::newTrackByNameInList,
6872 &myListener, &TracksListener::trackByNameInList,
6873 Qt::QueuedConnection);
6874 connect(&myPlayList, &MediaPlayList::newEntryInList,
6875 &myListener, &TracksListener::newEntryInList,
6876 Qt::QueuedConnection);
6877 connect(&myPlayList, &MediaPlayList::newUrlInList,
6878 &myListener, &TracksListener::newUrlInList,
6879 Qt::QueuedConnection);
6880 connect(&myDatabaseContent, &DatabaseInterface::tracksAdded,
6881 &myListener, &TracksListener::tracksAdded);
6882
6883 myDatabaseContent.insertTracksList(mNewTracks, mNewCovers);
6884
6885 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
6886 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
6887 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 0);
6888 QCOMPARE(rowsRemovedSpy.count(), 0);
6889 QCOMPARE(rowsMovedSpy.count(), 0);
6890 QCOMPARE(rowsInsertedSpy.count(), 0);
6891 QCOMPARE(persistentStateChangedSpy.count(), 0);
6892 QCOMPARE(dataChangedSpy.count(), 0);
6893 QCOMPARE(newTrackByNameInListSpy.count(), 0);
6894 QCOMPARE(newEntryInListSpy.count(), 0);
6895 QCOMPARE(newUrlInListSpy.count(), 0);
6896
6897 myPlayListProxyModel.enqueue({
6898 {{{DataTypes::ElementTypeRole, ElisaUtils::Track},
6899 {DataTypes::ResourceRole, QUrl::fromLocalFile(QStringLiteral(MEDIAPLAYLIST_TESTS_SAMPLE_FILES_PATH) + QStringLiteral("/test.ogg"))}}, {}, {}},
6900 {{{DataTypes::ElementTypeRole, ElisaUtils::Track},
6901 {DataTypes::ResourceRole, QUrl::fromLocalFile(QStringLiteral(MEDIAPLAYLIST_TESTS_SAMPLE_FILES_PATH) + QStringLiteral("/test2.ogg"))}}, {}, {}}},
6902 {}, {});
6903
6904 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
6905 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
6906 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 1);
6907 QCOMPARE(rowsRemovedSpy.count(), 0);
6908 QCOMPARE(rowsMovedSpy.count(), 0);
6909 QCOMPARE(rowsInsertedSpy.count(), 1);
6910 QCOMPARE(persistentStateChangedSpy.count(), 1);
6911 QCOMPARE(dataChangedSpy.count(), 0);
6912 QCOMPARE(newTrackByNameInListSpy.count(), 0);
6913 QCOMPARE(newEntryInListSpy.count(), 0);
6914 QCOMPARE(newUrlInListSpy.count(), 2);
6915
6916 QCOMPARE(myPlayListProxyModel.rowCount(), 2);
6917
6918 while (dataChangedSpy.count() < 2) {
6919 QCOMPARE(dataChangedSpy.wait(), true);
6920 }
6921
6922 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
6923 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
6924 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 1);
6925 QCOMPARE(rowsRemovedSpy.count(), 0);
6926 QCOMPARE(rowsMovedSpy.count(), 0);
6927 QCOMPARE(rowsInsertedSpy.count(), 1);
6928 QCOMPARE(persistentStateChangedSpy.count(), 1);
6929 QCOMPARE(dataChangedSpy.count(), 2);
6930 QCOMPARE(newTrackByNameInListSpy.count(), 0);
6931 QCOMPARE(newEntryInListSpy.count(), 0);
6932 QCOMPARE(newUrlInListSpy.count(), 2);
6933
6934 #if defined KF5FileMetaData_FOUND && KF5FileMetaData_FOUND
6935 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::TitleRole).toString(), QStringLiteral("Title"));
6936 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::AlbumRole).toString(), QStringLiteral("Test"));
6937 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ArtistRole).toString(), QStringLiteral("Artist"));
6938 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::TrackNumberRole).toInt(), 1);
6939 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::DiscNumberRole).toInt(), 1);
6940 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::DurationRole).toTime().msecsSinceStartOfDay(), 1000);
6941 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::TitleRole).toString(), QStringLiteral("Title2"));
6942 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::AlbumRole).toString(), QStringLiteral("Test2"));
6943 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::ArtistRole).toString(), QStringLiteral("Artist2"));
6944 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::TrackNumberRole).toInt(), 1);
6945 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::DiscNumberRole).toInt(), 1);
6946 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::DurationRole).toTime().msecsSinceStartOfDay(), 1000);
6947 #else
6948 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::TitleRole).toString(), QStringLiteral("test.ogg"));
6949 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::AlbumRole).toString(), QStringLiteral(""));
6950 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::ArtistRole).toString(), QStringLiteral(""));
6951 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::TrackNumberRole).toInt(), -1);
6952 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::DiscNumberRole).toInt(), -1);
6953 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(0, 0), MediaPlayList::DurationRole).toTime().msecsSinceStartOfDay(), 0);
6954 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::TitleRole).toString(), QStringLiteral("test2.ogg"));
6955 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::AlbumRole).toString(), QStringLiteral(""));
6956 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::ArtistRole).toString(), QStringLiteral(""));
6957 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::TrackNumberRole).toInt(), -1);
6958 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::DiscNumberRole).toInt(), -1);
6959 QCOMPARE(myPlayListProxyModel.data(myPlayListProxyModel.index(1, 0), MediaPlayList::DurationRole).toTime().msecsSinceStartOfDay(), 0);
6960 #endif
6961 }
6962
enqueueEmpty()6963 void MediaPlayListProxyModelTest::enqueueEmpty()
6964 {
6965 MediaPlayList myPlayList;
6966 QAbstractItemModelTester testModel(&myPlayList);
6967 MediaPlayListProxyModel myPlayListProxyModel;
6968 myPlayListProxyModel.setPlayListModel(&myPlayList);
6969 QAbstractItemModelTester testProxyModel(&myPlayListProxyModel);
6970 DatabaseInterface myDatabaseContent;
6971 TracksListener myListener(&myDatabaseContent);
6972
6973 QSignalSpy rowsAboutToBeMovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsAboutToBeMoved);
6974 QSignalSpy rowsAboutToBeRemovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsAboutToBeRemoved);
6975 QSignalSpy rowsAboutToBeInsertedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsAboutToBeInserted);
6976 QSignalSpy rowsMovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsMoved);
6977 QSignalSpy rowsRemovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsRemoved);
6978 QSignalSpy rowsInsertedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsInserted);
6979 QSignalSpy persistentStateChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::persistentStateChanged);
6980 QSignalSpy dataChangedSpy(&myPlayList, &MediaPlayListProxyModel::dataChanged);
6981 QSignalSpy newTrackByNameInListSpy(&myPlayList, &MediaPlayList::newTrackByNameInList);
6982 QSignalSpy newEntryInListSpy(&myPlayList, &MediaPlayList::newEntryInList);
6983 QSignalSpy newUrlInListSpy(&myPlayList, &MediaPlayList::newUrlInList);
6984
6985 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
6986 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
6987 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 0);
6988 QCOMPARE(rowsRemovedSpy.count(), 0);
6989 QCOMPARE(rowsMovedSpy.count(), 0);
6990 QCOMPARE(rowsInsertedSpy.count(), 0);
6991 QCOMPARE(persistentStateChangedSpy.count(), 0);
6992 QCOMPARE(dataChangedSpy.count(), 0);
6993 QCOMPARE(newTrackByNameInListSpy.count(), 0);
6994 QCOMPARE(newEntryInListSpy.count(), 0);
6995
6996 myDatabaseContent.init(QStringLiteral("testDbDirectContent"));
6997
6998 connect(&myListener, &TracksListener::trackHasChanged,
6999 &myPlayList, &MediaPlayList::trackChanged,
7000 Qt::QueuedConnection);
7001 connect(&myListener, &TracksListener::tracksListAdded,
7002 &myPlayList, &MediaPlayList::tracksListAdded,
7003 Qt::QueuedConnection);
7004 connect(&myPlayList, &MediaPlayList::newTrackByNameInList,
7005 &myListener, &TracksListener::trackByNameInList,
7006 Qt::QueuedConnection);
7007 connect(&myPlayList, &MediaPlayList::newEntryInList,
7008 &myListener, &TracksListener::newEntryInList,
7009 Qt::QueuedConnection);
7010 connect(&myPlayList, &MediaPlayList::newUrlInList,
7011 &myListener, &TracksListener::newUrlInList,
7012 Qt::QueuedConnection);
7013 connect(&myDatabaseContent, &DatabaseInterface::tracksAdded,
7014 &myListener, &TracksListener::tracksAdded);
7015
7016 myDatabaseContent.insertTracksList(mNewTracks, mNewCovers);
7017
7018 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
7019 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
7020 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 0);
7021 QCOMPARE(rowsRemovedSpy.count(), 0);
7022 QCOMPARE(rowsMovedSpy.count(), 0);
7023 QCOMPARE(rowsInsertedSpy.count(), 0);
7024 QCOMPARE(persistentStateChangedSpy.count(), 0);
7025 QCOMPARE(dataChangedSpy.count(), 0);
7026 QCOMPARE(newTrackByNameInListSpy.count(), 0);
7027 QCOMPARE(newEntryInListSpy.count(), 0);
7028
7029 myPlayListProxyModel.enqueue(DataTypes::EntryDataList{}, {}, {});
7030
7031 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
7032 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
7033 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 0);
7034 QCOMPARE(rowsRemovedSpy.count(), 0);
7035 QCOMPARE(rowsMovedSpy.count(), 0);
7036 QCOMPARE(rowsInsertedSpy.count(), 0);
7037 QCOMPARE(persistentStateChangedSpy.count(), 0);
7038 QCOMPARE(dataChangedSpy.count(), 0);
7039 QCOMPARE(newTrackByNameInListSpy.count(), 0);
7040 QCOMPARE(newEntryInListSpy.count(), 0);
7041
7042 myPlayListProxyModel.enqueue(DataTypes::EntryDataList{}, {}, {});
7043
7044 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
7045 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
7046 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 0);
7047 QCOMPARE(rowsRemovedSpy.count(), 0);
7048 QCOMPARE(rowsMovedSpy.count(), 0);
7049 QCOMPARE(rowsInsertedSpy.count(), 0);
7050 QCOMPARE(persistentStateChangedSpy.count(), 0);
7051 QCOMPARE(dataChangedSpy.count(), 0);
7052 QCOMPARE(newTrackByNameInListSpy.count(), 0);
7053 QCOMPARE(newEntryInListSpy.count(), 0);
7054
7055 myPlayListProxyModel.enqueue(DataTypes::EntryDataList{}, ElisaUtils::AppendPlayList, ElisaUtils::DoNotTriggerPlay);
7056
7057 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
7058 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
7059 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 0);
7060 QCOMPARE(rowsRemovedSpy.count(), 0);
7061 QCOMPARE(rowsMovedSpy.count(), 0);
7062 QCOMPARE(rowsInsertedSpy.count(), 0);
7063 QCOMPARE(persistentStateChangedSpy.count(), 0);
7064 QCOMPARE(dataChangedSpy.count(), 0);
7065 QCOMPARE(newTrackByNameInListSpy.count(), 0);
7066 QCOMPARE(newEntryInListSpy.count(), 0);
7067
7068 myPlayListProxyModel.enqueue(DataTypes::EntryDataList{}, ElisaUtils::AppendPlayList, ElisaUtils::DoNotTriggerPlay);
7069
7070 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
7071 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
7072 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 0);
7073 QCOMPARE(rowsRemovedSpy.count(), 0);
7074 QCOMPARE(rowsMovedSpy.count(), 0);
7075 QCOMPARE(rowsInsertedSpy.count(), 0);
7076 QCOMPARE(persistentStateChangedSpy.count(), 0);
7077 QCOMPARE(dataChangedSpy.count(), 0);
7078 QCOMPARE(newTrackByNameInListSpy.count(), 0);
7079 QCOMPARE(newEntryInListSpy.count(), 0);
7080
7081 myPlayListProxyModel.enqueue(DataTypes::EntryDataList{},
7082 ElisaUtils::AppendPlayList,
7083 ElisaUtils::DoNotTriggerPlay);
7084
7085 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
7086 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
7087 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 0);
7088 QCOMPARE(rowsRemovedSpy.count(), 0);
7089 QCOMPARE(rowsMovedSpy.count(), 0);
7090 QCOMPARE(rowsInsertedSpy.count(), 0);
7091 QCOMPARE(persistentStateChangedSpy.count(), 0);
7092 QCOMPARE(dataChangedSpy.count(), 0);
7093 QCOMPARE(newTrackByNameInListSpy.count(), 0);
7094 QCOMPARE(newEntryInListSpy.count(), 0);
7095 }
7096
testMoveAndShuffle()7097 void MediaPlayListProxyModelTest::testMoveAndShuffle()
7098 {
7099 MediaPlayList myPlayList;
7100 QAbstractItemModelTester testModel(&myPlayList);
7101 MediaPlayListProxyModel myPlayListProxyModel;
7102 myPlayListProxyModel.setPlayListModel(&myPlayList);
7103 QAbstractItemModelTester testProxyModel(&myPlayListProxyModel);
7104 DatabaseInterface myDatabaseContent;
7105 TracksListener myListener(&myDatabaseContent);
7106
7107 QSignalSpy rowsAboutToBeMovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsAboutToBeMoved);
7108 QSignalSpy rowsAboutToBeRemovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsAboutToBeRemoved);
7109 QSignalSpy rowsAboutToBeInsertedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsAboutToBeInserted);
7110 QSignalSpy rowsMovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsMoved);
7111 QSignalSpy rowsRemovedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsRemoved);
7112 QSignalSpy rowsInsertedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::rowsInserted);
7113 QSignalSpy persistentStateChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::persistentStateChanged);
7114 QSignalSpy dataChangedSpy(&myPlayListProxyModel, &MediaPlayListProxyModel::dataChanged);
7115 QSignalSpy newTrackByNameInListSpy(&myPlayList, &MediaPlayList::newTrackByNameInList);
7116 QSignalSpy newEntryInListSpy(&myPlayList, &MediaPlayList::newEntryInList);
7117 QSignalSpy newUrlInListSpy(&myPlayList, &MediaPlayList::newUrlInList);
7118
7119 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
7120 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
7121 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 0);
7122 QCOMPARE(rowsRemovedSpy.count(), 0);
7123 QCOMPARE(rowsMovedSpy.count(), 0);
7124 QCOMPARE(rowsInsertedSpy.count(), 0);
7125 QCOMPARE(persistentStateChangedSpy.count(), 0);
7126 QCOMPARE(dataChangedSpy.count(), 0);
7127 QCOMPARE(newTrackByNameInListSpy.count(), 0);
7128 QCOMPARE(newEntryInListSpy.count(), 0);
7129
7130 myDatabaseContent.init(QStringLiteral("testDbDirectContent"));
7131
7132 connect(&myListener, &TracksListener::trackHasChanged,
7133 &myPlayList, &MediaPlayList::trackChanged,
7134 Qt::QueuedConnection);
7135 connect(&myListener, &TracksListener::tracksListAdded,
7136 &myPlayList, &MediaPlayList::tracksListAdded,
7137 Qt::QueuedConnection);
7138 connect(&myPlayList, &MediaPlayList::newTrackByNameInList,
7139 &myListener, &TracksListener::trackByNameInList,
7140 Qt::QueuedConnection);
7141 connect(&myPlayList, &MediaPlayList::newEntryInList,
7142 &myListener, &TracksListener::newEntryInList,
7143 Qt::QueuedConnection);
7144 connect(&myPlayList, &MediaPlayList::newUrlInList,
7145 &myListener, &TracksListener::newUrlInList,
7146 Qt::QueuedConnection);
7147 connect(&myDatabaseContent, &DatabaseInterface::tracksAdded,
7148 &myListener, &TracksListener::tracksAdded);
7149
7150 myDatabaseContent.insertTracksList(mNewTracks, mNewCovers);
7151
7152 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
7153 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
7154 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 0);
7155 QCOMPARE(rowsRemovedSpy.count(), 0);
7156 QCOMPARE(rowsMovedSpy.count(), 0);
7157 QCOMPARE(rowsInsertedSpy.count(), 0);
7158 QCOMPARE(persistentStateChangedSpy.count(), 0);
7159 QCOMPARE(dataChangedSpy.count(), 0);
7160 QCOMPARE(newTrackByNameInListSpy.count(), 0);
7161 QCOMPARE(newEntryInListSpy.count(), 0);
7162
7163 auto firstTrackId = myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track1"), QStringLiteral("artist1"), QStringLiteral("album2"), 1, 1);
7164 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track},
7165 {DataTypes::DatabaseIdRole, firstTrackId}}, {}, {}}}, {}, {});
7166
7167 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
7168 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
7169 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 1);
7170 QCOMPARE(rowsRemovedSpy.count(), 0);
7171 QCOMPARE(rowsMovedSpy.count(), 0);
7172 QCOMPARE(rowsInsertedSpy.count(), 1);
7173 QCOMPARE(persistentStateChangedSpy.count(), 1);
7174 QCOMPARE(dataChangedSpy.count(), 0);
7175 QCOMPARE(newTrackByNameInListSpy.count(), 0);
7176 QCOMPARE(newEntryInListSpy.count(), 1);
7177
7178 QCOMPARE(dataChangedSpy.wait(), true);
7179
7180 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
7181 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
7182 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 1);
7183 QCOMPARE(rowsRemovedSpy.count(), 0);
7184 QCOMPARE(rowsMovedSpy.count(), 0);
7185 QCOMPARE(rowsInsertedSpy.count(), 1);
7186 QCOMPARE(persistentStateChangedSpy.count(), 1);
7187 QCOMPARE(dataChangedSpy.count(), 1);
7188 QCOMPARE(newTrackByNameInListSpy.count(), 0);
7189 QCOMPARE(newEntryInListSpy.count(), 1);
7190
7191 auto secondTrackId = myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track2"), QStringLiteral("artist1"), QStringLiteral("album2"), 2, 1);
7192 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track},
7193 {DataTypes::DatabaseIdRole, secondTrackId}}, {}, {}}}, {}, {});
7194
7195 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
7196 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
7197 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 2);
7198 QCOMPARE(rowsRemovedSpy.count(), 0);
7199 QCOMPARE(rowsMovedSpy.count(), 0);
7200 QCOMPARE(rowsInsertedSpy.count(), 2);
7201 QCOMPARE(persistentStateChangedSpy.count(), 2);
7202 QCOMPARE(dataChangedSpy.count(), 1);
7203 QCOMPARE(newTrackByNameInListSpy.count(), 0);
7204 QCOMPARE(newEntryInListSpy.count(), 2);
7205
7206 QCOMPARE(dataChangedSpy.wait(), true);
7207
7208 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
7209 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
7210 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 2);
7211 QCOMPARE(rowsRemovedSpy.count(), 0);
7212 QCOMPARE(rowsMovedSpy.count(), 0);
7213 QCOMPARE(rowsInsertedSpy.count(), 2);
7214 QCOMPARE(persistentStateChangedSpy.count(), 2);
7215 QCOMPARE(dataChangedSpy.count(), 2);
7216 QCOMPARE(newTrackByNameInListSpy.count(), 0);
7217 QCOMPARE(newEntryInListSpy.count(), 2);
7218
7219 auto thirdTrackId = myDatabaseContent.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track3"), QStringLiteral("artist1"), QStringLiteral("album2"), 3, 1);
7220 myPlayListProxyModel.enqueue({{{{DataTypes::ElementTypeRole, ElisaUtils::Track},
7221 {DataTypes::DatabaseIdRole, thirdTrackId}}, {}, {}}}, {}, {});
7222
7223 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
7224 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
7225 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 3);
7226 QCOMPARE(rowsRemovedSpy.count(), 0);
7227 QCOMPARE(rowsMovedSpy.count(), 0);
7228 QCOMPARE(rowsInsertedSpy.count(), 3);
7229 QCOMPARE(persistentStateChangedSpy.count(), 3);
7230 QCOMPARE(dataChangedSpy.count(), 2);
7231 QCOMPARE(newTrackByNameInListSpy.count(), 0);
7232 QCOMPARE(newEntryInListSpy.count(), 3);
7233
7234 QCOMPARE(dataChangedSpy.wait(), true);
7235
7236 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
7237 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
7238 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 3);
7239 QCOMPARE(rowsRemovedSpy.count(), 0);
7240 QCOMPARE(rowsMovedSpy.count(), 0);
7241 QCOMPARE(rowsInsertedSpy.count(), 3);
7242 QCOMPARE(persistentStateChangedSpy.count(), 3);
7243 QCOMPARE(dataChangedSpy.count(), 3);
7244 QCOMPARE(newTrackByNameInListSpy.count(), 0);
7245 QCOMPARE(newEntryInListSpy.count(), 3);
7246
7247 myPlayListProxyModel.setShufflePlayList(true);
7248
7249 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
7250 QCOMPARE(rowsAboutToBeMovedSpy.count(), 0);
7251 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 3);
7252 QCOMPARE(rowsRemovedSpy.count(), 0);
7253 QCOMPARE(rowsMovedSpy.count(), 0);
7254 QCOMPARE(rowsInsertedSpy.count(), 3);
7255 QCOMPARE(persistentStateChangedSpy.count(), 4);
7256 QCOMPARE(dataChangedSpy.count(), 3);
7257 QCOMPARE(newTrackByNameInListSpy.count(), 0);
7258 QCOMPARE(newEntryInListSpy.count(), 3);
7259
7260 myPlayListProxyModel.moveRow(2, 0);
7261
7262 QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
7263 QCOMPARE(rowsAboutToBeMovedSpy.count(), 1);
7264 QCOMPARE(rowsAboutToBeInsertedSpy.count(), 3);
7265 QCOMPARE(rowsRemovedSpy.count(), 0);
7266 QCOMPARE(rowsMovedSpy.count(), 1);
7267 QCOMPARE(rowsInsertedSpy.count(), 3);
7268 QCOMPARE(persistentStateChangedSpy.count(), 4);
7269 QCOMPARE(dataChangedSpy.count(), 3);
7270 QCOMPARE(newTrackByNameInListSpy.count(), 0);
7271 QCOMPARE(newEntryInListSpy.count(), 3);
7272 }
7273
7274 QTEST_GUILESS_MAIN(MediaPlayListProxyModelTest)
7275
7276
7277 #include "moc_mediaplaylistproxymodeltest.cpp"
7278