Added a way to filter multiple image types

This commit is contained in:
emeric
2025-06-15 14:41:58 +02:00
parent dd57275858
commit 9629a8cc97
4 changed files with 22 additions and 9 deletions
+14 -3
View File
@@ -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)
@@ -25,6 +25,7 @@
#include <Wt/Dbo/Dbo.h>
#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> imageType;
core::EnumSet<ImageType> imageTypes;
TrackEmbeddedImageSortMethod sortMethod{ TrackEmbeddedImageSortMethod::None };
FindParameters& setRange(std::optional<Range> _range)
@@ -72,9 +73,9 @@ namespace lms::db
trackList = _trackList;
return *this;
}
FindParameters& setImageType(std::optional<ImageType> _imageType)
FindParameters& setImageTypes(core::EnumSet<ImageType> _imageTypes)
{
imageType = _imageType;
imageTypes = _imageTypes;
return *this;
}
FindParameters& setSortMethod(TrackEmbeddedImageSortMethod _sortMethod)
@@ -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{};
@@ -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 });