diff --git a/autotests/albummodeltest.cpp b/autotests/albummodeltest.cpp --- a/autotests/albummodeltest.cpp +++ b/autotests/albummodeltest.cpp @@ -216,7 +216,7 @@ QTime::fromMSecsSinceStartOfDay(23), {QUrl::fromLocalFile(QStringLiteral("/$23"))}, QDateTime::fromMSecsSinceEpoch(23), QUrl::fromLocalFile(QStringLiteral("album1")), 5, true, - {}, QStringLiteral("composer1"), QStringLiteral("lyricist1")}; + {}, QStringLiteral("composer1"), QStringLiteral("lyricist1"), false}; auto newTracks = QList(); newTracks.push_back(newTrack); @@ -243,7 +243,7 @@ QTime::fromMSecsSinceStartOfDay(24), {QUrl::fromLocalFile(QStringLiteral("/$24"))}, QDateTime::fromMSecsSinceEpoch(24), QUrl::fromLocalFile(QStringLiteral("album1")), 5, true, - {}, QStringLiteral("composer1"), QStringLiteral("lyricist1")}; + {}, QStringLiteral("composer1"), QStringLiteral("lyricist1"), false}; auto secondNewTracks = QList(); secondNewTracks.push_back(secondNewTrack); @@ -317,7 +317,7 @@ QTime::fromMSecsSinceStartOfDay(3), {QUrl::fromLocalFile(QStringLiteral("/$3"))}, QDateTime::fromMSecsSinceEpoch(23), QUrl::fromLocalFile(QStringLiteral("album1")), 5, true, - {}, QStringLiteral("composer1"), QStringLiteral("lyricist1")}; + {}, QStringLiteral("composer1"), QStringLiteral("lyricist1"), false}; musicDb.modifyTracksList({modifiedTrack}, mNewCovers, QStringLiteral("autoTest")); diff --git a/autotests/allalbumsmodeltest.cpp b/autotests/allalbumsmodeltest.cpp --- a/autotests/allalbumsmodeltest.cpp +++ b/autotests/allalbumsmodeltest.cpp @@ -203,7 +203,7 @@ {QUrl::fromLocalFile(QStringLiteral("/$23"))}, QDateTime::fromMSecsSinceEpoch(23), {QUrl::fromLocalFile(QStringLiteral("file://image$23"))}, 5, true, - {}, QStringLiteral("composer1"), QStringLiteral("lyricist1")}; + {}, QStringLiteral("composer1"), QStringLiteral("lyricist1"), false}; auto newTracks = QList(); newTracks.push_back(newTrack); @@ -262,7 +262,7 @@ QTime::fromMSecsSinceStartOfDay(23), {QUrl::fromLocalFile(QStringLiteral("/$23"))}, QDateTime::fromMSecsSinceEpoch(23), {QUrl::fromLocalFile(QStringLiteral("file://image$23"))}, 5, true, - {}, QStringLiteral("composer1"), QStringLiteral("lyricist1")}; + {}, QStringLiteral("composer1"), QStringLiteral("lyricist1"), false}; auto newTracks = QList(); newTracks.push_back(newTrack); diff --git a/autotests/allartistsmodeltest.cpp b/autotests/allartistsmodeltest.cpp --- a/autotests/allartistsmodeltest.cpp +++ b/autotests/allartistsmodeltest.cpp @@ -159,7 +159,7 @@ {QUrl::fromLocalFile(QStringLiteral("/$23"))}, QDateTime::fromMSecsSinceEpoch(23), {QUrl::fromLocalFile(QStringLiteral("file://image$23"))}, 5, true, - {}, QStringLiteral("composer1"), QStringLiteral("lyricist1")}; + {}, QStringLiteral("composer1"), QStringLiteral("lyricist1"), false}; auto newTracks = QList(); newTracks.push_back(newTrack); diff --git a/autotests/alltracksmodeltest.cpp b/autotests/alltracksmodeltest.cpp --- a/autotests/alltracksmodeltest.cpp +++ b/autotests/alltracksmodeltest.cpp @@ -207,7 +207,7 @@ {QUrl::fromLocalFile(QStringLiteral("/$23"))}, QDateTime::fromMSecsSinceEpoch(23), {QUrl::fromLocalFile(QStringLiteral("file://image$23"))}, 5, true, - {}, QStringLiteral("composer1"), QStringLiteral("lyricist1")}; + {}, QStringLiteral("composer1"), QStringLiteral("lyricist1"), false}; auto newTracks = QList(); newTracks.push_back(newTrack); @@ -270,7 +270,7 @@ {QUrl::fromLocalFile(QStringLiteral("/$23"))}, QDateTime::fromMSecsSinceEpoch(23), {QUrl::fromLocalFile(QStringLiteral("file://image$23"))}, 5, true, - {}, QStringLiteral("composer1"), QStringLiteral("lyricist1")}; + {}, QStringLiteral("composer1"), QStringLiteral("lyricist1"), false}; auto newTracks = QList(); newTracks.push_back(newTrack); @@ -336,7 +336,7 @@ 1, 1, QTime::fromMSecsSinceStartOfDay(1), {QUrl::fromLocalFile(QStringLiteral("/$1"))}, QDateTime::fromMSecsSinceEpoch(1), {QUrl::fromLocalFile(QStringLiteral("file://image$1"))}, 5, true, - {}, QStringLiteral("composer1"), QStringLiteral("lyricist1")}; + {}, QStringLiteral("composer1"), QStringLiteral("lyricist1"), false}; auto newTracks = QList(); newTracks.push_back(newTrack); @@ -432,7 +432,7 @@ {QUrl::fromLocalFile(QStringLiteral("/$23"))}, QDateTime::fromMSecsSinceEpoch(23), {QUrl::fromLocalFile(QStringLiteral("file://image$23"))}, 5, true, - {}, QStringLiteral("composer1"), QStringLiteral("lyricist1")}; + {}, QStringLiteral("composer1"), QStringLiteral("lyricist1"), false}; auto newTracks = QList(); newTracks.push_back(newTrack); diff --git a/autotests/alltracksproxymodeltest.cpp b/autotests/alltracksproxymodeltest.cpp --- a/autotests/alltracksproxymodeltest.cpp +++ b/autotests/alltracksproxymodeltest.cpp @@ -217,7 +217,7 @@ {QUrl::fromLocalFile(QStringLiteral("/$23"))}, QDateTime::fromMSecsSinceEpoch(23), {QUrl::fromLocalFile(QStringLiteral("file://image$23"))}, 5, true, - {}, QStringLiteral("composer1"), QStringLiteral("lyricist1")}; + {}, QStringLiteral("composer1"), QStringLiteral("lyricist1"), false}; auto newTracks = QList(); newTracks.push_back(newTrack); @@ -283,7 +283,7 @@ {QUrl::fromLocalFile(QStringLiteral("/$23"))}, QDateTime::fromMSecsSinceEpoch(23), {QUrl::fromLocalFile(QStringLiteral("file://image$23"))}, 5, true, - {}, QStringLiteral("composer1"), QStringLiteral("lyricist1")}; + {}, QStringLiteral("composer1"), QStringLiteral("lyricist1"), false}; auto newTracks = QList(); newTracks.push_back(newTrack); @@ -351,7 +351,7 @@ QStringLiteral("artist1"), QStringLiteral("album1"), QStringLiteral("Various Artists"), 1, 1, QTime::fromMSecsSinceStartOfDay(1), {QUrl::fromLocalFile(QStringLiteral("/$1"))}, QDateTime::fromMSecsSinceEpoch(1), - {QUrl::fromLocalFile(QStringLiteral("file://image$1"))}, 5, true, {}, QStringLiteral("composer1"), QStringLiteral("lyricist1")}; + {QUrl::fromLocalFile(QStringLiteral("file://image$1"))}, 5, true, {}, QStringLiteral("composer1"), QStringLiteral("lyricist1"), false}; auto newTracks = QList(); newTracks.push_back(newTrack); @@ -452,7 +452,7 @@ QStringLiteral("artist2"), QStringLiteral("album4"), QStringLiteral("artist2"), 23, 1, QTime::fromMSecsSinceStartOfDay(23), {QUrl::fromLocalFile(QStringLiteral("/$23"))}, QDateTime::fromMSecsSinceEpoch(23), - {QUrl::fromLocalFile(QStringLiteral("file://image$23"))}, 5, true, {}, QStringLiteral("composer1"), QStringLiteral("lyricist1")}; + {QUrl::fromLocalFile(QStringLiteral("file://image$23"))}, 5, true, {}, QStringLiteral("composer1"), QStringLiteral("lyricist1"), false}; auto newTracks = QList(); newTracks.push_back(newTrack); diff --git a/autotests/databaseinterfacetest.cpp b/autotests/databaseinterfacetest.cpp --- a/autotests/databaseinterfacetest.cpp +++ b/autotests/databaseinterfacetest.cpp @@ -117,7 +117,7 @@ 6, 1, QTime::fromMSecsSinceStartOfDay(23), {QUrl::fromLocalFile(QStringLiteral("/$23"))}, QDateTime::fromMSecsSinceEpoch(23), {QUrl::fromLocalFile(QStringLiteral("album3"))}, 5, true, - QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1")}; + QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1"), false}; auto newTracks = QList(); newTracks.push_back(newTrack); @@ -207,7 +207,7 @@ auto newTrack = MusicAudioTrack {true, QStringLiteral("$24"), QStringLiteral("0"), QStringLiteral("track10"), QStringLiteral("artist8"), {}, QStringLiteral("artist8"), 9, 1, QTime::fromMSecsSinceStartOfDay(24), {QUrl::fromLocalFile(QStringLiteral("/$24"))}, QDateTime::fromMSecsSinceEpoch(24), - {}, 9, true, QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1")}; + {}, 9, true, QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1"), false}; auto newTracks = QList(); newTracks.push_back(newTrack); @@ -303,7 +303,7 @@ QStringLiteral("artist8"), QStringLiteral("album4"), QStringLiteral("artist8"), -1, 1, QTime::fromMSecsSinceStartOfDay(26), {QUrl::fromLocalFile(QStringLiteral("/$26"))}, QDateTime::fromMSecsSinceEpoch(26), QUrl::fromLocalFile(QStringLiteral("file://image$26")), 9, true, - QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1")}; + QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1"), false}; auto newTracks = QList(); newTracks.push_back(newTrack); @@ -398,7 +398,7 @@ {}, QStringLiteral("album4"), {}, 9, 1, QTime::fromMSecsSinceStartOfDay(26), {QUrl::fromLocalFile(QStringLiteral("/$26"))}, QDateTime::fromMSecsSinceEpoch(26), QUrl::fromLocalFile(QStringLiteral("file://image$26")), 9, true, - QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1")}; + QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1"), false}; auto newTracks = QList(); newTracks.push_back(newTrack); @@ -493,7 +493,7 @@ {}, QStringLiteral("album4"), {}, 9, 1, QTime::fromMSecsSinceStartOfDay(26), {QUrl::fromLocalFile(QStringLiteral("/$26"))}, QDateTime::fromMSecsSinceEpoch(26), QUrl::fromLocalFile(QStringLiteral("file://image$26")), 9, true, - QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1")}; + QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1"), false}; auto newTracks = QList(); newTracks.push_back(newTrack); @@ -540,7 +540,7 @@ QStringLiteral("artist1"), QStringLiteral("album4"), QStringLiteral("artist2"), 10, 1, QTime::fromMSecsSinceStartOfDay(27), {QUrl::fromLocalFile(QStringLiteral("/autre/$27"))}, QDateTime::fromMSecsSinceEpoch(27), QUrl::fromLocalFile(QStringLiteral("file://image$27")), 10, true, - QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1")}; + QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1"), false}; newTracks = QList(); newTracks.push_back(newTrack); @@ -609,13 +609,13 @@ {QUrl::fromLocalFile(QStringLiteral("/$19"))}, QDateTime::fromMSecsSinceEpoch(23), {QUrl::fromLocalFile(QStringLiteral("album3"))}, 5, true, - QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1")}, + QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1"), true}, {true, QStringLiteral("$20"), QStringLiteral("0"), QStringLiteral("track7"), QStringLiteral("artist3"), QStringLiteral("album3"), {}, 7, 1, QTime::fromMSecsSinceStartOfDay(20), {QUrl::fromLocalFile(QStringLiteral("/$20"))}, QDateTime::fromMSecsSinceEpoch(23), {QUrl::fromLocalFile(QStringLiteral("album3"))}, 5, true, - QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1")}}; + QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1"), false}}; auto newCovers = mNewCovers; newCovers[QStringLiteral("file:///$23")] = QUrl::fromLocalFile(QStringLiteral("album3")); @@ -658,6 +658,7 @@ QCOMPARE(firstTrack.composer(), QStringLiteral("composer1")); QCOMPARE(firstTrack.lyricist(), QStringLiteral("lyricist1")); QCOMPARE(firstTrack.albumId(), qulonglong(1)); + QCOMPARE(firstTrack.hasEmbeddedCover(), true); auto secondTrack = musicDb.trackFromDatabaseId(musicDb.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track7"), QStringLiteral("artist3"), QStringLiteral("album3"), 7, 1)); @@ -678,6 +679,7 @@ QCOMPARE(secondTrack.composer(), QStringLiteral("composer1")); QCOMPARE(secondTrack.lyricist(), QStringLiteral("lyricist1")); QCOMPARE(secondTrack.albumId(), qulonglong(1)); + QCOMPARE(secondTrack.hasEmbeddedCover(), false); auto album = musicDb.albumFromTitleAndArtist(QStringLiteral("album3"), QStringLiteral("artist2")); @@ -728,19 +730,19 @@ QTime::fromMSecsSinceStartOfDay(19), {QUrl::fromLocalFile(QStringLiteral("/$19"))}, QDateTime::fromMSecsSinceEpoch(19), {QUrl::fromLocalFile(QStringLiteral("album3"))}, 5, true, - QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1")}, + QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1"), false}, {true, QStringLiteral("$20"), QStringLiteral("0"), QStringLiteral("track7"), QStringLiteral("artist2"), QStringLiteral("album3"), {}, 7, 1, QTime::fromMSecsSinceStartOfDay(20), {QUrl::fromLocalFile(QStringLiteral("/$20"))}, QDateTime::fromMSecsSinceEpoch(20), {QUrl::fromLocalFile(QStringLiteral("album3"))}, 4, true, - QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1")}, + QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1"), false}, {true, QStringLiteral("$21"), QStringLiteral("0"), QStringLiteral("track8"), QStringLiteral("artist2"), QStringLiteral("album3"), {}, 8, 1, QTime::fromMSecsSinceStartOfDay(21), {QUrl::fromLocalFile(QStringLiteral("/$21"))}, QDateTime::fromMSecsSinceEpoch(21), {QUrl::fromLocalFile(QStringLiteral("album3"))}, 3, true, - QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1")}}; + QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1"), false}}; auto newCovers = mNewCovers; newCovers[QStringLiteral("file:///$19")] = QUrl::fromLocalFile(QStringLiteral("album3")); @@ -806,6 +808,7 @@ QCOMPARE(secondTrack.lyricist(), QStringLiteral("lyricist1")); QCOMPARE(secondTrack.isSingleDiscAlbum(), true); QCOMPARE(secondTrack.albumId(), qulonglong(1)); + QCOMPARE(secondTrack.hasEmbeddedCover(), false); auto thirdTrack = musicDb.trackFromDatabaseId(musicDb.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track8"), QStringLiteral("artist2"), QStringLiteral("album3"), 8, 1)); @@ -882,13 +885,13 @@ QTime::fromMSecsSinceStartOfDay(19), {QUrl::fromLocalFile(QStringLiteral("/$19"))}, QDateTime::fromMSecsSinceEpoch(19), {QUrl::fromLocalFile(QStringLiteral("album3"))}, 5, true, - QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1")}, + QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1"), true}, {true, QStringLiteral("$20"), QStringLiteral("0"), QStringLiteral("track7"), QStringLiteral("artist3"), QStringLiteral("album3"), {QStringLiteral("artist4")}, 7, 1, QTime::fromMSecsSinceStartOfDay(20), {QUrl::fromLocalFile(QStringLiteral("/$20"))}, QDateTime::fromMSecsSinceEpoch(20), {QUrl::fromLocalFile(QStringLiteral("album3"))}, 5, true, - QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1")}}; + QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1"), false}}; auto newCovers = mNewCovers; newCovers[QStringLiteral("file:///$19")] = QUrl::fromLocalFile(QStringLiteral("album3")); @@ -932,6 +935,7 @@ QCOMPARE(firstTrack.lyricist(), QStringLiteral("lyricist1")); QCOMPARE(firstTrack.isSingleDiscAlbum(), true); QCOMPARE(firstTrack.albumId(), qulonglong(1)); + QCOMPARE(firstTrack.hasEmbeddedCover(), true); auto secondTrack = musicDb.trackFromDatabaseId(musicDb.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track7"), QStringLiteral("artist3"), QStringLiteral("album3"), 7, 1)); @@ -953,6 +957,7 @@ QCOMPARE(secondTrack.lyricist(), QStringLiteral("lyricist1")); QCOMPARE(secondTrack.isSingleDiscAlbum(), true); QCOMPARE(secondTrack.albumId(), qulonglong(1)); + QCOMPARE(secondTrack.hasEmbeddedCover(), false); auto album = musicDb.albumFromTitleAndArtist(QStringLiteral("album3"), QStringLiteral("artist4")); @@ -1088,7 +1093,7 @@ 6, 1, QTime::fromMSecsSinceStartOfDay(23), {QUrl::fromLocalFile(QStringLiteral("/$23"))}, QDateTime::fromMSecsSinceEpoch(23), {QUrl::fromLocalFile(QStringLiteral("album3"))}, 5, true, - QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1")}); + QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1"), false}); musicDb.init(QStringLiteral("testDb1"), myTempDatabase.fileName()); @@ -1185,7 +1190,7 @@ 6, 1, QTime::fromMSecsSinceStartOfDay(23), {QUrl::fromLocalFile(QStringLiteral("/$23"))}, QDateTime::fromMSecsSinceEpoch(23), {QUrl::fromLocalFile(QStringLiteral("album3"))}, 3, true, - QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1")}); + QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1"), false}); musicDb.init(QStringLiteral("testDb2"), myTempDatabase.fileName()); @@ -1548,7 +1553,7 @@ 6, 1, QTime::fromMSecsSinceStartOfDay(23), {QUrl::fromLocalFile(QStringLiteral("/$23"))}, QDateTime::fromMSecsSinceEpoch(23), {QUrl::fromLocalFile(QStringLiteral("album3"))}, 5, true, - QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1")}; + QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1"), false}; auto newTracks = QList(); newTracks.push_back(newTrack); @@ -1978,7 +1983,7 @@ 6, 1, QTime::fromMSecsSinceStartOfDay(23), {QUrl::fromLocalFile(QStringLiteral("/$23"))}, QDateTime::fromMSecsSinceEpoch(23), {QUrl::fromLocalFile(QStringLiteral("album3"))}, 5, true, - QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1")}; + QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1"), false}; auto newTracks = QList(); newTracks.push_back(newTrack); @@ -2559,7 +2564,7 @@ 6, 1, QTime::fromMSecsSinceStartOfDay(23), {QUrl::fromLocalFile(QStringLiteral("/$23"))}, QDateTime::fromMSecsSinceEpoch(23), QUrl::fromLocalFile(QStringLiteral("album3")), 5, true, - QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1")}; + QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1"), false}; auto newTracks = QList(); newTracks.push_back(newTrack); @@ -2626,7 +2631,7 @@ 6, 1, QTime::fromMSecsSinceStartOfDay(23), {QUrl::fromLocalFile(QStringLiteral("/$23"))}, QDateTime::fromMSecsSinceEpoch(23), {QUrl::fromLocalFile(QStringLiteral("album3"))}, 5, true, - QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1")}; + QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1"), false}; auto newTracks = QList(); newTracks.push_back(newTrack); @@ -2704,7 +2709,7 @@ QTime::fromMSecsSinceStartOfDay(23), {QUrl::fromLocalFile(QStringLiteral("/$23"))}, QDateTime::fromMSecsSinceEpoch(23), QUrl::fromLocalFile(QStringLiteral("album3")), 5, true, - QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1")}; + QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1"), false}; auto newTracks2 = QList(); newTracks2.push_back(newTrack2); @@ -2819,7 +2824,7 @@ 6, 1, QTime::fromMSecsSinceStartOfDay(23), {QUrl::fromLocalFile(QStringLiteral("/$23"))}, QDateTime::fromMSecsSinceEpoch(23), {QUrl::fromLocalFile(QStringLiteral("album3"))}, 5, true, - QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1")}; + QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1"), false}; auto newTracks = QList(); newTracks.push_back(newTrack); @@ -2899,7 +2904,7 @@ QTime::fromMSecsSinceStartOfDay(23), {QUrl::fromLocalFile(QStringLiteral("/$23"))}, QDateTime::fromMSecsSinceEpoch(23), QUrl::fromLocalFile(QStringLiteral("album3")), 5, true, - QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1")}; + QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1"), false}; auto newTracks2 = QList(); newTracks2.push_back(newTrack2); @@ -3032,7 +3037,7 @@ 6, 1, QTime::fromMSecsSinceStartOfDay(23), {QUrl::fromLocalFile(QStringLiteral("/$23"))}, QDateTime::fromMSecsSinceEpoch(23), {QUrl::fromLocalFile(QStringLiteral("album3"))}, 5, true, - QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1")}; + QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1"), false}; auto newTracks = QList(); newTracks.push_back(newTrack); @@ -3112,7 +3117,7 @@ {QUrl::fromLocalFile(QStringLiteral("/$20"))}, QDateTime::fromMSecsSinceEpoch(20), {QUrl::fromLocalFile(QStringLiteral("file://image$20"))}, 5, true, - QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1")}; + QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1"), false}; auto newTracks2 = QList(); newTracks2.push_back(newTrack2); @@ -3253,7 +3258,7 @@ 6, 1, QTime::fromMSecsSinceStartOfDay(23), {QUrl::fromLocalFile(QStringLiteral("/$23"))}, QDateTime::fromMSecsSinceEpoch(23), QUrl::fromLocalFile(QStringLiteral("album3")), 5, true, - QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1")}; + QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1"), false}; auto newTracks = QList(); newTracks.push_back(newTrack); @@ -3290,7 +3295,7 @@ QTime::fromMSecsSinceStartOfDay(23), {QUrl::fromLocalFile(QStringLiteral("/$23"))}, QDateTime::fromMSecsSinceEpoch(23), {QUrl::fromLocalFile(QStringLiteral("album7"))}, 5, true, - QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1")}; + QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1"), false}; auto newTracks2 = QList(); newTracks2.push_back(newTrack2); @@ -3382,7 +3387,7 @@ QTime::fromMSecsSinceStartOfDay(3), {QUrl::fromLocalFile(QStringLiteral("/$3"))}, QDateTime::fromMSecsSinceEpoch(23), {QUrl::fromLocalFile(QStringLiteral("file://image$3"))}, 5, true, - QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1")}; + QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1"), false}; musicDb.modifyTracksList({modifiedTrack}, mNewCovers, QStringLiteral("autoTest")); @@ -3463,7 +3468,7 @@ 6, 1, QTime::fromMSecsSinceStartOfDay(23), {QUrl::fromLocalFile(QStringLiteral("/$23"))}, QDateTime::fromMSecsSinceEpoch(23), {QUrl::fromLocalFile(QStringLiteral("album7"))}, 5, true, - QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1")}; + QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1"), false}; auto newTracks = QList(); newTracks.push_back(newTrack); @@ -3547,7 +3552,7 @@ 6, 1, QTime::fromMSecsSinceStartOfDay(23), {QUrl::fromLocalFile(QStringLiteral("/$23"))}, QDateTime::fromMSecsSinceEpoch(23), QUrl::fromLocalFile(QStringLiteral("album1")), 5, true, - QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1")}; + QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1"), false}; auto newTracks = QList(); newTracks.push_back(newTrack); @@ -3788,43 +3793,43 @@ 1, 1, QTime::fromMSecsSinceStartOfDay(23), {QUrl::fromLocalFile(QStringLiteral("/$23"))}, QDateTime::fromMSecsSinceEpoch(23), {QUrl::fromLocalFile(QStringLiteral("file://image$6"))}, 1, false, - QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1")}, + QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1"), false}, {true, QStringLiteral("$24"), QStringLiteral("0"), QStringLiteral("track2"), QStringLiteral("artist6"), QStringLiteral("album7"), QStringLiteral("artist6"), 2, 1, QTime::fromMSecsSinceStartOfDay(24), {QUrl::fromLocalFile(QStringLiteral("/$24"))}, QDateTime::fromMSecsSinceEpoch(24), {QUrl::fromLocalFile(QStringLiteral("file://image$6"))}, 2, false, - QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1")}, + QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1"), false}, {true, QStringLiteral("$25"), QStringLiteral("0"), QStringLiteral("track3"), QStringLiteral("artist6"), QStringLiteral("album7"), QStringLiteral("artist6"), 3, 1, QTime::fromMSecsSinceStartOfDay(25), {QUrl::fromLocalFile(QStringLiteral("/$25"))}, QDateTime::fromMSecsSinceEpoch(25), {QUrl::fromLocalFile(QStringLiteral("file://image$6"))}, 3, false, - QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1")}, + QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1"), false}, {true, QStringLiteral("$26"), QStringLiteral("0"), QStringLiteral("track4"), QStringLiteral("artist6"), QStringLiteral("album7"), QStringLiteral("artist6"), 4, 1, QTime::fromMSecsSinceStartOfDay(26), {QUrl::fromLocalFile(QStringLiteral("/$26"))}, QDateTime::fromMSecsSinceEpoch(26), {QUrl::fromLocalFile(QStringLiteral("file://image$6"))}, 4, false, - QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1")}, + QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1"), false}, {true, QStringLiteral("$27"), QStringLiteral("0"), QStringLiteral("track5"), QStringLiteral("artist6"), QStringLiteral("album7"), QStringLiteral("artist6"), 5, 1, QTime::fromMSecsSinceStartOfDay(27), {QUrl::fromLocalFile(QStringLiteral("/$27"))}, QDateTime::fromMSecsSinceEpoch(27), {QUrl::fromLocalFile(QStringLiteral("file://image$6"))}, 5, false, - QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1")}, + QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1"), false}, {true, QStringLiteral("$28"), QStringLiteral("0"), QStringLiteral("track6"), QStringLiteral("artist6"), QStringLiteral("album7"), QStringLiteral("artist6"), 6, 1, QTime::fromMSecsSinceStartOfDay(28), {QUrl::fromLocalFile(QStringLiteral("/$28"))}, QDateTime::fromMSecsSinceEpoch(28), {QUrl::fromLocalFile(QStringLiteral("file://image$6"))}, 6, true, - QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1")}, + QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1"), false}, {true, QStringLiteral("$29"), QStringLiteral("0"), QStringLiteral("track2"), QStringLiteral("artist2"), QStringLiteral("album1"), QStringLiteral("Various Artists"), 2, 2, QTime::fromMSecsSinceStartOfDay(29), {QUrl::fromLocalFile(QStringLiteral("/$29"))}, QDateTime::fromMSecsSinceEpoch(29), {QUrl::fromLocalFile(QStringLiteral("file://image$2"))}, 2, false, - QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1")}, + QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1"), false}, }; musicDb.insertTracksList(secondNewTracks, mNewCovers, QStringLiteral("autoTestSource2")); @@ -3904,43 +3909,43 @@ 1, 1, QTime::fromMSecsSinceStartOfDay(1), {QUrl::fromLocalFile(QStringLiteral("/$20"))}, QDateTime::fromMSecsSinceEpoch(20), {QUrl::fromLocalFile(QStringLiteral("file://image$6"))}, 1, false, - QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1")}, + QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1"), false}, {true, QStringLiteral("$21"), QStringLiteral("0"), QStringLiteral("track2"), QStringLiteral("artist6"), QStringLiteral("album1"), QStringLiteral("artist6"), 2, 1, QTime::fromMSecsSinceStartOfDay(2), {QUrl::fromLocalFile(QStringLiteral("/$21"))}, QDateTime::fromMSecsSinceEpoch(21), {QUrl::fromLocalFile(QStringLiteral("file://image$6"))}, 2, false, - QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1")}, + QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1"), false}, {true, QStringLiteral("$22"), QStringLiteral("0"), QStringLiteral("track3"), QStringLiteral("artist6"), QStringLiteral("album1"), QStringLiteral("artist6"), 3, 1, QTime::fromMSecsSinceStartOfDay(3), {QUrl::fromLocalFile(QStringLiteral("/$22"))}, QDateTime::fromMSecsSinceEpoch(22), {QUrl::fromLocalFile(QStringLiteral("file://image$6"))}, 3, false, - QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1")}, + QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1"), false}, {true, QStringLiteral("$23"), QStringLiteral("0"), QStringLiteral("track4"), QStringLiteral("artist6"), QStringLiteral("album1"), QStringLiteral("artist6"), 4, 1, QTime::fromMSecsSinceStartOfDay(4), {QUrl::fromLocalFile(QStringLiteral("/$23"))}, QDateTime::fromMSecsSinceEpoch(23), {QUrl::fromLocalFile(QStringLiteral("file://image$6"))}, 4, false, - QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1")}, + QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1"), false}, {true, QStringLiteral("$24"), QStringLiteral("0"), QStringLiteral("track5"), QStringLiteral("artist6"), QStringLiteral("album1"), QStringLiteral("artist6"), 5, 1, QTime::fromMSecsSinceStartOfDay(4), {QUrl::fromLocalFile(QStringLiteral("/$24"))}, QDateTime::fromMSecsSinceEpoch(24), {QUrl::fromLocalFile(QStringLiteral("file://image$6"))}, 5, false, - QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1")}, + QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1"), false}, {true, QStringLiteral("$25"), QStringLiteral("0"), QStringLiteral("track6"), QStringLiteral("artist6"), QStringLiteral("album1"), QStringLiteral("artist6"), 6, 1, QTime::fromMSecsSinceStartOfDay(5), {QUrl::fromLocalFile(QStringLiteral("/$25"))}, QDateTime::fromMSecsSinceEpoch(25), {QUrl::fromLocalFile(QStringLiteral("file://image$6"))}, 6, true, - QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1")}, + QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1"), false}, {true, QStringLiteral("$2"), QStringLiteral("0"), QStringLiteral("track2"), QStringLiteral("artist2"), QStringLiteral("album1"), QStringLiteral("Various Artists"), 2, 2, QTime::fromMSecsSinceStartOfDay(2), {QUrl::fromLocalFile(QStringLiteral("/$26"))}, QDateTime::fromMSecsSinceEpoch(26), {QUrl::fromLocalFile(QStringLiteral("file://image$2"))}, 2, false, - QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1")}, + QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1"), false}, }; musicDb.insertTracksList(newTracks, mNewCovers, QStringLiteral("autoTestSource2")); @@ -4007,7 +4012,7 @@ 6, 1, QTime::fromMSecsSinceStartOfDay(23), {QUrl::fromLocalFile(QStringLiteral("/$23"))}, QDateTime::fromMSecsSinceEpoch(23), {QUrl::fromLocalFile(QStringLiteral("album3"))}, 5, true, - QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1")},}; + QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1"), true},}; auto newCovers = mNewCovers; newCovers[QStringLiteral("file:///$23")] = QUrl::fromLocalFile(QStringLiteral("album3")); @@ -4049,15 +4054,16 @@ QCOMPARE(firstTrack.composer(), QStringLiteral("composer1")); QCOMPARE(firstTrack.lyricist(), QStringLiteral("lyricist1")); QCOMPARE(firstTrack.albumId(), qulonglong(1)); + QCOMPARE(firstTrack.hasEmbeddedCover(), true); auto newTracks2 = QList(); newTracks2 = {{true, QStringLiteral("$23"), QStringLiteral("0"), QStringLiteral("track6"), QStringLiteral("artist2"), QStringLiteral("album3"), QStringLiteral("artist2"), 6, 1, QTime::fromMSecsSinceStartOfDay(23), {QUrl::fromLocalFile(QStringLiteral("/$23"))}, QDateTime::fromMSecsSinceEpoch(23), {QUrl::fromLocalFile(QStringLiteral("album3"))}, 5, true, - QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1")},}; + QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1"), false},}; auto newCovers2 = mNewCovers; newCovers2[QStringLiteral("file:///$23")] = QUrl::fromLocalFile(QStringLiteral("album3")); @@ -4124,7 +4130,7 @@ QTime::fromMSecsSinceStartOfDay(20), {QUrl::fromLocalFile(QStringLiteral("/$20"))}, QDateTime::fromMSecsSinceEpoch(20), {QUrl::fromLocalFile(QStringLiteral("album3"))}, 5, true, - QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1")}}; + QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1"), false}}; auto newCovers = mNewCovers; newCovers[QStringLiteral("file:///$23")] = QUrl::fromLocalFile(QStringLiteral("album3")); @@ -4155,7 +4161,7 @@ QTime::fromMSecsSinceStartOfDay(19), {QUrl::fromLocalFile(QStringLiteral("/$19"))}, QDateTime::fromMSecsSinceEpoch(19), {QUrl::fromLocalFile(QStringLiteral("album3"))}, 5, true, - QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1")}}; + QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1"), true}}; musicDb.insertTracksList(newTracks2, newCovers, QStringLiteral("autoTest")); @@ -4194,6 +4200,7 @@ QCOMPARE(firstTrack.composer(), QStringLiteral("composer1")); QCOMPARE(firstTrack.lyricist(), QStringLiteral("lyricist1")); QCOMPARE(firstTrack.albumId(), qulonglong(1)); + QCOMPARE(firstTrack.hasEmbeddedCover(), true); auto secondTrack = musicDb.trackFromDatabaseId(musicDb.trackIdFromTitleAlbumTrackDiscNumber(QStringLiteral("track7"), QStringLiteral("artist3"), QStringLiteral("album3"), 7, 1)); @@ -4214,6 +4221,7 @@ QCOMPARE(secondTrack.composer(), QStringLiteral("composer1")); QCOMPARE(secondTrack.lyricist(), QStringLiteral("lyricist1")); QCOMPARE(secondTrack.albumId(), qulonglong(1)); + QCOMPARE(secondTrack.hasEmbeddedCover(), false); auto album = musicDb.albumFromTitleAndArtist(QStringLiteral("album3"), QStringLiteral("artist4")); @@ -4269,25 +4277,25 @@ QTime::fromMSecsSinceStartOfDay(20), {QUrl::fromLocalFile(QStringLiteral("/album7/$20"))}, QDateTime::fromMSecsSinceEpoch(20), {QUrl::fromLocalFile(QStringLiteral("album7"))}, 5, true, - QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1")}, + QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1"), false}, {true, QStringLiteral("$21"), QStringLiteral("0"), QStringLiteral("track8"), QStringLiteral("artist2"), QStringLiteral("album7"), {}, 8, 1, QTime::fromMSecsSinceStartOfDay(21), {QUrl::fromLocalFile(QStringLiteral("/album7/$21"))}, QDateTime::fromMSecsSinceEpoch(21), {QUrl::fromLocalFile(QStringLiteral("album7"))}, 5, true, - QStringLiteral("genre2"), QStringLiteral("composer2"), QStringLiteral("lyricist2")}, + QStringLiteral("genre2"), QStringLiteral("composer2"), QStringLiteral("lyricist2"), false}, {true, QStringLiteral("$22"), QStringLiteral("0"), QStringLiteral("track9"), QStringLiteral("artist3"), QStringLiteral("album7"), {}, 9, 1, QTime::fromMSecsSinceStartOfDay(22), {QUrl::fromLocalFile(QStringLiteral("/album8/$22"))}, QDateTime::fromMSecsSinceEpoch(22), {QUrl::fromLocalFile(QStringLiteral("album7"))}, 5, true, - QStringLiteral("genre3"), QStringLiteral("composer3"), QStringLiteral("lyricist3")}, + QStringLiteral("genre3"), QStringLiteral("composer3"), QStringLiteral("lyricist3"), false}, {true, QStringLiteral("$23"), QStringLiteral("0"), QStringLiteral("track10"), QStringLiteral("artist4"), QStringLiteral("album7"), {}, 10, 1, QTime::fromMSecsSinceStartOfDay(23), {QUrl::fromLocalFile(QStringLiteral("/album8/$23"))}, QDateTime::fromMSecsSinceEpoch(23), {QUrl::fromLocalFile(QStringLiteral("album7"))}, 5, true, - QStringLiteral("genre4"), QStringLiteral("composer4"), QStringLiteral("lyricist4")},}; + QStringLiteral("genre4"), QStringLiteral("composer4"), QStringLiteral("lyricist4"), false},}; auto newCovers = mNewCovers; newCovers[QStringLiteral("file:///album7/$20")] = QUrl::fromLocalFile(QStringLiteral("album7")); @@ -4367,37 +4375,37 @@ QTime::fromMSecsSinceStartOfDay(20), {QUrl::fromLocalFile(QStringLiteral("/album7/$20"))}, QDateTime::fromMSecsSinceEpoch(20), {QUrl::fromLocalFile(QStringLiteral("album7"))}, 5, true, - QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1")}, + QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1"), false}, {true, QStringLiteral("$21"), QStringLiteral("0"), QStringLiteral("track8"), QStringLiteral("artist2"), QStringLiteral("album7"), {}, 8, 1, QTime::fromMSecsSinceStartOfDay(21), {QUrl::fromLocalFile(QStringLiteral("/album7/$21"))}, QDateTime::fromMSecsSinceEpoch(21), {QUrl::fromLocalFile(QStringLiteral("album7"))}, 5, true, - QStringLiteral("genre2"), QStringLiteral("composer2"), QStringLiteral("lyricist2")}, + QStringLiteral("genre2"), QStringLiteral("composer2"), QStringLiteral("lyricist2"), false}, {true, QStringLiteral("$22"), QStringLiteral("0"), QStringLiteral("track9"), QStringLiteral("artist3"), QStringLiteral("album7"), {}, 9, 1, QTime::fromMSecsSinceStartOfDay(22), {QUrl::fromLocalFile(QStringLiteral("/album7/$22"))}, QDateTime::fromMSecsSinceEpoch(22), {QUrl::fromLocalFile(QStringLiteral("album7"))}, 5, true, - QStringLiteral("genre3"), QStringLiteral("composer3"), QStringLiteral("lyricist3")}, + QStringLiteral("genre3"), QStringLiteral("composer3"), QStringLiteral("lyricist3"), false}, {true, QStringLiteral("$20"), QStringLiteral("0"), QStringLiteral("track7"), QStringLiteral("artist1"), QStringLiteral("album7"), {}, 7, 1, QTime::fromMSecsSinceStartOfDay(20), {QUrl::fromLocalFile(QStringLiteral("/album8/$20"))}, QDateTime::fromMSecsSinceEpoch(20), {QUrl::fromLocalFile(QStringLiteral("album7"))}, 5, true, - QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1")}, + QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1"), false}, {true, QStringLiteral("$21"), QStringLiteral("0"), QStringLiteral("track8"), QStringLiteral("artist2"), QStringLiteral("album7"), {}, 8, 1, QTime::fromMSecsSinceStartOfDay(21), {QUrl::fromLocalFile(QStringLiteral("/album8/$21"))}, QDateTime::fromMSecsSinceEpoch(21), {QUrl::fromLocalFile(QStringLiteral("album7"))}, 5, true, - QStringLiteral("genre2"), QStringLiteral("composer2"), QStringLiteral("lyricist2")}, + QStringLiteral("genre2"), QStringLiteral("composer2"), QStringLiteral("lyricist2"), false}, {true, QStringLiteral("$22"), QStringLiteral("0"), QStringLiteral("track9"), QStringLiteral("artist3"), QStringLiteral("album7"), {}, 9, 1, QTime::fromMSecsSinceStartOfDay(22), {QUrl::fromLocalFile(QStringLiteral("/album8/$22"))}, QDateTime::fromMSecsSinceEpoch(22), {QUrl::fromLocalFile(QStringLiteral("album7"))}, 5, true, - QStringLiteral("genre3"), QStringLiteral("composer3"), QStringLiteral("lyricist3")},}; + QStringLiteral("genre3"), QStringLiteral("composer3"), QStringLiteral("lyricist3"), false},}; auto newCovers = mNewCovers; newCovers[QStringLiteral("file:///album7/$20")] = QUrl::fromLocalFile(QStringLiteral("album7")); @@ -4473,7 +4481,7 @@ 6, 1, QTime::fromMSecsSinceStartOfDay(23), {QUrl::fromLocalFile(QStringLiteral("/$23"))}, QDateTime::fromMSecsSinceEpoch(23), {QUrl::fromLocalFile(QStringLiteral("album3"))}, 5, true, - QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1")}; + QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1"), false}; auto newTracks = QList(); newTracks.push_back(newTrack); @@ -4553,7 +4561,7 @@ {QUrl::fromLocalFile(QStringLiteral("/$25"))}, QDateTime::fromMSecsSinceEpoch(25), {QUrl::fromLocalFile(QStringLiteral("file://image$25"))}, 5, true, - QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1")}; + QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1"), false}; auto newTracks2 = QList(); newTracks2.push_back(newTrack2); @@ -4711,7 +4719,7 @@ auto newTrack = MusicAudioTrack{true, QStringLiteral("$23"), QStringLiteral("0"), {}, {}, {}, {}, {}, {}, {}, {QUrl::fromLocalFile(QStringLiteral("file:///$23"))}, - QDateTime::fromMSecsSinceEpoch(23), {}, {}, {}, {}, {}, {}}; + QDateTime::fromMSecsSinceEpoch(23), {}, {}, {}, {}, {}, {}, false}; auto newTracks = QList(); newTracks.push_back(newTrack); newTracks.push_back(newTrack); @@ -4854,7 +4862,7 @@ 6, 1, QTime::fromMSecsSinceStartOfDay(23), {QUrl::fromLocalFile(QStringLiteral("/test{{test}}/$23"))}, QDateTime::fromMSecsSinceEpoch(23), QUrl::fromLocalFile(QStringLiteral("album3")), 5, true, - QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1")}; + QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1"), false}; auto newTracks = QList(); newTracks.push_back(newTrack); diff --git a/autotests/databasetestdata.h b/autotests/databasetestdata.h --- a/autotests/databasetestdata.h +++ b/autotests/databasetestdata.h @@ -40,117 +40,117 @@ QStringLiteral("artist1"), QStringLiteral("album1"), QStringLiteral("Various Artists"), 1, 1, QTime::fromMSecsSinceStartOfDay(1), {QUrl::fromLocalFile(QStringLiteral("/$1"))}, QDateTime::fromMSecsSinceEpoch(1), QUrl::fromLocalFile(QStringLiteral("album1")), 1, false, - QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1")}, + QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1"), true}, {true, QStringLiteral("$2"), QStringLiteral("0"), QStringLiteral("track2"), QStringLiteral("artist2"), QStringLiteral("album1"), QStringLiteral("Various Artists"), 2, 2, QTime::fromMSecsSinceStartOfDay(2), {QUrl::fromLocalFile(QStringLiteral("/$2"))}, QDateTime::fromMSecsSinceEpoch(2), QUrl::fromLocalFile(QStringLiteral("album1")), 2, false, - QStringLiteral("genre2"), QStringLiteral("composer1"), QStringLiteral("lyricist1")}, + QStringLiteral("genre2"), QStringLiteral("composer1"), QStringLiteral("lyricist1"), true}, {true, QStringLiteral("$3"), QStringLiteral("0"), QStringLiteral("track3"), QStringLiteral("artist3"), QStringLiteral("album1"), QStringLiteral("Various Artists"), 3, 3, QTime::fromMSecsSinceStartOfDay(3), {QUrl::fromLocalFile(QStringLiteral("/$3"))}, QDateTime::fromMSecsSinceEpoch(3), QUrl::fromLocalFile(QStringLiteral("album1")), 3, false, - QStringLiteral("genre3"), QStringLiteral("composer1"), QStringLiteral("lyricist1")}, + QStringLiteral("genre3"), QStringLiteral("composer1"), QStringLiteral("lyricist1"), true}, {true, QStringLiteral("$4"), QStringLiteral("0"), QStringLiteral("track4"), QStringLiteral("artist4"), QStringLiteral("album1"), QStringLiteral("Various Artists"), 4, 4, QTime::fromMSecsSinceStartOfDay(4), {QUrl::fromLocalFile(QStringLiteral("/$4"))}, QDateTime::fromMSecsSinceEpoch(4), QUrl::fromLocalFile(QStringLiteral("album1")), 4, false, - QStringLiteral("genre4"), QStringLiteral("composer1"), QStringLiteral("lyricist1")}, + QStringLiteral("genre4"), QStringLiteral("composer1"), QStringLiteral("lyricist1"), true}, {true, QStringLiteral("$4"), QStringLiteral("0"), QStringLiteral("track4"), QStringLiteral("artist4"), QStringLiteral("album1"), QStringLiteral("Various Artists"), 4, 4, QTime::fromMSecsSinceStartOfDay(4), {QUrl::fromLocalFile(QStringLiteral("/$4Bis"))}, QDateTime::fromMSecsSinceEpoch(4), QUrl::fromLocalFile(QStringLiteral("album1")), 4, false, - QStringLiteral("genre4"), QStringLiteral("composer1"), QStringLiteral("lyricist1")}, + QStringLiteral("genre4"), QStringLiteral("composer1"), QStringLiteral("lyricist1"), true}, {true, QStringLiteral("$5"), QStringLiteral("0"), QStringLiteral("track1"), QStringLiteral("artist1"), QStringLiteral("album2"), QStringLiteral("artist1"), 1, 1, QTime::fromMSecsSinceStartOfDay(5), {QUrl::fromLocalFile(QStringLiteral("/$5"))}, QDateTime::fromMSecsSinceEpoch(5), QUrl::fromLocalFile(QStringLiteral("album2")), 4, true, - QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1")}, + QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1"), true}, {true, QStringLiteral("$6"), QStringLiteral("0"), QStringLiteral("track2"), QStringLiteral("artist1"), QStringLiteral("album2"), QStringLiteral("artist1"), 2, 1, QTime::fromMSecsSinceStartOfDay(6), {QUrl::fromLocalFile(QStringLiteral("/$6"))}, QDateTime::fromMSecsSinceEpoch(6), QUrl::fromLocalFile(QStringLiteral("album2")), 1, true, - QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1")}, + QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1"), true}, {true, QStringLiteral("$7"), QStringLiteral("0"), QStringLiteral("track3"), QStringLiteral("artist1"), QStringLiteral("album2"), QStringLiteral("artist1"), 3, 1, QTime::fromMSecsSinceStartOfDay(7), {QUrl::fromLocalFile(QStringLiteral("/$7"))}, QDateTime::fromMSecsSinceEpoch(7), QUrl::fromLocalFile(QStringLiteral("album2")), 5, true, - QStringLiteral("genre2"), QStringLiteral("composer1"), QStringLiteral("lyricist1")}, + QStringLiteral("genre2"), QStringLiteral("composer1"), QStringLiteral("lyricist1"), true}, {true, QStringLiteral("$8"), QStringLiteral("0"), QStringLiteral("track4"), QStringLiteral("artist1"), QStringLiteral("album2"), QStringLiteral("artist1"), 4, 1, QTime::fromMSecsSinceStartOfDay(8), {QUrl::fromLocalFile(QStringLiteral("/$8"))}, QDateTime::fromMSecsSinceEpoch(8), QUrl::fromLocalFile(QStringLiteral("album2")), 2, true, - QStringLiteral("genre2"), QStringLiteral("composer1"), QStringLiteral("lyricist1")}, + QStringLiteral("genre2"), QStringLiteral("composer1"), QStringLiteral("lyricist1"), true}, {true, QStringLiteral("$9"), QStringLiteral("0"), QStringLiteral("track5"), QStringLiteral("artist1"), QStringLiteral("album2"), QStringLiteral("artist1"), 5, 1, QTime::fromMSecsSinceStartOfDay(9), {QUrl::fromLocalFile(QStringLiteral("/$9"))}, QDateTime::fromMSecsSinceEpoch(9), QUrl::fromLocalFile(QStringLiteral("album2")), 3, true, - QStringLiteral("genre2"), QStringLiteral("composer1"), QStringLiteral("lyricist1")}, + QStringLiteral("genre2"), QStringLiteral("composer1"), QStringLiteral("lyricist1"), true}, {true, QStringLiteral("$10"), QStringLiteral("0"), QStringLiteral("track6"), QStringLiteral("artist1 and artist2"), QStringLiteral("album2"), QStringLiteral("artist1"), 6, 1, QTime::fromMSecsSinceStartOfDay(10), {QUrl::fromLocalFile(QStringLiteral("/$10"))}, QDateTime::fromMSecsSinceEpoch(10), QUrl::fromLocalFile(QStringLiteral("album2")), 5, true, - QStringLiteral("genre2"), QStringLiteral("composer1"), QStringLiteral("lyricist1")}, + QStringLiteral("genre2"), QStringLiteral("composer1"), QStringLiteral("lyricist1"), true}, {true, QStringLiteral("$11"), QStringLiteral("0"), QStringLiteral("track1"), QStringLiteral("artist2"), QStringLiteral("album3"), QStringLiteral("artist2"), 1, 1, QTime::fromMSecsSinceStartOfDay(11), {QUrl::fromLocalFile(QStringLiteral("/$11"))}, QDateTime::fromMSecsSinceEpoch(11), QUrl::fromLocalFile(QStringLiteral("album3")), 1, true, - QStringLiteral("genre3"), QStringLiteral("composer1"), QStringLiteral("lyricist1")}, + QStringLiteral("genre3"), QStringLiteral("composer1"), QStringLiteral("lyricist1"), false}, {true, QStringLiteral("$12"), QStringLiteral("0"), QStringLiteral("track2"), QStringLiteral("artist2"), QStringLiteral("album3"), QStringLiteral("artist2"), 2, 1, QTime::fromMSecsSinceStartOfDay(12), {QUrl::fromLocalFile(QStringLiteral("/$12"))}, QDateTime::fromMSecsSinceEpoch(12), QUrl::fromLocalFile(QStringLiteral("album3")), 2, true, - QStringLiteral("genre3"), QStringLiteral("composer1"), QStringLiteral("lyricist1")}, + QStringLiteral("genre3"), QStringLiteral("composer1"), QStringLiteral("lyricist1"), false}, {true, QStringLiteral("$13"), QStringLiteral("0"), QStringLiteral("track3"), QStringLiteral("artist2"), QStringLiteral("album3"), QStringLiteral("artist2"), 3, 1, QTime::fromMSecsSinceStartOfDay(13), {QUrl::fromLocalFile(QStringLiteral("/$13"))}, QDateTime::fromMSecsSinceEpoch(13), QUrl::fromLocalFile(QStringLiteral("album3")), 3, true, - QStringLiteral("genre3"), QStringLiteral("composer1"), QStringLiteral("lyricist1")}, + QStringLiteral("genre3"), QStringLiteral("composer1"), QStringLiteral("lyricist1"), false}, {true, QStringLiteral("$14"), QStringLiteral("0"), QStringLiteral("track1"), QStringLiteral("artist2"), QStringLiteral("album4"), QStringLiteral("artist2"), 1, 1, QTime::fromMSecsSinceStartOfDay(14), {QUrl::fromLocalFile(QStringLiteral("/$14"))}, QDateTime::fromMSecsSinceEpoch(14), QUrl::fromLocalFile(QStringLiteral("album4")), 4, true, - QStringLiteral("genre4"), QStringLiteral("composer1"), QStringLiteral("lyricist1")}, + QStringLiteral("genre4"), QStringLiteral("composer1"), QStringLiteral("lyricist1"), false}, {true, QStringLiteral("$15"), QStringLiteral("0"), QStringLiteral("track2"), QStringLiteral("artist2"), QStringLiteral("album4"), QStringLiteral("artist2"), 2, 1, QTime::fromMSecsSinceStartOfDay(15), {QUrl::fromLocalFile(QStringLiteral("/$15"))}, QDateTime::fromMSecsSinceEpoch(15), QUrl::fromLocalFile(QStringLiteral("album4")), 5, true, - QStringLiteral("genre4"), QStringLiteral("composer1"), QStringLiteral("lyricist1")}, + QStringLiteral("genre4"), QStringLiteral("composer1"), QStringLiteral("lyricist1"), false}, {true, QStringLiteral("$16"), QStringLiteral("0"), QStringLiteral("track3"), QStringLiteral("artist2"), QStringLiteral("album4"), QStringLiteral("artist2"), 3, 1, QTime::fromMSecsSinceStartOfDay(16), {QUrl::fromLocalFile(QStringLiteral("/$16"))}, QDateTime::fromMSecsSinceEpoch(16), QUrl::fromLocalFile(QStringLiteral("album4")), 1, true, - QStringLiteral("genre4"), QStringLiteral("composer1"), QStringLiteral("lyricist1")}, + QStringLiteral("genre4"), QStringLiteral("composer1"), QStringLiteral("lyricist1"), false}, {true, QStringLiteral("$17"), QStringLiteral("0"), QStringLiteral("track4"), QStringLiteral("artist2"), QStringLiteral("album4"), QStringLiteral("artist2"), 4, 1, QTime::fromMSecsSinceStartOfDay(17), {QUrl::fromLocalFile(QStringLiteral("/$17"))}, QDateTime::fromMSecsSinceEpoch(17), QUrl::fromLocalFile(QStringLiteral("album4")), 2, true, - QStringLiteral("genre4"), QStringLiteral("composer1"), QStringLiteral("lyricist1")}, + QStringLiteral("genre4"), QStringLiteral("composer1"), QStringLiteral("lyricist1"), false}, {true, QStringLiteral("$18"), QStringLiteral("0"), QStringLiteral("track5"), QStringLiteral("artist2"), QStringLiteral("album4"), QStringLiteral("artist2"), 5, 1, QTime::fromMSecsSinceStartOfDay(18), {QUrl::fromLocalFile(QStringLiteral("/$18"))}, QDateTime::fromMSecsSinceEpoch(18), QUrl::fromLocalFile(QStringLiteral("album4")), 3, true, - QStringLiteral("genre3"), QStringLiteral("composer1"), QStringLiteral("lyricist1")}, + QStringLiteral("genre3"), QStringLiteral("composer1"), QStringLiteral("lyricist1"), false}, {true, QStringLiteral("$19"), QStringLiteral("0"), QStringLiteral("track1"), QStringLiteral("artist7"), QStringLiteral("album3"), QStringLiteral("artist7"), 1, 1, QTime::fromMSecsSinceStartOfDay(19), {QUrl::fromLocalFile(QStringLiteral("/$19"))}, QDateTime::fromMSecsSinceEpoch(19), QUrl::fromLocalFile(QStringLiteral("album3")), 1, true, - QStringLiteral("genre2"), QStringLiteral("composer1"), QStringLiteral("lyricist1")}, + QStringLiteral("genre2"), QStringLiteral("composer1"), QStringLiteral("lyricist1"), true}, {true, QStringLiteral("$20"), QStringLiteral("0"), QStringLiteral("track2"), QStringLiteral("artist7"), QStringLiteral("album3"), QStringLiteral("artist7"), 2, 1, QTime::fromMSecsSinceStartOfDay(20), {QUrl::fromLocalFile(QStringLiteral("/$20"))}, QDateTime::fromMSecsSinceEpoch(20), QUrl::fromLocalFile(QStringLiteral("album3")), 2, true, - QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1")}, + QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1"), false}, {true, QStringLiteral("$21"), QStringLiteral("0"), QStringLiteral("track3"), QStringLiteral("artist7"), QStringLiteral("album3"), QStringLiteral("artist7"), 3, 1, QTime::fromMSecsSinceStartOfDay(21), {QUrl::fromLocalFile(QStringLiteral("/$21"))}, QDateTime::fromMSecsSinceEpoch(21), QUrl::fromLocalFile(QStringLiteral("album3")), 3, true, - QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1")}, + QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1"), false}, {true, QStringLiteral("$22"), QStringLiteral("0"), QStringLiteral("track9"), QStringLiteral("artist2"), QStringLiteral("album3"), QStringLiteral("artist7"), 9, 1, QTime::fromMSecsSinceStartOfDay(22), {QUrl::fromLocalFile(QStringLiteral("/$22"))}, QDateTime::fromMSecsSinceEpoch(22), QUrl::fromLocalFile(QStringLiteral("album3")), 9, true, - QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1")}, + QStringLiteral("genre1"), QStringLiteral("composer1"), QStringLiteral("lyricist1"), false}, }; QHash mNewCovers = { diff --git a/autotests/trackslistenertest.cpp b/autotests/trackslistenertest.cpp --- a/autotests/trackslistenertest.cpp +++ b/autotests/trackslistenertest.cpp @@ -440,7 +440,7 @@ 2, 3, QTime::fromMSecsSinceStartOfDay(1000), {QUrl::fromLocalFile(QStringLiteral("/$1"))}, QDateTime::fromMSecsSinceEpoch(1), {QUrl::fromLocalFile(QStringLiteral("file://image$1"))}, 1, false, - {}, {}, QStringLiteral("lyricist1")} + {}, {}, QStringLiteral("lyricist1"), false} }, mNewCovers, QStringLiteral("autoTest")); QCOMPARE(trackHasChangedSpy.count(), 2); diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -232,6 +232,7 @@ elisaqmlplugin.cpp datatype.cpp elisautils.cpp + embeddedcoverageimageprovider.cpp ) add_library(elisaqmlplugin SHARED ${elisaqmlplugin_SOURCES}) diff --git a/src/abstractfile/abstractfilelisting.h b/src/abstractfile/abstractfilelisting.h --- a/src/abstractfile/abstractfilelisting.h +++ b/src/abstractfile/abstractfilelisting.h @@ -122,6 +122,8 @@ FileScanner& fileScanner(); + bool checkEmbeddedCoverImage(const QString &localFileName); + private: std::unique_ptr d; diff --git a/src/abstractfile/abstractfilelisting.cpp b/src/abstractfile/abstractfilelisting.cpp --- a/src/abstractfile/abstractfilelisting.cpp +++ b/src/abstractfile/abstractfilelisting.cpp @@ -21,6 +21,8 @@ #include "notificationitem.h" #include "filescanner.h" +#include + #include #include #include @@ -58,6 +60,8 @@ QMimeDatabase mMimeDb; + KFileMetaData::EmbeddedImageData mImageScanner; + QHash mAllFiles; QAtomicInt mStopRequest = 0; @@ -290,6 +294,7 @@ newTrack = d->mFileScanner.scanOneFile(scanFile, d->mMimeDb); if (newTrack.isValid()) { + newTrack.setHasEmbeddedCover(checkEmbeddedCoverImage(localFileName)); newTrack.setFileModificationTime(scanFileInfo.fileTime(QFile::FileModificationTime)); if (scanFileInfo.exists()) { @@ -441,5 +446,18 @@ return d->mFileScanner; } +bool AbstractFileListing::checkEmbeddedCoverImage(const QString &localFileName) +{ + auto imageData = d->mImageScanner.imageData(localFileName); + + if (imageData.contains(KFileMetaData::EmbeddedImageData::FrontCover)) { + if (!imageData[KFileMetaData::EmbeddedImageData::FrontCover].isEmpty()) { + return true; + } + } + + return false; +} + #include "moc_abstractfilelisting.cpp" diff --git a/src/baloo/localbaloofilelisting.cpp b/src/baloo/localbaloofilelisting.cpp --- a/src/baloo/localbaloofilelisting.cpp +++ b/src/baloo/localbaloofilelisting.cpp @@ -370,7 +370,8 @@ } if (newTrack.isValid()) { - AbstractFileListing::addCover(newTrack); + newTrack.setHasEmbeddedCover(checkEmbeddedCoverImage(localFileName)); + addCover(newTrack); watchPath(localFileName); } diff --git a/src/databaseinterface.cpp b/src/databaseinterface.cpp --- a/src/databaseinterface.cpp +++ b/src/databaseinterface.cpp @@ -1085,11 +1085,13 @@ auto listTables = d->mTracksDatabase.tables(); - if (!listTables.contains(QStringLiteral("DatabaseVersionV6"))) { - auto oldTables = QStringList{QStringLiteral("DatabaseVersionV2"), + if (!listTables.contains(QStringLiteral("DatabaseVersionV7"))) { + auto oldTables = QStringList{ + QStringLiteral("DatabaseVersionV2"), QStringLiteral("DatabaseVersionV3"), QStringLiteral("DatabaseVersionV4"), QStringLiteral("DatabaseVersionV5"), + QStringLiteral("DatabaseVersionV6"), QStringLiteral("AlbumsArtists"), QStringLiteral("TracksArtists"), QStringLiteral("TracksMapping"), @@ -1120,10 +1122,10 @@ listTables = d->mTracksDatabase.tables(); } - if (!listTables.contains(QStringLiteral("DatabaseVersionV6"))) { + if (!listTables.contains(QStringLiteral("DatabaseVersionV7"))) { QSqlQuery createSchemaQuery(d->mTracksDatabase); - const auto &result = createSchemaQuery.exec(QStringLiteral("CREATE TABLE `DatabaseVersionV6` (`Version` INTEGER PRIMARY KEY NOT NULL)")); + const auto &result = createSchemaQuery.exec(QStringLiteral("CREATE TABLE `DatabaseVersionV7` (`Version` INTEGER PRIMARY KEY NOT NULL)")); if (!result) { qDebug() << "DatabaseInterface::initDatabase" << createSchemaQuery.lastQuery(); @@ -1250,6 +1252,7 @@ "`Channels` INTEGER DEFAULT -1, " "`BitRate` INTEGER DEFAULT -1, " "`SampleRate` INTEGER DEFAULT -1, " + "`HasEmbeddedCover` BOOLEAN NOT NULL, " "UNIQUE (" "`Title`, `AlbumTitle`, `AlbumArtistName`, " "`AlbumPath`, `TrackNumber`, `DiscNumber`" @@ -1585,7 +1588,8 @@ "tracks.`Year`, " "tracks.`Channels`, " "tracks.`BitRate`, " - "tracks.`SampleRate` " + "tracks.`SampleRate`, " + "tracks.`HasEmbeddedCover` " "FROM " "`Tracks` tracks, " "`TracksMapping` tracksMapping " @@ -1666,7 +1670,8 @@ "tracks.`Year`, " "tracks.`Channels`, " "tracks.`BitRate`, " - "tracks.`SampleRate` " + "tracks.`SampleRate`, " + "tracks.`HasEmbeddedCover` " "FROM " "`Tracks` tracks, " "`TracksMapping` tracksMapping, " @@ -1848,7 +1853,8 @@ "tracks.`Year`, " "tracks.`Channels`, " "tracks.`BitRate`, " - "tracks.`SampleRate` " + "tracks.`SampleRate`, " + "tracks.`HasEmbeddedCover` " "FROM " "`Tracks` tracks, " "`TracksMapping` tracksMapping " @@ -1913,7 +1919,8 @@ "tracks.`Year`, " "tracks.`Channels`, " "tracks.`BitRate`, " - "tracks.`SampleRate` " + "tracks.`SampleRate`, " + "tracks.`HasEmbeddedCover` " "FROM " "`Tracks` tracks, " "`TracksMapping` tracksMapping " @@ -2231,7 +2238,8 @@ "tracks.`Year`, " "tracks.`Channels`, " "tracks.`BitRate`, " - "tracks.`SampleRate` " + "tracks.`SampleRate`, " + "tracks.`HasEmbeddedCover` " "FROM " "`Tracks` tracks " "LEFT JOIN " @@ -2408,7 +2416,8 @@ "`SampleRate`, " "`Year`, " "`Duration`, " - "`Rating` ) " + "`Rating`, " + "`HasEmbeddedCover`) " "VALUES " "(" ":trackId, " @@ -2428,7 +2437,8 @@ ":sampleRate, " ":year, " ":trackDuration, " - ":trackRating)"); + ":trackRating, " + ":hasEmbeddedCover)"); auto result = prepareQuery(d->mInsertTrackQuery, insertTrackQueryText); @@ -2630,7 +2640,8 @@ "tracks.`Year`, " "tracks.`Channels`, " "tracks.`BitRate`, " - "tracks.`SampleRate` " + "tracks.`SampleRate`, " + "tracks.`HasEmbeddedCover` " "FROM " "`Tracks` tracks, " "`TracksMapping` tracksMapping " @@ -3466,6 +3477,7 @@ d->mInsertTrackQuery.bindValue(QStringLiteral(":channels"), oneTrack.channels()); d->mInsertTrackQuery.bindValue(QStringLiteral(":bitRate"), oneTrack.bitRate()); d->mInsertTrackQuery.bindValue(QStringLiteral(":sampleRate"), oneTrack.sampleRate()); + d->mInsertTrackQuery.bindValue(QStringLiteral(":hasEmbeddedCover"), oneTrack.hasEmbeddedCover()); auto result = d->mInsertTrackQuery.exec(); @@ -3551,6 +3563,7 @@ result.setBitRate(trackRecord.value(20).toInt()); result.setSampleRate(trackRecord.value(21).toInt()); result.setAlbumId(trackRecord.value(2).toULongLong()); + result.setHasEmbeddedCover(trackRecord.value(22).toBool()); result.setValid(true); diff --git a/src/elisaqmlplugin.cpp b/src/elisaqmlplugin.cpp --- a/src/elisaqmlplugin.cpp +++ b/src/elisaqmlplugin.cpp @@ -52,6 +52,7 @@ #include "models/singleartistproxymodel.h" #include "models/singlealbumproxymodel.h" #include "models/genericdatamodel.h" +#include "embeddedcoverageimageprovider.h" #if defined KF5KIO_FOUND && KF5KIO_FOUND #include "models/filebrowserproxymodel.h" @@ -81,6 +82,7 @@ void ElisaQmlTestPlugin::initializeEngine(QQmlEngine *engine, const char *uri) { QQmlExtensionPlugin::initializeEngine(engine, uri); + engine->addImageProvider(QStringLiteral("cover"), new EmbeddedCoverageImageProvider); } void ElisaQmlTestPlugin::registerTypes(const char *uri) diff --git a/src/embeddedcoverageimageprovider.h b/src/embeddedcoverageimageprovider.h new file mode 100644 --- /dev/null +++ b/src/embeddedcoverageimageprovider.h @@ -0,0 +1,38 @@ +/* + * Copyright 2018 Matthieu Gallien + * + * This program is free software: you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + */ + +#ifndef EMBEDDEDCOVERAGEIMAGEPROVIDER_H +#define EMBEDDEDCOVERAGEIMAGEPROVIDER_H + +#include +#include + +class EmbeddedCoverageImageProvider : public QQuickAsyncImageProvider +{ +public: + + EmbeddedCoverageImageProvider(); + + QQuickImageResponse *requestImageResponse(const QString &id, const QSize &requestedSize) override; + +private: + + QThreadPool pool; + +}; + +#endif // EMBEDDEDCOVERAGEIMAGEPROVIDER_H diff --git a/src/embeddedcoverageimageprovider.cpp b/src/embeddedcoverageimageprovider.cpp new file mode 100644 --- /dev/null +++ b/src/embeddedcoverageimageprovider.cpp @@ -0,0 +1,66 @@ +/* + * Copyright 2018 Matthieu Gallien + * + * This program is free software: you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + */ + +#include "embeddedcoverageimageprovider.h" + +#include +#include +#include + +class AsyncImageResponse : public QQuickImageResponse, public QRunnable +{ +public: + AsyncImageResponse(QString id, QSize requestedSize) + : mId(std::move(id)), mRequestedSize(requestedSize) + { + setAutoDelete(false); + } + + QQuickTextureFactory *textureFactory() const override + { + return QQuickTextureFactory::textureFactoryForImage(mCoverImage); + } + + void run() override + { + KFileMetaData::EmbeddedImageData embeddedImage; + + auto imageData = embeddedImage.imageData(mId); + + if (imageData.contains(KFileMetaData::EmbeddedImageData::FrontCover)) { + mCoverImage = QImage::fromData(imageData[KFileMetaData::EmbeddedImageData::FrontCover]); + } + + emit finished(); + } + + QString mId; + QSize mRequestedSize; + QImage mCoverImage; +}; + +EmbeddedCoverageImageProvider::EmbeddedCoverageImageProvider() + : QQuickAsyncImageProvider() +{ +} + +QQuickImageResponse *EmbeddedCoverageImageProvider::requestImageResponse(const QString &id, const QSize &requestedSize) +{ + auto response = std::make_unique(id, requestedSize); + pool.start(response.get()); + return response.release(); +} diff --git a/src/musicalbum.cpp b/src/musicalbum.cpp --- a/src/musicalbum.cpp +++ b/src/musicalbum.cpp @@ -183,7 +183,17 @@ QUrl MusicAlbum::albumArtURI() const { - return d->mAlbumArtURI; + if (d->mAlbumArtURI.isValid()) { + return d->mAlbumArtURI; + } else { + for (const auto &oneTrack : qAsConst(d->mTracks)) { + if (oneTrack.hasEmbeddedCover()) { + return oneTrack.albumCover(); + } + } + } + + return {}; } void MusicAlbum::setResourceURI(const QUrl &value) diff --git a/src/musicaudiotrack.h b/src/musicaudiotrack.h --- a/src/musicaudiotrack.h +++ b/src/musicaudiotrack.h @@ -41,7 +41,7 @@ MusicAudioTrack(bool aValid, QString aId, QString aParentId, QString aTitle, QString aArtist, QString aAlbumName, QString aAlbumArtist, int aTrackNumber, int aDiscNumber, QTime aDuration, QUrl aResourceURI, const QDateTime &fileModificationTime, QUrl aAlbumCover, int rating, bool aIsSingleDiscAlbum, - QString aGenre, QString aComposer, QString aLyricist); + QString aGenre, QString aComposer, QString aLyricist, bool aHasEmbeddedCover); MusicAudioTrack(MusicAudioTrack &&other) noexcept; @@ -161,6 +161,10 @@ bool isSingleDiscAlbum() const; + void setHasEmbeddedCover(bool value); + + bool hasEmbeddedCover() const; + private: QSharedDataPointer d; diff --git a/src/musicaudiotrack.cpp b/src/musicaudiotrack.cpp --- a/src/musicaudiotrack.cpp +++ b/src/musicaudiotrack.cpp @@ -33,16 +33,16 @@ int aTrackNumber, int aDiscNumber, QTime aDuration, QUrl aResourceURI, QDateTime fileModificationTime, QUrl aAlbumCover, int rating, bool aIsSingleDiscAlbum, QString aGenre, QString aComposer, - QString aLyricist) + QString aLyricist, bool aHasEmbeddedCover) : QSharedData(), mId(std::move(aId)), mParentId(std::move(aParentId)), mTitle(std::move(aTitle)), mArtist(std::move(aArtist)), mAlbumName(std::move(aAlbumName)), mAlbumArtist(std::move(aAlbumArtist)), mGenre(std::move(aGenre)), mComposer(std::move(aComposer)), mLyricist(std::move(aLyricist)), mResourceURI(std::move(aResourceURI)), mAlbumCover(std::move(aAlbumCover)), mFileModificationTime(std::move(fileModificationTime)), mDuration(aDuration), mTrackNumber(aTrackNumber), mDiscNumber(aDiscNumber), mRating(rating), - mIsValid(aValid), mIsSingleDiscAlbum(aIsSingleDiscAlbum) + mIsValid(aValid), mIsSingleDiscAlbum(aIsSingleDiscAlbum), mHasBooleanCover(aHasEmbeddedCover) { } @@ -96,6 +96,8 @@ bool mIsSingleDiscAlbum = true; + bool mHasBooleanCover = false; + }; MusicAudioTrack::MusicAudioTrack() : d(new MusicAudioTrackPrivate()) @@ -105,15 +107,15 @@ MusicAudioTrack::MusicAudioTrack(bool aValid, QString aId, QString aParentId, QString aTitle, QString aArtist, QString aAlbumName, QString aAlbumArtist, int aTrackNumber, int aDiscNumber, QTime aDuration, QUrl aResourceURI, const QDateTime &fileModificationTime, QUrl aAlbumCover, int rating, bool aIsSingleDiscAlbum, - QString aGenre, QString aComposer, QString aLyricist) + QString aGenre, QString aComposer, QString aLyricist, bool aHasEmbeddedCover) : d(new MusicAudioTrackPrivate(aValid, std::move(aId), std::move(aParentId), std::move(aTitle), std::move(aArtist), std::move(aAlbumName), std::move(aAlbumArtist), aTrackNumber, aDiscNumber, aDuration, std::move(aResourceURI), fileModificationTime, std::move(aAlbumCover), rating, aIsSingleDiscAlbum, std::move(aGenre), - std::move(aComposer), std::move(aLyricist))) + std::move(aComposer), std::move(aLyricist), aHasEmbeddedCover)) { } @@ -265,7 +267,11 @@ QUrl MusicAudioTrack::albumCover() const { - return d->mAlbumCover; + if (d->mAlbumCover.isValid()) { + return d->mAlbumCover; + } else { + return QUrl(QStringLiteral("image://cover/") + d->mResourceURI.toLocalFile()); + } } void MusicAudioTrack::setGenre(const QString &value) @@ -418,6 +424,16 @@ return d->mIsSingleDiscAlbum; } +void MusicAudioTrack::setHasEmbeddedCover(bool value) +{ + d->mHasBooleanCover = value; +} + +bool MusicAudioTrack::hasEmbeddedCover() const +{ + return d->mHasBooleanCover; +} + ELISALIB_EXPORT QDebug operator<<(QDebug stream, const MusicAudioTrack &data) { stream << data.title() << data.artist() << data.albumName() << data.albumArtist() << data.duration() << data.resourceURI();