Bug 380442 - Coverart saved in file is not displayed.
Summary: Coverart saved in file is not displayed.
Status: RESOLVED FIXED
Alias: None
Product: Elisa
Classification: Applications
Component: general (show other bugs)
Version: unspecified
Platform: Arch Linux Linux
: NOR normal
Target Milestone: ---
Assignee: Matthieu Gallien
URL:
Keywords:
: 390326 (view as bug list)
Depends on:
Blocks:
 
Reported: 2017-06-01 21:53 UTC by Paul Konecny
Modified: 2018-12-09 20:24 UTC (History)
1 user (show)

See Also:
Latest Commit:
Version Fixed In:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Paul Konecny 2017-06-01 21:53:09 UTC
Hi, I noticed that coverart saved in files via kid3-qt is not displayed. 
I tried this with FLAC and opus files. Is there a setting I have to check?

Cheers!
Comment 1 Matthieu Gallien 2017-06-02 10:04:37 UTC
Hello, this is a good idea.
I will need to add support for it in KFileMetaData also.
Comment 2 Paul Konecny 2017-06-04 23:47:21 UTC
Alright. I could prepare a CC licensed file for you if you need one.
Comment 3 Matthieu Gallien 2017-12-10 19:53:29 UTC
https://phabricator.kde.org/T6255 has been created to not forget this feature request.
Comment 4 Diego Gangl 2018-02-17 22:35:28 UTC
*** Bug 390326 has been marked as a duplicate of this bug. ***
Comment 5 Matthieu Gallien 2018-11-25 21:42:09 UTC
The diff https://phabricator.kde.org/D17163 is solving this bug.
Are you able to test ?
Comment 6 Paul Konecny 2018-12-09 16:41:59 UTC
Hi Matthieu, 

could you guide me through the patch process? I'm not a programmer and tried to edit the Arch PKGBUILD but it seems I'm doing something wrong. 

1. Wget the Diff to D17163.diff
2. Copied D17163.diff to all src directories
2. Edited PKGBUILD with 

prepare() {
  cd $pkgname-$pkgver
        patch -Np1 -i "${srcdir}/D17163.diff"
  mkdir -p build
}

as instructed here 
https://wiki.archlinux.org/index.php/Patching_packages

4. Run makepkg
5. This is the output I get from the patching process. 


