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<ScanStepUpdateLibraryFields>(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<ScanStepAssociateMediumImages>(params)); // must come after ScanStepAssociateReleaseImages
_scanSteps.emplace_back(std::make_unique<ScanStepAssociateTrackImages>(params)); // must come after ScanStepAssociateMediumImages and 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 (because and medium image can fallback on a release image)
_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<ScanStepRemoveOrphanedDbEntries>(params));
_scanSteps.emplace_back(std::make_unique<ScanStepCompact>(params));
@@ -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<std::unique_ptr<core::IJob>> jobs) {
if (_abortScan)
return;
@@ -292,12 +304,12 @@ namespace lms::scanner
const auto& associationJob{ static_cast<const ComputeReleaseArtworkAssociationsJob&>(*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