diff --git a/src/libs/database/impl/TrackEmbeddedImage.cpp b/src/libs/database/impl/TrackEmbeddedImage.cpp index c6116b5f..e818a372 100644 --- a/src/libs/database/impl/TrackEmbeddedImage.cpp +++ b/src/libs/database/impl/TrackEmbeddedImage.cpp @@ -41,7 +41,7 @@ namespace lms::db if (params.track.isValid() || params.release.isValid() || params.trackList.isValid() - || params.imageType.has_value() + || !params.imageTypes.empty() || params.sortMethod == TrackEmbeddedImageSortMethod::MediaTypeThenFrontTypeThenSizeDescDesc || params.sortMethod == TrackEmbeddedImageSortMethod::FrontTypeThenSizeDesc) { @@ -62,8 +62,19 @@ namespace lms::db query.where("t_l_e.tracklist_id = ?").bind(params.trackList); } - if (params.imageType.has_value()) - query.where("t_e_i_l.type = ?").bind(params.imageType.value()); + if (!params.imageTypes.empty()) + { + std::string clause{ "t_e_i_l.type IN (" }; + for (const auto& type : params.imageTypes) + { + if (clause.back() != '(') + clause += ","; + clause += "?"; + query.bind(type); + } + clause += ")"; + query.where(clause); + } } switch (params.sortMethod) diff --git a/src/libs/database/include/database/TrackEmbeddedImage.hpp b/src/libs/database/include/database/TrackEmbeddedImage.hpp index e323e093..37a63b3e 100644 --- a/src/libs/database/include/database/TrackEmbeddedImage.hpp +++ b/src/libs/database/include/database/TrackEmbeddedImage.hpp @@ -25,6 +25,7 @@ #include +#include "core/EnumSet.hpp" #include "database/Object.hpp" #include "database/ReleaseId.hpp" #include "database/TrackEmbeddedImageId.hpp" @@ -49,7 +50,7 @@ namespace lms::db TrackId track; ReleaseId release; TrackListId trackList; - std::optional imageType; + core::EnumSet imageTypes; TrackEmbeddedImageSortMethod sortMethod{ TrackEmbeddedImageSortMethod::None }; FindParameters& setRange(std::optional _range) @@ -72,9 +73,9 @@ namespace lms::db trackList = _trackList; return *this; } - FindParameters& setImageType(std::optional _imageType) + FindParameters& setImageTypes(core::EnumSet _imageTypes) { - imageType = _imageType; + imageTypes = _imageTypes; return *this; } FindParameters& setSortMethod(TrackEmbeddedImageSortMethod _sortMethod) diff --git a/src/libs/database/test/TrackEmbeddedImage.cpp b/src/libs/database/test/TrackEmbeddedImage.cpp index c33d9ffb..6d438bf0 100644 --- a/src/libs/database/test/TrackEmbeddedImage.cpp +++ b/src/libs/database/test/TrackEmbeddedImage.cpp @@ -144,7 +144,7 @@ namespace lms::db::tests auto transaction{ session.createReadTransaction() }; TrackEmbeddedImage::FindParameters params; - params.setImageType(ImageType::FrontCover); + params.setImageTypes({ ImageType::FrontCover }); params.setSortMethod(TrackEmbeddedImageSortMethod::FrontTypeThenSizeDesc); bool visited{}; @@ -156,7 +156,7 @@ namespace lms::db::tests auto transaction{ session.createReadTransaction() }; TrackEmbeddedImage::FindParameters params; - params.setImageType(ImageType::Media); + params.setImageTypes({ ImageType::Media }); params.setSortMethod(TrackEmbeddedImageSortMethod::FrontTypeThenSizeDesc); bool visited{}; @@ -169,6 +169,7 @@ namespace lms::db::tests TrackEmbeddedImage::FindParameters params; params.setRelease(release.getId()); + params.setImageTypes({ ImageType::Media, ImageType::FrontCover }); params.setSortMethod(TrackEmbeddedImageSortMethod::MediaTypeThenFrontTypeThenSizeDescDesc); bool visited{}; diff --git a/src/libs/services/artwork/impl/ArtworkService.cpp b/src/libs/services/artwork/impl/ArtworkService.cpp index 006d21d5..7e1ddbd6 100644 --- a/src/libs/services/artwork/impl/ArtworkService.cpp +++ b/src/libs/services/artwork/impl/ArtworkService.cpp @@ -192,7 +192,7 @@ namespace lms::cover db::TrackEmbeddedImage::FindParameters params; params.setTrack(trackId); - params.setImageType(db::ImageType::Media); + params.setImageTypes({ db::ImageType::Media }); params.setSortMethod(db::TrackEmbeddedImageSortMethod::SizeDesc); params.setRange(db::Range{ .offset = 0, .size = 1 });