diff --git a/src/libs/cover/impl/CoverArtGrabber.cpp b/src/libs/cover/impl/CoverArtGrabber.cpp index c92e3f42..8644ef4b 100644 --- a/src/libs/cover/impl/CoverArtGrabber.cpp +++ b/src/libs/cover/impl/CoverArtGrabber.cpp @@ -38,6 +38,44 @@ using RawImage = CoverArt::GraphicsMagick::RawImage; #include "utils/Utils.hpp" #include "Exception.hpp" +namespace +{ + struct TrackInfo + { + bool hasCover {}; + bool isMultiDisc {}; + std::filesystem::path trackPath; + std::optional releaseId; + }; + + std::optional + getTrackInfo(Database::Session& dbSession, Database::IdType trackId) + { + std::optional res; + + auto transaction {dbSession.createSharedTransaction()}; + + const Database::Track::pointer track {Database::Track::getById(dbSession, trackId)}; + if (!track) + return res; + + res = TrackInfo {}; + + res->hasCover = track->hasCover(); + res->trackPath = track->getPath(); + + if (const Database::Release::pointer& release {track->getRelease()}) + { + res->releaseId = release.id(); + if (release->getTotalDisc() > 1) + res->isMultiDisc = true; + } + + return res; + } +} + + namespace CoverArt { static @@ -282,6 +320,9 @@ Grabber::getFromTrack(Database::Session& dbSession, Database::IdType trackId, Im return getFromTrack(dbSession, trackId, width, true /* allow release fallback*/); } + + + std::shared_ptr Grabber::getFromTrack(Database::Session& dbSession, Database::IdType trackId, ImageSize width, bool allowReleaseFallback) { @@ -293,40 +334,7 @@ Grabber::getFromTrack(Database::Session& dbSession, Database::IdType trackId, Im if (cover) return cover; - struct TrackInfo - { - bool hasCover {}; - bool isMultiDisc {}; - std::filesystem::path trackPath; - std::optional releaseId; - }; - - auto getTrackInfo {[&] - { - std::optional res; - - auto transaction {dbSession.createSharedTransaction()}; - - const Track::pointer track {Track::getById(dbSession, trackId)}; - if (!track) - return res; - - res = TrackInfo {}; - - res->hasCover = track->hasCover(); - res->trackPath = track->getPath(); - - if (const Release::pointer& release {track->getRelease()}) - { - res->releaseId = release.id(); - if (release->getTotalDisc() > 1) - res->isMultiDisc = true; - } - - return res; - }}; - - if (const std::optional trackInfo {getTrackInfo()}) + if (const std::optional trackInfo {getTrackInfo(dbSession, trackId)}) { if (trackInfo->hasCover) cover = getFromTrack(trackInfo->trackPath, width); diff --git a/src/libs/utils/include/utils/EnumSet.hpp b/src/libs/utils/include/utils/EnumSet.hpp index c4699c0a..38d42c67 100644 --- a/src/libs/utils/include/utils/EnumSet.hpp +++ b/src/libs/utils/include/utils/EnumSet.hpp @@ -31,7 +31,6 @@ class EnumSet using index_type = std::uint_fast8_t; public: - EnumSet() = default; constexpr EnumSet(std::initializer_list values) { @@ -119,7 +118,6 @@ class EnumSet } private: - static_assert(std::numeric_limits::max() >= sizeof(underlying_type) * 8); enum : index_type { npos = sizeof(underlying_type) * 8 };