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()) {
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();
}
}

View File

@ -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<Task>;
@ -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);

View File

@ -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;
};

View File

@ -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);

View File

@ -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_;