diff --git a/src/libs/database/impl/TrackEmbeddedImage.cpp b/src/libs/database/impl/TrackEmbeddedImage.cpp index 9b844b8d..6c7b388c 100644 --- a/src/libs/database/impl/TrackEmbeddedImage.cpp +++ b/src/libs/database/impl/TrackEmbeddedImage.cpp @@ -43,7 +43,7 @@ namespace lms::db || params.track.isValid() || params.release.isValid() || params.trackList.isValid() - || !params.imageTypes.empty() + || params.imageType.has_value() || params.sortMethod == TrackEmbeddedImageSortMethod::DiscNumberThenTrackNumberThenSizeDesc || params.sortMethod == TrackEmbeddedImageSortMethod::TrackNumberThenSizeDesc) { @@ -90,19 +90,8 @@ namespace lms::db query.where("t_l_e.tracklist_id = ?").bind(params.trackList); } - 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); - } + if (params.imageType.has_value()) + query.where("t_e_i_l.type = ?").bind(params.imageType.value()); } switch (params.sortMethod) diff --git a/src/libs/database/include/database/TrackEmbeddedImage.hpp b/src/libs/database/include/database/TrackEmbeddedImage.hpp index 47e8fae8..83261073 100644 --- a/src/libs/database/include/database/TrackEmbeddedImage.hpp +++ b/src/libs/database/include/database/TrackEmbeddedImage.hpp @@ -54,7 +54,7 @@ namespace lms::db ReleaseId release; std::optional discNumber; TrackListId trackList; - core::EnumSet imageTypes; + std::optional imageType; TrackEmbeddedImageSortMethod sortMethod{ TrackEmbeddedImageSortMethod::None }; FindParameters& setRange(std::optional _range) @@ -89,9 +89,9 @@ namespace lms::db trackList = _trackList; return *this; } - FindParameters& setImageTypes(core::EnumSet _imageTypes) + FindParameters& setImageType(std::optional _imageType) { - imageTypes = _imageTypes; + imageType = _imageType; return *this; } FindParameters& setSortMethod(TrackEmbeddedImageSortMethod _sortMethod) diff --git a/src/libs/database/test/TrackEmbeddedImage.cpp b/src/libs/database/test/TrackEmbeddedImage.cpp index 16169592..0e1855c3 100644 --- a/src/libs/database/test/TrackEmbeddedImage.cpp +++ b/src/libs/database/test/TrackEmbeddedImage.cpp @@ -198,7 +198,7 @@ namespace lms::db::tests TrackEmbeddedImage::FindParameters params; params.setRelease(release.getId()); - params.setImageTypes({ ImageType::Media }); + params.setImageType(ImageType::Media); params.setSortMethod(TrackEmbeddedImageSortMethod::SizeDesc); std::vector visitedIds; @@ -214,7 +214,7 @@ namespace lms::db::tests TrackEmbeddedImage::FindParameters params; params.setRelease(release.getId()); - params.setImageTypes({ ImageType::Media }); + params.setImageType(ImageType::Media); params.setSortMethod(TrackEmbeddedImageSortMethod::TrackNumberThenSizeDesc); std::vector visitedIds; @@ -230,7 +230,7 @@ namespace lms::db::tests TrackEmbeddedImage::FindParameters params; params.setRelease(release.getId()); - params.setImageTypes({ ImageType::Media }); + params.setImageType(ImageType::Media); params.setSortMethod(TrackEmbeddedImageSortMethod::DiscNumberThenTrackNumberThenSizeDesc); std::vector visitedIds; @@ -240,6 +240,19 @@ namespace lms::db::tests EXPECT_EQ(visitedIds[1], image3.getId()); EXPECT_EQ(visitedIds[2], image2.getId()); } + + { + auto transaction{ session.createReadTransaction() }; + + TrackEmbeddedImage::FindParameters params; + params.setRelease(release.getId()); + params.setImageType(ImageType::BackCover); + params.setSortMethod(TrackEmbeddedImageSortMethod::DiscNumberThenTrackNumberThenSizeDesc); + + std::vector visitedIds; + TrackEmbeddedImage::find(session, params, [&](const TrackEmbeddedImage::pointer& image) { visitedIds.push_back(image->getId()); }); + ASSERT_EQ(visitedIds.size(), 0); + } } TEST_F(DatabaseFixture, TrackEmbeddedImage_findByParams_artist) diff --git a/src/libs/services/scanner/impl/steps/ScanStepAssociateReleaseImages.cpp b/src/libs/services/scanner/impl/steps/ScanStepAssociateReleaseImages.cpp index 93fa4512..61a9aa0c 100644 --- a/src/libs/services/scanner/impl/steps/ScanStepAssociateReleaseImages.cpp +++ b/src/libs/services/scanner/impl/steps/ScanStepAssociateReleaseImages.cpp @@ -140,7 +140,7 @@ namespace lms::scanner { db::TrackEmbeddedImage::FindParameters params; params.setRelease(release->getId()); - params.setImageTypes({ db::ImageType::FrontCover }); + params.setImageType(db::ImageType::FrontCover); params.setSortMethod(db::TrackEmbeddedImageSortMethod::DiscNumberThenTrackNumberThenSizeDesc); params.setRange(db::Range{ .offset = 0, .size = 1 }); @@ -154,7 +154,7 @@ namespace lms::scanner { db::TrackEmbeddedImage::FindParameters params; params.setRelease(release->getId()); - params.setImageTypes({ db::ImageType::Media }); + params.setImageType(db::ImageType::Media); params.setSortMethod(db::TrackEmbeddedImageSortMethod::DiscNumberThenTrackNumberThenSizeDesc); params.setRange(db::Range{ .offset = 0, .size = 1 }); diff --git a/src/libs/services/scanner/impl/steps/ScanStepAssociateTrackImages.cpp b/src/libs/services/scanner/impl/steps/ScanStepAssociateTrackImages.cpp index 9c1475cd..76d2dc30 100644 --- a/src/libs/services/scanner/impl/steps/ScanStepAssociateTrackImages.cpp +++ b/src/libs/services/scanner/impl/steps/ScanStepAssociateTrackImages.cpp @@ -63,7 +63,7 @@ namespace lms::scanner { db::TrackEmbeddedImage::FindParameters params; params.setTrack(track->getId()); - params.setImageTypes({ db::ImageType::FrontCover }); + params.setImageType(db::ImageType::FrontCover); params.setSortMethod(db::TrackEmbeddedImageSortMethod::SizeDesc); params.setRange(db::Range{ .offset = 0, .size = 1 }); db::TrackEmbeddedImage::find(session, params, [&](const db::TrackEmbeddedImage::pointer& image) { res = db::Artwork::find(session, image->getId()); }); @@ -90,7 +90,7 @@ namespace lms::scanner { db::TrackEmbeddedImage::FindParameters params; params.setTrack(track->getId()); - params.setImageTypes({ db::ImageType::Media }); + params.setImageType(db::ImageType::Media); params.setSortMethod(db::TrackEmbeddedImageSortMethod::SizeDesc); params.setRange(db::Range{ .offset = 0, .size = 1 }); db::TrackEmbeddedImage::find(session, params, [&](const db::TrackEmbeddedImage::pointer& image) { res = db::Artwork::find(session, image->getId()); }); @@ -109,7 +109,7 @@ namespace lms::scanner db::TrackEmbeddedImage::FindParameters params; params.setRelease(releaseId); params.setDiscNumber(discNumber); - params.setImageTypes({ db::ImageType::Media }); + params.setImageType(db::ImageType::Media); params.setSortMethod(db::TrackEmbeddedImageSortMethod::TrackNumberThenSizeDesc); params.setRange(db::Range{ .offset = 0, .size = 1 }); db::TrackEmbeddedImage::find(session, params, [&](const db::TrackEmbeddedImage::pointer& image) { res = db::Artwork::find(session, image->getId()); });