diff --git a/src/cover/CoverArtGrabber.cpp b/src/cover/CoverArtGrabber.cpp index c2e800a0..8809a6c1 100644 --- a/src/cover/CoverArtGrabber.cpp +++ b/src/cover/CoverArtGrabber.cpp @@ -30,17 +30,9 @@ namespace { bool -isFileSupported(const std::filesystem::path& file, const std::vector extensions) +isFileSupported(const std::filesystem::path& file, const std::vector& extensions) { - std::filesystem::path fileExtension = file.extension(); - - for (auto extension : extensions) - { - if (extension == fileExtension) - return true; - } - - return false; + return (std::find(std::cbegin(extensions), std::cend(extensions), file.extension()) != std::cend(extensions)); } } // namespace @@ -130,7 +122,7 @@ Grabber::getCoverPaths(const std::filesystem::path& directoryPath) const std::filesystem::directory_iterator itEnd; while (!ec && itPath != itEnd) { - std::filesystem::path path = *itPath; + const std::filesystem::path path {*itPath}; itPath.increment(ec); if (!std::filesystem::is_regular_file(path)) @@ -175,6 +167,7 @@ Grabber::getFromTrack(Database::Session& dbSession, Database::IdType trackId, st std::optional cover; bool hasCover {}; + bool isMultiDisc {}; std::filesystem::path trackPath; { @@ -185,6 +178,10 @@ Grabber::getFromTrack(Database::Session& dbSession, Database::IdType trackId, st { hasCover = track->hasCover(); trackPath = track->getPath(); + + auto release {track->getRelease()}; + if (release && release->getTotalDiscNumber() > 1) + isMultiDisc = true; } } @@ -194,6 +191,12 @@ Grabber::getFromTrack(Database::Session& dbSession, Database::IdType trackId, st if (!cover) cover = getFromDirectory(trackPath.parent_path()); + if (!cover && isMultiDisc) + { + if (trackPath.parent_path().has_parent_path()) + cover = getFromDirectory(trackPath.parent_path().parent_path()); + } + if (!cover) cover = getDefaultCover(size); else diff --git a/src/cover/CoverArtGrabber.hpp b/src/cover/CoverArtGrabber.hpp index 17fffd03..07b4cc32 100644 --- a/src/cover/CoverArtGrabber.hpp +++ b/src/cover/CoverArtGrabber.hpp @@ -65,13 +65,11 @@ class Grabber std::mutex _mutex; std::map _defaultCovers; - std::vector _fileExtensions - = {".jpg", ".jpeg", ".png", ".bmp"}; // TODO parametrize + static inline const std::vector _fileExtensions {".jpg", ".jpeg", ".png", ".bmp"}; // TODO parametrize - std::size_t _maxFileSize = 5000000; + static inline const std::size_t _maxFileSize {10000000}; - std::vector _preferredFileNames - = {"cover", "front"}; // TODO parametrize + static inline const std::vector _preferredFileNames {"cover", "front"}; // TODO parametrize }; } // namespace CoverArt