patching file autotests/albummodeltest.cpp
Hunk #1 succeeded at 360 (offset 144 lines).
Hunk #2 succeeded at 387 (offset 144 lines).
Hunk #3 succeeded at 461 (offset 144 lines).
patching file autotests/allalbumsmodeltest.cpp
Hunk #1 succeeded at 377 (offset 174 lines).
Hunk #2 FAILED at 262.
1 out of 2 hunks FAILED -- saving rejects to file autotests/allalbumsmodeltest.cpp.rej
patching file autotests/allartistsmodeltest.cpp
Hunk #1 succeeded at 303 (offset 144 lines).
patching file autotests/alltracksmodeltest.cpp
Hunk #1 succeeded at 351 (offset 144 lines).
Hunk #2 succeeded at 414 (offset 144 lines).
Hunk #3 succeeded at 522 (offset 186 lines).
Hunk #4 succeeded at 618 (offset 186 lines).
patching file autotests/alltracksproxymodeltest.cpp
Hunk #1 succeeded at 361 (offset 144 lines).
Hunk #2 succeeded at 427 (offset 144 lines).
Hunk #3 succeeded at 540 (offset 189 lines).
Hunk #4 succeeded at 641 (offset 189 lines).
patching file autotests/databaseinterfacetest.cpp
Hunk #1 succeeded at 253 (offset 136 lines).
Hunk #2 FAILED at 207.
Hunk #3 FAILED at 303.
Hunk #4 FAILED at 398.
Hunk #5 FAILED at 493.
Hunk #6 FAILED at 540.
Hunk #7 succeeded at 352 (offset -257 lines).
Hunk #8 succeeded at 528 with fuzz 2 (offset -130 lines).
Hunk #9 succeeded at 550 with fuzz 2 (offset -129 lines).
Hunk #10 FAILED at 730.
Hunk #11 FAILED at 808.
Hunk #12 succeeded at 627 (offset -257 lines).
Hunk #13 FAILED at 934.
Hunk #14 FAILED at 955.
Hunk #15 succeeded at 833 (offset -257 lines).
Hunk #16 succeeded at 930 (offset -257 lines).
Hunk #17 succeeded at 1293 (offset -257 lines).
Hunk #18 succeeded at 1723 (offset -257 lines).
Hunk #19 succeeded at 2304 (offset -257 lines).
Hunk #20 succeeded at 2371 (offset -257 lines).
Hunk #21 succeeded at 2449 (offset -257 lines).
Hunk #22 succeeded at 2564 (offset -257 lines).
Hunk #23 succeeded at 2644 (offset -257 lines).
Hunk #24 succeeded at 2777 (offset -257 lines).
Hunk #25 succeeded at 2857 (offset -257 lines).
Hunk #26 succeeded at 2998 (offset -257 lines).
Hunk #27 succeeded at 3035 (offset -257 lines).
Hunk #28 succeeded at 3127 (offset -257 lines).
Hunk #29 succeeded at 3208 (offset -257 lines).
Hunk #30 succeeded at 3292 (offset -257 lines).
Hunk #31 succeeded at 3533 (offset -257 lines).
Hunk #32 succeeded at 3649 (offset -257 lines).
Hunk #33 succeeded at 3752 (offset -257 lines).
Hunk #34 FAILED at 4051.
Hunk #35 succeeded at 3869 (offset -257 lines).
Hunk #36 succeeded at 3900 (offset -257 lines).
Hunk #37 FAILED at 4196.
Hunk #38 FAILED at 4216.
Hunk #39 succeeded at 4014 (offset -257 lines).
Hunk #40 succeeded at 4112 (offset -257 lines).
Hunk #41 succeeded at 4218 (offset -257 lines).
Hunk #42 succeeded at 4298 (offset -257 lines).
Hunk #43 FAILED at 4713.
Hunk #44 FAILED at 4856.
14 out of 44 hunks FAILED -- saving rejects to file autotests/databaseinterfacetest.cpp.rej
can't find file to patch at input line 714
Perhaps you used the wrong -p or --strip option?
The text leading up to this was:
--------------------------
|diff --git a/autotests/databasetestdata.h b/autotests/databasetestdata.h
|--- a/autotests/databasetestdata.h
|+++ b/autotests/databasetestdata.h
--------------------------
File to patch: ^C


This is the content of allalbumsmodeltest.cpp.rej

--- autotests/allalbumsmodeltest.cpp
+++ autotests/allalbumsmodeltest.cpp
@@ -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<MusicAudioTrack>();
         newTracks.push_back(newTrack);
 

This is the content of databaseinterfacetest.cpp.rej
--- autotests/databaseinterfacetest.cpp
+++ autotests/databaseinterfacetest.cpp
@@ -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<MusicAudioTrack>();
         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<MusicAudioTrack>();
         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<MusicAudioTrack>();
         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<MusicAudioTrack>();
         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<MusicAudioTrack>();
         newTracks.push_back(newTrack);
 
@@ -730,19 +732,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"));
@@ -808,6 +810,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));
@@ -934,6 +937,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));
@@ -955,6 +959,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"));
 
@@ -4051,15 +4056,16 @@
         QCOMPARE(firstTrack.composer(), QStringLiteral("composer1"));
         QCOMPARE(firstTrack.lyricist(), QStringLiteral("lyricist1"));
         QCOMPARE(firstTrack.albumId(), qulonglong(1));
+        QCOMPARE(firstTrack.hasEmbeddedCover(), true);
 
         auto newTracks2 = QList<MusicAudioTrack>();
 
         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"));
@@ -4196,6 +4202,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));
@@ -4216,6 +4223,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"));
 
