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() if (params.track.isValid()
|| params.release.isValid() || params.release.isValid()
|| params.trackList.isValid() || params.trackList.isValid()
|| params.imageType.has_value() || !params.imageTypes.empty()
|| params.sortMethod == TrackEmbeddedImageSortMethod::MediaTypeThenFrontTypeThenSizeDescDesc || params.sortMethod == TrackEmbeddedImageSortMethod::MediaTypeThenFrontTypeThenSizeDescDesc
|| params.sortMethod == TrackEmbeddedImageSortMethod::FrontTypeThenSizeDesc) || params.sortMethod == TrackEmbeddedImageSortMethod::FrontTypeThenSizeDesc)
{ {
@@ -62,8 +62,19 @@ namespace lms::db
query.where("t_l_e.tracklist_id = ?").bind(params.trackList); query.where("t_l_e.tracklist_id = ?").bind(params.trackList);
} }
if (params.imageType.has_value()) if (!params.imageTypes.empty())
query.where("t_e_i_l.type = ?").bind(params.imageType.value()); {
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) switch (params.sortMethod)
@@ -25,6 +25,7 @@
#include <Wt/Dbo/Dbo.h> #include <Wt/Dbo/Dbo.h>
#include "core/EnumSet.hpp"
#include "database/Object.hpp" #include "database/Object.hpp"
#include "database/ReleaseId.hpp" #include "database/ReleaseId.hpp"
#include "database/TrackEmbeddedImageId.hpp" #include "database/TrackEmbeddedImageId.hpp"
@@ -49,7 +50,7 @@ namespace lms::db
TrackId track; TrackId track;
ReleaseId release; ReleaseId release;
TrackListId trackList; TrackListId trackList;
std::optional<ImageType> imageType; core::EnumSet<ImageType> imageTypes;
TrackEmbeddedImageSortMethod sortMethod{ TrackEmbeddedImageSortMethod::None }; TrackEmbeddedImageSortMethod sortMethod{ TrackEmbeddedImageSortMethod::None };
FindParameters& setRange(std::optional<Range> _range) FindParameters& setRange(std::optional<Range> _range)
@@ -72,9 +73,9 @@ namespace lms::db
trackList = _trackList; trackList = _trackList;
return *this; return *this;
} }
FindParameters& setImageType(std::optional<ImageType> _imageType) FindParameters& setImageTypes(core::EnumSet<ImageType> _imageTypes)
{ {
imageType = _imageType; imageTypes = _imageTypes;
return *this; return *this;
} }
FindParameters& setSortMethod(TrackEmbeddedImageSortMethod _sortMethod) FindParameters& setSortMethod(TrackEmbeddedImageSortMethod _sortMethod)
@@ -144,7 +144,7 @@ namespace lms::db::tests
auto transaction{ session.createReadTransaction() }; auto transaction{ session.createReadTransaction() };
TrackEmbeddedImage::FindParameters params; TrackEmbeddedImage::FindParameters params;
params.setImageType(ImageType::FrontCover); params.setImageTypes({ ImageType::FrontCover });
params.setSortMethod(TrackEmbeddedImageSortMethod::FrontTypeThenSizeDesc); params.setSortMethod(TrackEmbeddedImageSortMethod::FrontTypeThenSizeDesc);
bool visited{}; bool visited{};
@@ -156,7 +156,7 @@ namespace lms::db::tests
auto transaction{ session.createReadTransaction() }; auto transaction{ session.createReadTransaction() };
TrackEmbeddedImage::FindParameters params; TrackEmbeddedImage::FindParameters params;
params.setImageType(ImageType::Media); params.setImageTypes({ ImageType::Media });
params.setSortMethod(TrackEmbeddedImageSortMethod::FrontTypeThenSizeDesc); params.setSortMethod(TrackEmbeddedImageSortMethod::FrontTypeThenSizeDesc);
bool visited{}; bool visited{};
@@ -169,6 +169,7 @@ namespace lms::db::tests
TrackEmbeddedImage::FindParameters params; TrackEmbeddedImage::FindParameters params;
params.setRelease(release.getId()); params.setRelease(release.getId());
params.setImageTypes({ ImageType::Media, ImageType::FrontCover });
params.setSortMethod(TrackEmbeddedImageSortMethod::MediaTypeThenFrontTypeThenSizeDescDesc); params.setSortMethod(TrackEmbeddedImageSortMethod::MediaTypeThenFrontTypeThenSizeDescDesc);
bool visited{}; bool visited{};
@@ -192,7 +192,7 @@ namespace lms::cover
db::TrackEmbeddedImage::FindParameters params; db::TrackEmbeddedImage::FindParameters params;
params.setTrack(trackId); params.setTrack(trackId);
params.setImageType(db::ImageType::Media); params.setImageTypes({ db::ImageType::Media });
params.setSortMethod(db::TrackEmbeddedImageSortMethod::SizeDesc); params.setSortMethod(db::TrackEmbeddedImageSortMethod::SizeDesc);
params.setRange(db::Range{ .offset = 0, .size = 1 }); params.setRange(db::Range{ .offset = 0, .size = 1 });