From 5f4d6dffef3054b746905718a0fc3dc34c9c5bfe Mon Sep 17 00:00:00 2001 From: Jonas Kvinge Date: Thu, 29 Jun 2023 00:44:00 +0200 Subject: [PATCH] AlbumCoverLoader: Fix loading existing album covers from disk --- src/covermanager/albumcoverloader.cpp | 6 +++--- src/covermanager/albumcoverloader.h | 6 +++--- src/covermanager/albumcoverloaderresult.h | 12 ++++++------ src/covermanager/currentalbumcoverloader.cpp | 11 +++++++---- src/covermanager/currentalbumcoverloader.h | 2 +- 5 files changed, 20 insertions(+), 17 deletions(-) diff --git a/src/covermanager/albumcoverloader.cpp b/src/covermanager/albumcoverloader.cpp index 9d583e418..96ca901ed 100644 --- a/src/covermanager/albumcoverloader.cpp +++ b/src/covermanager/albumcoverloader.cpp @@ -227,7 +227,7 @@ void AlbumCoverLoader::FinishTask(TaskPtr task, const AlbumCoverLoaderResult::Ty } } - emit AlbumCoverLoaded(task->id, AlbumCoverLoaderResult(task->success, task->result_type, task->album_cover, image_scaled, task->art_updated)); + emit AlbumCoverLoaded(task->id, AlbumCoverLoaderResult(task->success, task->result_type, task->album_cover, image_scaled, task->art_manual_updated, task->art_automatic_updated)); } @@ -237,13 +237,13 @@ void AlbumCoverLoader::InitArt(TaskPtr task) { if (task->song.is_valid() && (task->song.source() == Song::Source::LocalFile || task->song.is_radio()) && !task->song.art_manual_is_valid() && !task->song.art_automatic_is_valid()) { task->song.InitArtManual(); if (task->song.art_manual_is_valid()) { - task->art_updated = true; + task->art_manual_updated = task->song.art_manual(); task->art_manual = task->song.art_manual(); } if (task->song.url().isLocalFile()) { task->song.InitArtAutomatic(); if (task->song.art_automatic_is_valid()) { - task->art_updated = true; + task->art_automatic_updated = task->song.art_automatic(); task->art_automatic = task->song.art_automatic(); } } diff --git a/src/covermanager/albumcoverloader.h b/src/covermanager/albumcoverloader.h index 9493fae21..3ff402e4b 100644 --- a/src/covermanager/albumcoverloader.h +++ b/src/covermanager/albumcoverloader.h @@ -69,7 +69,7 @@ class AlbumCoverLoader : public QObject { private: class Task { public: - explicit Task() : id(0), success(false), art_embedded(false), art_unset(false), result_type(AlbumCoverLoaderResult::Type::None), art_updated(false), redirects(0) {} + explicit Task() : id(0), success(false), art_embedded(false), art_unset(false), song_source(Song::Source::Unknown), result_type(AlbumCoverLoaderResult::Type::None), redirects(0) {} quint64 id; bool success; @@ -90,7 +90,8 @@ class AlbumCoverLoader : public QObject { Song song; AlbumCoverImageResult album_cover; AlbumCoverLoaderResult::Type result_type; - bool art_updated; + QUrl art_manual_updated; + QUrl art_automatic_updated; int redirects; }; using TaskPtr = shared_ptr; @@ -110,7 +111,6 @@ class AlbumCoverLoader : public QObject { private: quint64 EnqueueTask(TaskPtr task); void ProcessTask(TaskPtr task); - void NextState(TaskPtr task); void InitArt(TaskPtr task); LoadImageResult LoadImage(TaskPtr task, const AlbumCoverLoaderOptions::Type &type); LoadImageResult LoadEmbeddedImage(TaskPtr task); diff --git a/src/covermanager/albumcoverloaderresult.h b/src/covermanager/albumcoverloaderresult.h index ffd623f20..c770a2a26 100644 --- a/src/covermanager/albumcoverloaderresult.h +++ b/src/covermanager/albumcoverloaderresult.h @@ -42,21 +42,21 @@ class AlbumCoverLoaderResult { const Type _type = Type::None, AlbumCoverImageResult _album_cover = AlbumCoverImageResult(), const QImage &_image_scaled = QImage(), - const bool _remote_cover = false, - const bool _updated = false) : + const QUrl _art_manual_updated = QUrl(), + const QUrl _art_automatic_updated = QUrl()) : success(_success), type(_type), album_cover(_album_cover), image_scaled(_image_scaled), - remote_cover(_remote_cover), - updated(_updated) {} + art_manual_updated(_art_manual_updated), + art_automatic_updated(_art_automatic_updated) {} bool success; Type type; AlbumCoverImageResult album_cover; QImage image_scaled; - bool remote_cover; - bool updated; + QUrl art_manual_updated; + QUrl art_automatic_updated; QUrl temp_cover_url; }; diff --git a/src/covermanager/currentalbumcoverloader.cpp b/src/covermanager/currentalbumcoverloader.cpp index 529fdefae..4e58f0438 100644 --- a/src/covermanager/currentalbumcoverloader.cpp +++ b/src/covermanager/currentalbumcoverloader.cpp @@ -46,8 +46,8 @@ CurrentAlbumCoverLoader::CurrentAlbumCoverLoader(Application *app, QObject *pare options_.desired_scaled_size = QSize(120, 120); options_.default_cover = ":/pictures/cdcase.png"; - QObject::connect(app_->album_cover_loader(), &AlbumCoverLoader::AlbumCoverLoaded, this, &CurrentAlbumCoverLoader::TempAlbumCoverLoaded); QObject::connect(app_->playlist_manager(), &PlaylistManager::CurrentSongChanged, this, &CurrentAlbumCoverLoader::LoadAlbumCover); + QObject::connect(app_->album_cover_loader(), &AlbumCoverLoader::AlbumCoverLoaded, this, &CurrentAlbumCoverLoader::AlbumCoverReady); ReloadSettingsAsync(); @@ -79,7 +79,7 @@ void CurrentAlbumCoverLoader::LoadAlbumCover(const Song &song) { } -void CurrentAlbumCoverLoader::TempAlbumCoverLoaded(const quint64 id, AlbumCoverLoaderResult result) { +void CurrentAlbumCoverLoader::AlbumCoverReady(const quint64 id, AlbumCoverLoaderResult result) { if (id != id_) return; id_ = 0; @@ -117,8 +117,11 @@ void CurrentAlbumCoverLoader::TempAlbumCoverLoaded(const quint64 id, AlbumCoverL } } - if (result.updated) { - last_song_.set_art_manual(result.album_cover.cover_url); + if (result.art_manual_updated.isValid()) { + last_song_.set_art_manual(result.art_manual_updated); + } + if (result.art_automatic_updated.isValid()) { + last_song_.set_art_automatic(result.art_automatic_updated); } emit AlbumCoverLoaded(last_song_, result); diff --git a/src/covermanager/currentalbumcoverloader.h b/src/covermanager/currentalbumcoverloader.h index b9ef6201d..18b75609c 100644 --- a/src/covermanager/currentalbumcoverloader.h +++ b/src/covermanager/currentalbumcoverloader.h @@ -59,7 +59,7 @@ class CurrentAlbumCoverLoader : public QObject { void ThumbnailLoaded(const Song &song, const QUrl &thumbnail_uri, const QImage &image); private slots: - void TempAlbumCoverLoaded(const quint64 id, AlbumCoverLoaderResult result); + void AlbumCoverReady(const quint64 id, AlbumCoverLoaderResult result); private: Application *app_;