Try to retrieve a cover file in the parent directory, fixes #6

This commit is contained in:
emeric
2019-10-26 14:06:32 +02:00
parent 2fa3663289
commit c9ffbd125c
2 changed files with 17 additions and 16 deletions
+14 -11
View File
@@ -30,17 +30,9 @@
namespace { namespace {
bool bool
isFileSupported(const std::filesystem::path& file, const std::vector<std::filesystem::path> extensions) isFileSupported(const std::filesystem::path& file, const std::vector<std::filesystem::path>& extensions)
{ {
std::filesystem::path fileExtension = file.extension(); return (std::find(std::cbegin(extensions), std::cend(extensions), file.extension()) != std::cend(extensions));
for (auto extension : extensions)
{
if (extension == fileExtension)
return true;
}
return false;
} }
} // namespace } // namespace
@@ -130,7 +122,7 @@ Grabber::getCoverPaths(const std::filesystem::path& directoryPath) const
std::filesystem::directory_iterator itEnd; std::filesystem::directory_iterator itEnd;
while (!ec && itPath != itEnd) while (!ec && itPath != itEnd)
{ {
std::filesystem::path path = *itPath; const std::filesystem::path path {*itPath};
itPath.increment(ec); itPath.increment(ec);
if (!std::filesystem::is_regular_file(path)) if (!std::filesystem::is_regular_file(path))
@@ -175,6 +167,7 @@ Grabber::getFromTrack(Database::Session& dbSession, Database::IdType trackId, st
std::optional<Image::Image> cover; std::optional<Image::Image> cover;
bool hasCover {}; bool hasCover {};
bool isMultiDisc {};
std::filesystem::path trackPath; std::filesystem::path trackPath;
{ {
@@ -185,6 +178,10 @@ Grabber::getFromTrack(Database::Session& dbSession, Database::IdType trackId, st
{ {
hasCover = track->hasCover(); hasCover = track->hasCover();
trackPath = track->getPath(); 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) if (!cover)
cover = getFromDirectory(trackPath.parent_path()); cover = getFromDirectory(trackPath.parent_path());
if (!cover && isMultiDisc)
{
if (trackPath.parent_path().has_parent_path())
cover = getFromDirectory(trackPath.parent_path().parent_path());
}
if (!cover) if (!cover)
cover = getDefaultCover(size); cover = getDefaultCover(size);
else else
+3 -5
View File
@@ -65,13 +65,11 @@ class Grabber
std::mutex _mutex; std::mutex _mutex;
std::map<std::size_t /* size */, Image::Image> _defaultCovers; std::map<std::size_t /* size */, Image::Image> _defaultCovers;
std::vector<std::filesystem::path> _fileExtensions static inline const std::vector<std::filesystem::path> _fileExtensions {".jpg", ".jpeg", ".png", ".bmp"}; // TODO parametrize
= {".jpg", ".jpeg", ".png", ".bmp"}; // TODO parametrize
std::size_t _maxFileSize = 5000000; static inline const std::size_t _maxFileSize {10000000};
std::vector<std::filesystem::path> _preferredFileNames static inline const std::vector<std::filesystem::path> _preferredFileNames {"cover", "front"}; // TODO parametrize
= {"cover", "front"}; // TODO parametrize
}; };
} // namespace CoverArt } // namespace CoverArt