From 3e6029d33c57c95ed0e6e37055aa1ae12fe9f7b4 Mon Sep 17 00:00:00 2001 From: Jonas Kvinge Date: Sun, 7 Mar 2021 05:43:56 +0100 Subject: [PATCH] Clear art automatic when embedded cover is deleted --- src/covermanager/albumcoverchoicecontroller.cpp | 14 +++++++++----- src/covermanager/albumcoverchoicecontroller.h | 4 ++-- src/covermanager/albumcoverloader.cpp | 13 +++++++------ src/covermanager/albumcoverloader.h | 4 ++-- 4 files changed, 20 insertions(+), 15 deletions(-) diff --git a/src/covermanager/albumcoverchoicecontroller.cpp b/src/covermanager/albumcoverchoicecontroller.cpp index 576630b66..2be93bec9 100644 --- a/src/covermanager/albumcoverchoicecontroller.cpp +++ b/src/covermanager/albumcoverchoicecontroller.cpp @@ -336,12 +336,12 @@ AlbumCoverImageResult AlbumCoverChoiceController::SearchForImage(Song *song) { } -QUrl AlbumCoverChoiceController::UnsetCover(Song *song) { +QUrl AlbumCoverChoiceController::UnsetCover(Song *song, const bool clear_art_automatic) { if (!song->url().isLocalFile() || song->effective_albumartist().isEmpty() || song->album().isEmpty()) return QUrl(); QUrl cover_url = QUrl::fromLocalFile(Song::kManuallyUnsetCover); - SaveArtManualToSong(song, cover_url); + SaveArtManualToSong(song, cover_url, clear_art_automatic); return cover_url; @@ -352,6 +352,7 @@ void AlbumCoverChoiceController::ClearCover(Song *song, const bool clear_art_aut if (!song->url().isLocalFile() || song->effective_albumartist().isEmpty() || song->album().isEmpty()) return; song->clear_art_manual(); + if (clear_art_automatic) song->clear_art_automatic(); SaveArtManualToSong(song, QUrl(), clear_art_automatic); } @@ -400,7 +401,7 @@ bool AlbumCoverChoiceController::DeleteCover(Song *song, const bool manually_uns else song->clear_art_manual(); if (success) { - if (manually_unset) UnsetCover(song); + if (manually_unset) UnsetCover(song, true); else ClearCover(song, true); } @@ -758,11 +759,14 @@ QUrl AlbumCoverChoiceController::SaveCoverAutomatic(Song *song, const AlbumCover } -void AlbumCoverChoiceController::SaveEmbeddedCoverAsyncFinished(quint64 id, const bool success) { +void AlbumCoverChoiceController::SaveEmbeddedCoverAsyncFinished(quint64 id, const bool success, const bool cleared) { if (!cover_save_tasks_.contains(id)) return; Song song = cover_save_tasks_.take(id); - if (success) SaveArtAutomaticToSong(&song, QUrl::fromLocalFile(Song::kEmbeddedCover)); + if (success) { + if (cleared) SaveArtAutomaticToSong(&song, QUrl()); + else SaveArtAutomaticToSong(&song, QUrl::fromLocalFile(Song::kEmbeddedCover)); + } } diff --git a/src/covermanager/albumcoverchoicecontroller.h b/src/covermanager/albumcoverchoicecontroller.h index 8f13e9e00..0de29ddb7 100644 --- a/src/covermanager/albumcoverchoicecontroller.h +++ b/src/covermanager/albumcoverchoicecontroller.h @@ -116,7 +116,7 @@ class AlbumCoverChoiceController : public QWidget { AlbumCoverImageResult SearchForImage(Song *song); // Returns a path which indicates that the cover has been unset manually. - QUrl UnsetCover(Song *song); + QUrl UnsetCover(Song *song, const bool clear_art_automatic = false); // Clears any album cover art associated with the song. void ClearCover(Song *song, const bool clear_art_automatic = false); @@ -154,7 +154,7 @@ class AlbumCoverChoiceController : public QWidget { private slots: void AlbumCoverFetched(const quint64 id, const AlbumCoverImageResult &result, const CoverSearchStatistics &statistics); - void SaveEmbeddedCoverAsyncFinished(quint64 id, const bool success); + void SaveEmbeddedCoverAsyncFinished(quint64 id, const bool success, const bool cleared); signals: void AutomaticCoverSearchDone(); diff --git a/src/covermanager/albumcoverloader.cpp b/src/covermanager/albumcoverloader.cpp index 3f840fa32..601831d87 100644 --- a/src/covermanager/albumcoverloader.cpp +++ b/src/covermanager/albumcoverloader.cpp @@ -595,7 +595,8 @@ void AlbumCoverLoader::SaveEmbeddedCover(const qint64 id, const QString song_fil TagReaderReply *reply = TagReaderClient::Instance()->SaveEmbeddedArt(song_filename, image_data); tagreader_save_embedded_art_requests_.insert(id, reply); - QObject::connect(reply, &TagReaderReply::Finished, this, [this, id, reply]() { SaveEmbeddedArtFinished(id, reply); }, Qt::QueuedConnection); + const bool clear = image_data.isEmpty(); + QObject::connect(reply, &TagReaderReply::Finished, this, [this, id, reply, clear]() { SaveEmbeddedArtFinished(id, reply, clear); }, Qt::QueuedConnection); } @@ -620,7 +621,7 @@ void AlbumCoverLoader::SaveEmbeddedCover(const qint64 id, const QString song_fil QFile file(cover_filename); if (file.size() >= 209715200 || !file.open(QIODevice::ReadOnly)) { // Max 200 MB. - emit SaveEmbeddedCoverAsyncFinished(id, false); + emit SaveEmbeddedCoverAsyncFinished(id, false, false); return; } @@ -652,7 +653,7 @@ void AlbumCoverLoader::SaveEmbeddedCover(const qint64 id, const QList urls } } - emit SaveEmbeddedCoverAsyncFinished(id, false); + emit SaveEmbeddedCoverAsyncFinished(id, false, image.isNull()); } @@ -661,7 +662,7 @@ void AlbumCoverLoader::SaveEmbeddedCover(const qint64 id, const QList urls QFile file(cover_filename); if (file.size() >= 209715200 || !file.open(QIODevice::ReadOnly)) { // Max 200 MB. - emit SaveEmbeddedCoverAsyncFinished(id, false); + emit SaveEmbeddedCoverAsyncFinished(id, false, false); return; } @@ -679,14 +680,14 @@ void AlbumCoverLoader::SaveEmbeddedCover(const qint64 id, const QList urls } -void AlbumCoverLoader::SaveEmbeddedArtFinished(const qint64 id, TagReaderReply *reply) { +void AlbumCoverLoader::SaveEmbeddedArtFinished(const qint64 id, TagReaderReply *reply, const bool cleared) { if (tagreader_save_embedded_art_requests_.contains(id)) { tagreader_save_embedded_art_requests_.remove(id, reply); } if (!tagreader_save_embedded_art_requests_.contains(id)) { - emit SaveEmbeddedCoverAsyncFinished(id, reply->is_successful()); + emit SaveEmbeddedCoverAsyncFinished(id, reply->is_successful(), cleared); } metaObject()->invokeMethod(reply, "deleteLater", Qt::QueuedConnection); diff --git a/src/covermanager/albumcoverloader.h b/src/covermanager/albumcoverloader.h index 9cb60f398..ecbb667df 100644 --- a/src/covermanager/albumcoverloader.h +++ b/src/covermanager/albumcoverloader.h @@ -91,7 +91,7 @@ class AlbumCoverLoader : public QObject { signals: void ExitFinished(); void AlbumCoverLoaded(quint64 id, AlbumCoverLoaderResult result); - void SaveEmbeddedCoverAsyncFinished(quint64 id, bool success); + void SaveEmbeddedCoverAsyncFinished(quint64 id, bool success, bool cleared); protected slots: void Exit(); @@ -105,7 +105,7 @@ class AlbumCoverLoader : public QObject { void SaveEmbeddedCover(const qint64 id, const QList urls, const QString &cover_filename); void SaveEmbeddedCover(const qint64 id, const QList urls, const QByteArray &image_data); - void SaveEmbeddedArtFinished(const qint64 id, TagReaderReply *reply); + void SaveEmbeddedArtFinished(const qint64 id, TagReaderReply *reply, const bool cleared); protected: