Try to retrieve a cover file in the parent directory, fixes #6
This commit is contained in:
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user