AlbumCoverLoader: Fix loading existing album covers from disk

This commit is contained in:
Jonas Kvinge
2023-06-29 00:44:00 +02:00
parent b9c7510946
commit 5f4d6dffef
5 changed files with 20 additions and 17 deletions

View File

@@ -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()) { 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(); task->song.InitArtManual();
if (task->song.art_manual_is_valid()) { 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(); task->art_manual = task->song.art_manual();
} }
if (task->song.url().isLocalFile()) { if (task->song.url().isLocalFile()) {
task->song.InitArtAutomatic(); task->song.InitArtAutomatic();
if (task->song.art_automatic_is_valid()) { 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(); task->art_automatic = task->song.art_automatic();
} }
} }

View File

@@ -69,7 +69,7 @@ class AlbumCoverLoader : public QObject {
private: private:
class Task { class Task {
public: 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; quint64 id;
bool success; bool success;
@@ -90,7 +90,8 @@ class AlbumCoverLoader : public QObject {
Song song; Song song;
AlbumCoverImageResult album_cover; AlbumCoverImageResult album_cover;
AlbumCoverLoaderResult::Type result_type; AlbumCoverLoaderResult::Type result_type;
bool art_updated; QUrl art_manual_updated;
QUrl art_automatic_updated;
int redirects; int redirects;
}; };
using TaskPtr = shared_ptr<Task>; using TaskPtr = shared_ptr<Task>;
@@ -110,7 +111,6 @@ class AlbumCoverLoader : public QObject {
private: private:
quint64 EnqueueTask(TaskPtr task); quint64 EnqueueTask(TaskPtr task);
void ProcessTask(TaskPtr task); void ProcessTask(TaskPtr task);
void NextState(TaskPtr task);
void InitArt(TaskPtr task); void InitArt(TaskPtr task);
LoadImageResult LoadImage(TaskPtr task, const AlbumCoverLoaderOptions::Type &type); LoadImageResult LoadImage(TaskPtr task, const AlbumCoverLoaderOptions::Type &type);
LoadImageResult LoadEmbeddedImage(TaskPtr task); LoadImageResult LoadEmbeddedImage(TaskPtr task);

View File

@@ -42,21 +42,21 @@ class AlbumCoverLoaderResult {
const Type _type = Type::None, const Type _type = Type::None,
AlbumCoverImageResult _album_cover = AlbumCoverImageResult(), AlbumCoverImageResult _album_cover = AlbumCoverImageResult(),
const QImage &_image_scaled = QImage(), const QImage &_image_scaled = QImage(),
const bool _remote_cover = false, const QUrl _art_manual_updated = QUrl(),
const bool _updated = false) : const QUrl _art_automatic_updated = QUrl()) :
success(_success), success(_success),
type(_type), type(_type),
album_cover(_album_cover), album_cover(_album_cover),
image_scaled(_image_scaled), image_scaled(_image_scaled),
remote_cover(_remote_cover), art_manual_updated(_art_manual_updated),
updated(_updated) {} art_automatic_updated(_art_automatic_updated) {}
bool success; bool success;
Type type; Type type;
AlbumCoverImageResult album_cover; AlbumCoverImageResult album_cover;
QImage image_scaled; QImage image_scaled;
bool remote_cover; QUrl art_manual_updated;
bool updated; QUrl art_automatic_updated;
QUrl temp_cover_url; QUrl temp_cover_url;
}; };

View File

@@ -46,8 +46,8 @@ CurrentAlbumCoverLoader::CurrentAlbumCoverLoader(Application *app, QObject *pare
options_.desired_scaled_size = QSize(120, 120); options_.desired_scaled_size = QSize(120, 120);
options_.default_cover = ":/pictures/cdcase.png"; 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_->playlist_manager(), &PlaylistManager::CurrentSongChanged, this, &CurrentAlbumCoverLoader::LoadAlbumCover);
QObject::connect(app_->album_cover_loader(), &AlbumCoverLoader::AlbumCoverLoaded, this, &CurrentAlbumCoverLoader::AlbumCoverReady);
ReloadSettingsAsync(); 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; if (id != id_) return;
id_ = 0; id_ = 0;
@@ -117,8 +117,11 @@ void CurrentAlbumCoverLoader::TempAlbumCoverLoaded(const quint64 id, AlbumCoverL
} }
} }
if (result.updated) { if (result.art_manual_updated.isValid()) {
last_song_.set_art_manual(result.album_cover.cover_url); 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); emit AlbumCoverLoaded(last_song_, result);

View File

@@ -59,7 +59,7 @@ class CurrentAlbumCoverLoader : public QObject {
void ThumbnailLoaded(const Song &song, const QUrl &thumbnail_uri, const QImage &image); void ThumbnailLoaded(const Song &song, const QUrl &thumbnail_uri, const QImage &image);
private slots: private slots:
void TempAlbumCoverLoaded(const quint64 id, AlbumCoverLoaderResult result); void AlbumCoverReady(const quint64 id, AlbumCoverLoaderResult result);
private: private:
Application *app_; Application *app_;