Allow to pick up a 'Other' image if no 'Front' or 'Media' image is found, fixes #718

This commit is contained in:
emeric
2025-09-13 16:02:47 +02:00
parent dd3ac60b0d
commit 9560bdae2b
2 changed files with 20 additions and 8 deletions
@@ -508,9 +508,9 @@ namespace lms::scanner
_scanSteps.emplace_back(std::make_unique<ScanStepAssociatePlayListTracks>(params)); _scanSteps.emplace_back(std::make_unique<ScanStepAssociatePlayListTracks>(params));
_scanSteps.emplace_back(std::make_unique<ScanStepUpdateLibraryFields>(params)); _scanSteps.emplace_back(std::make_unique<ScanStepUpdateLibraryFields>(params));
_scanSteps.emplace_back(std::make_unique<ScanStepAssociateReleaseImages>(params)); _scanSteps.emplace_back(std::make_unique<ScanStepAssociateReleaseImages>(params));
_scanSteps.emplace_back(std::make_unique<ScanStepAssociateArtistImages>(params)); // must come after ScanStepAssociateReleaseImages _scanSteps.emplace_back(std::make_unique<ScanStepAssociateArtistImages>(params)); // must come after ScanStepAssociateReleaseImages (because and artist image can fallback on a release image)
_scanSteps.emplace_back(std::make_unique<ScanStepAssociateMediumImages>(params)); // must come after ScanStepAssociateReleaseImages _scanSteps.emplace_back(std::make_unique<ScanStepAssociateMediumImages>(params)); // must come after ScanStepAssociateReleaseImages (because and medium image can fallback on a release image)
_scanSteps.emplace_back(std::make_unique<ScanStepAssociateTrackImages>(params)); // must come after ScanStepAssociateMediumImages and ScanStepAssociateReleaseImages _scanSteps.emplace_back(std::make_unique<ScanStepAssociateTrackImages>(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<ScanStepAssociateExternalLyrics>(params)); _scanSteps.emplace_back(std::make_unique<ScanStepAssociateExternalLyrics>(params));
_scanSteps.emplace_back(std::make_unique<ScanStepRemoveOrphanedDbEntries>(params)); _scanSteps.emplace_back(std::make_unique<ScanStepRemoveOrphanedDbEntries>(params));
_scanSteps.emplace_back(std::make_unique<ScanStepCompact>(params)); _scanSteps.emplace_back(std::make_unique<ScanStepCompact>(params));
@@ -151,7 +151,7 @@ namespace lms::scanner
if (artwork) if (artwork)
return artwork; return artwork;
// Fallback on embedded media image // Fallback on embedded Media image
{ {
db::TrackEmbeddedImage::FindParameters params; db::TrackEmbeddedImage::FindParameters params;
params.setRelease(release->getId()); 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; return artwork;
} }
@@ -282,7 +294,7 @@ namespace lms::scanner
.releaseImageFileNames = _releaseImageFileNames, .releaseImageFileNames = _releaseImageFileNames,
}; };
ReleaseArtworkAssociationContainer artistArtworkAssociations; ReleaseArtworkAssociationContainer releaseArtworkAssociations;
auto processJobsDone = [&](std::span<std::unique_ptr<core::IJob>> jobs) { auto processJobsDone = [&](std::span<std::unique_ptr<core::IJob>> jobs) {
if (_abortScan) if (_abortScan)
return; return;
@@ -292,12 +304,12 @@ namespace lms::scanner
const auto& associationJob{ static_cast<const ComputeReleaseArtworkAssociationsJob&>(*job) }; const auto& associationJob{ static_cast<const ComputeReleaseArtworkAssociationsJob&>(*job) };
const auto& artistAssociations{ associationJob.getAssociations() }; 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(); context.currentStepStats.processedElems += associationJob.getProcessedReleaseCount();
} }
updateReleasePreferredArtworks(session, artistArtworkAssociations, true); updateReleasePreferredArtworks(session, releaseArtworkAssociations, true);
_progressCallback(context.currentStepStats); _progressCallback(context.currentStepStats);
}; };
@@ -311,6 +323,6 @@ namespace lms::scanner
queue.finish(); queue.finish();
// process all remaining associations // process all remaining associations
updateReleasePreferredArtworks(session, artistArtworkAssociations, false); updateReleasePreferredArtworks(session, releaseArtworkAssociations, false);
} }
} // namespace lms::scanner } // namespace lms::scanner