Added a way to filter multiple image types
This commit is contained in:
@@ -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 });
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user