@@ -4713,7 +4721,7 @@
 
         auto newTrack = MusicAudioTrack{true, QStringLiteral("$23"), QStringLiteral("0"), {},
         {}, {}, {}, {}, {}, {}, {QUrl::fromLocalFile(QStringLiteral("file:///$23"))},
-                QDateTime::fromMSecsSinceEpoch(23), {}, {}, {}, {}, {}, {}};
+                QDateTime::fromMSecsSinceEpoch(23), {}, {}, {}, {}, {}, {}, false};
         auto newTracks = QList<MusicAudioTrack>();
         newTracks.push_back(newTrack);
         newTracks.push_back(newTrack);
@@ -4856,7 +4864,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<MusicAudioTrack>();
         newTracks.push_back(newTrack);
 



Thanks in advance and merci!
Paul
Comment 7 Matthieu Gallien 2018-12-09 19:49:13 UTC
Git commit f97cce53a7d6d7846ca2cc1315bf9607a5df26c7 by Matthieu Gallien.
Committed on 09/12/2018 at 19:49.
Pushed by mgallien into branch 'master'.

Display embedded cover images

Summary:
introduce EmbeddedCoverageImageProvider to get access to embedded covers

store the fact that tracks have an embedded cover image in database

when importing files, check and store the presence of embedded cover

makes MusicAlbum and MusicAudioTrack use the embedded cover images

Test Plan: embedded covers are shown. albums without a cover but with tracks havong embedded cover are now showing a nice cover

Tags: #elisa

Differential Revision: https://phabricator.kde.org/D17163

M  +3    -3    autotests/albummodeltest.cpp
M  +2    -2    autotests/allalbumsmodeltest.cpp
M  +1    -1    autotests/allartistsmodeltest.cpp
M  +4    -4    autotests/alltracksmodeltest.cpp
M  +4    -4    autotests/alltracksproxymodeltest.cpp
M  +69   -61   autotests/databaseinterfacetest.cpp
M  +23   -23   autotests/databasetestdata.h
M  +1    -1    autotests/trackslistenertest.cpp
M  +1    -0    src/CMakeLists.txt
M  +18   -0    src/abstractfile/abstractfilelisting.cpp
M  +2    -0    src/abstractfile/abstractfilelisting.h
M  +2    -1    src/baloo/localbaloofilelisting.cpp
M  +25   -12   src/databaseinterface.cpp
M  +2    -0    src/elisaqmlplugin.cpp
A  +66   -0    src/embeddedcoverageimageprovider.cpp     [License: LGPL (v3+)]
A  +38   -0    src/embeddedcoverageimageprovider.h     [License: LGPL (v3+)]
M  +11   -1    src/musicalbum.cpp
M  +21   -5    src/musicaudiotrack.cpp
M  +5    -1    src/musicaudiotrack.h

https://commits.kde.org/elisa/f97cce53a7d6d7846ca2cc1315bf9607a5df26c7
Comment 8 Matthieu Gallien 2018-12-09 20:14:02 UTC
(In reply to Paul Konecny from comment #6)
> Hi Matthieu, 
> 
> could you guide me through the patch process? I'm not a programmer and tried
> to edit the Arch PKGBUILD but it seems I'm doing something wrong. 

I have landed the diff request to help you test it.
As soon as the nightly flatpak is built, you should be able to test.

I am not very familiar with the way Arch PKGBUILD works. Usually, I test diff request via git repository and the Arcanist command line tool from Phabricator. You may ask for help in Arch forums ?

Thanks for your feedback
Comment 9 Paul Konecny 2018-12-09 20:24:41 UTC
Hi Matthieu, 

thanks for pushing it to master. I can confirm this fixed the issue =)

PKGBUILD is roughly Archs answer to PPAs. They are basically build scripts that pull source, build and install packages so you can easily manage them with a package tool like pacman. 

I was able to use the git version for this
https://aur.archlinux.org/packages/elisa-git/

Anyway, thank you so much for this fix. I'll start enjoying my collection with elisa right away :)

Cheers, 
Paul