From 33f4cf47ea998df175e290ac34bd283d24ca94ac Mon Sep 17 00:00:00 2001 From: emeric Date: Wed, 30 Oct 2024 18:40:51 +0100 Subject: [PATCH] More relaxed search for artist images, fixes #538 --- .../impl/ScanStepAssociateArtistImages.cpp | 45 +++++++++++++------ .../impl/ScanStepCheckForRemovedFiles.cpp | 6 +-- 2 files changed, 34 insertions(+), 17 deletions(-) diff --git a/src/libs/services/scanner/impl/ScanStepAssociateArtistImages.cpp b/src/libs/services/scanner/impl/ScanStepAssociateArtistImages.cpp index 79aed040..33729986 100644 --- a/src/libs/services/scanner/impl/ScanStepAssociateArtistImages.cpp +++ b/src/libs/services/scanner/impl/ScanStepAssociateArtistImages.cpp @@ -108,27 +108,44 @@ namespace lms::scanner releasePaths.insert(directory->getAbsolutePath()); }); - // Expect layout like this: - // ReleaseArtist/Release/Tracks' - // /artist.jpg - // /someOtherUserConfiguredArtistFile.jpg if (!releasePaths.empty()) - { - const std::filesystem::path artistPath{ releasePaths.size() == 1 ? releasePaths.begin()->parent_path() : core::pathUtils::getLongestCommonPath(std::cbegin(releasePaths), std::cend(releasePaths)) }; - image = findImageInDirectory(searchContext, artistPath); - } - - if (!image) { // Expect layout like this: // ReleaseArtist/Release/Tracks' - // /artist.jpg - // /someOtherUserConfiguredArtistFile.jpg - for (const std::filesystem::path& releasePath : releasePaths) + // /artist.jpg + // /someOtherUserConfiguredArtistFile.jpg + // + // Or: + // ReleaseArtist/SomeGrouping/Release/Tracks' + // /artist.jpg + // /someOtherUserConfiguredArtistFile.jpg + // + std::filesystem::path directoryToInspect{ core::pathUtils::getLongestCommonPath(std::cbegin(releasePaths), std::cend(releasePaths)) }; + while (true) { - image = findImageInDirectory(searchContext, releasePath); + image = findImageInDirectory(searchContext, directoryToInspect); if (image) break; + + std::filesystem::path parentPath{ directoryToInspect.parent_path() }; + if (parentPath == directoryToInspect) + break; + + directoryToInspect = parentPath; + } + + if (!image) + { + // Expect layout like this: + // ReleaseArtist/Release/Tracks' + // /artist.jpg + // /someOtherUserConfiguredArtistFile.jpg + for (const std::filesystem::path& releasePath : releasePaths) + { + image = findImageInDirectory(searchContext, releasePath); + if (image) + break; + } } } } diff --git a/src/libs/services/scanner/impl/ScanStepCheckForRemovedFiles.cpp b/src/libs/services/scanner/impl/ScanStepCheckForRemovedFiles.cpp index 888ccc2e..7360a0aa 100644 --- a/src/libs/services/scanner/impl/ScanStepCheckForRemovedFiles.cpp +++ b/src/libs/services/scanner/impl/ScanStepCheckForRemovedFiles.cpp @@ -119,7 +119,7 @@ namespace lms::scanner // and still belongs to a media directory if (!std::filesystem::exists(p) || !std::filesystem::is_regular_file(p)) { - LMS_LOG(DBUPDATER, INFO, "Removing '" << p.string() << "': missing"); + LMS_LOG(DBUPDATER, DEBUG, "Removing '" << p.string() << "': missing"); return false; } @@ -128,13 +128,13 @@ namespace lms::scanner return core::pathUtils::isPathInRootPath(p, libraryInfo.rootDirectory, &excludeDirFileName); })) { - LMS_LOG(DBUPDATER, INFO, "Removing '" << p.string() << "': out of media directory"); + LMS_LOG(DBUPDATER, DEBUG, "Removing '" << p.string() << "': out of media directory"); return false; } if (!core::pathUtils::hasFileAnyExtension(p, allowedExtensions)) { - LMS_LOG(DBUPDATER, INFO, "Removing '" << p.string() << "': file format no longer handled"); + LMS_LOG(DBUPDATER, DEBUG, "Removing '" << p.string() << "': file format no longer handled"); return false; }