From 9560bdae2bb75ff3783c24b9a3bdbfb132ab85f0 Mon Sep 17 00:00:00 2001 From: emeric Date: Sat, 13 Sep 2025 16:02:47 +0200 Subject: [PATCH] Allow to pick up a 'Other' image if no 'Front' or 'Media' image is found, fixes #718 --- .../services/scanner/impl/ScannerService.cpp | 6 ++--- .../steps/ScanStepAssociateReleaseImages.cpp | 22 ++++++++++++++----- 2 files changed, 20 insertions(+), 8 deletions(-) diff --git a/src/libs/services/scanner/impl/ScannerService.cpp b/src/libs/services/scanner/impl/ScannerService.cpp index d80090ad..d29bdb70 100644 --- a/src/libs/services/scanner/impl/ScannerService.cpp +++ b/src/libs/services/scanner/impl/ScannerService.cpp @@ -508,9 +508,9 @@ namespace lms::scanner _scanSteps.emplace_back(std::make_unique(params)); _scanSteps.emplace_back(std::make_unique(params)); _scanSteps.emplace_back(std::make_unique(params)); - _scanSteps.emplace_back(std::make_unique(params)); // must come after ScanStepAssociateReleaseImages - _scanSteps.emplace_back(std::make_unique(params)); // must come after ScanStepAssociateReleaseImages - _scanSteps.emplace_back(std::make_unique(params)); // must come after ScanStepAssociateMediumImages and ScanStepAssociateReleaseImages + _scanSteps.emplace_back(std::make_unique(params)); // must come after ScanStepAssociateReleaseImages (because and artist image can fallback on a release image) + _scanSteps.emplace_back(std::make_unique(params)); // must come after ScanStepAssociateReleaseImages (because and medium image can fallback on a release image) + _scanSteps.emplace_back(std::make_unique(params)); // must come after ScanStepAssociateMediumImages and ScanStepAssociateReleaseImages (because and track image can fallback on a medium or release image) _scanSteps.emplace_back(std::make_unique(params)); _scanSteps.emplace_back(std::make_unique(params)); _scanSteps.emplace_back(std::make_unique(params)); diff --git a/src/libs/services/scanner/impl/steps/ScanStepAssociateReleaseImages.cpp b/src/libs/services/scanner/impl/steps/ScanStepAssociateReleaseImages.cpp index 158fba59..1b7038c9 100644 --- a/src/libs/services/scanner/impl/steps/ScanStepAssociateReleaseImages.cpp +++ b/src/libs/services/scanner/impl/steps/ScanStepAssociateReleaseImages.cpp @@ -151,7 +151,7 @@ namespace lms::scanner if (artwork) return artwork; - // Fallback on embedded media image + // Fallback on embedded Media image { db::TrackEmbeddedImage::FindParameters params; params.setRelease(release->getId()); @@ -163,6 +163,18 @@ namespace lms::scanner }); } + // Fallback on embedded Other image, as some tracks may be badly tagged + { + db::TrackEmbeddedImage::FindParameters params; + params.setRelease(release->getId()); + params.setImageType(db::ImageType::Other); + params.setSortMethod(db::TrackEmbeddedImageSortMethod::DiscNumberThenTrackNumberThenSizeDesc); + db::TrackEmbeddedImage::find(session, params, [&](const db::TrackEmbeddedImage::pointer& image) { + if (!artwork) + artwork = db::Artwork::find(session, image->getId()); + }); + } + return artwork; } @@ -282,7 +294,7 @@ namespace lms::scanner .releaseImageFileNames = _releaseImageFileNames, }; - ReleaseArtworkAssociationContainer artistArtworkAssociations; + ReleaseArtworkAssociationContainer releaseArtworkAssociations; auto processJobsDone = [&](std::span> jobs) { if (_abortScan) return; @@ -292,12 +304,12 @@ namespace lms::scanner const auto& associationJob{ static_cast(*job) }; const auto& artistAssociations{ associationJob.getAssociations() }; - artistArtworkAssociations.insert(std::end(artistArtworkAssociations), std::cbegin(artistAssociations), std::cend(artistAssociations)); + releaseArtworkAssociations.insert(std::end(releaseArtworkAssociations), std::cbegin(artistAssociations), std::cend(artistAssociations)); context.currentStepStats.processedElems += associationJob.getProcessedReleaseCount(); } - updateReleasePreferredArtworks(session, artistArtworkAssociations, true); + updateReleasePreferredArtworks(session, releaseArtworkAssociations, true); _progressCallback(context.currentStepStats); }; @@ -311,6 +323,6 @@ namespace lms::scanner queue.finish(); // process all remaining associations - updateReleasePreferredArtworks(session, artistArtworkAssociations, false); + updateReleasePreferredArtworks(session, releaseArtworkAssociations, false); } } // namespace lms::scanner