Get track list images from first tracks in list

This commit is contained in:
emeric
2025-06-15 14:41:58 +02:00
parent 424876ee1c
commit 1cd3fb9409
4 changed files with 42 additions and 1 deletions
@@ -115,6 +115,10 @@ namespace lms::db
case TrackEmbeddedImageSortMethod::FrontTypeThenSizeDesc: case TrackEmbeddedImageSortMethod::FrontTypeThenSizeDesc:
query.orderBy("CASE WHEN t_e_i_l.type = ? THEN 0 ELSE 1 END, t_e_i.size DESC").bind(ImageType::FrontCover); query.orderBy("CASE WHEN t_e_i_l.type = ? THEN 0 ELSE 1 END, t_e_i.size DESC").bind(ImageType::FrontCover);
break; break;
case TrackEmbeddedImageSortMethod::TrackListIndexAscThenSizeDesc:
assert(params.trackList.isValid());
query.orderBy("t_l_e.id, t_e_i.size DESC");
break;
} }
return query; return query;
@@ -174,6 +174,7 @@ namespace lms::db
SizeDesc, SizeDesc,
MediaTypeThenFrontTypeThenSizeDescDesc, MediaTypeThenFrontTypeThenSizeDescDesc,
FrontTypeThenSizeDesc, FrontTypeThenSizeDesc,
TrackListIndexAscThenSizeDesc,
}; };
enum class TrackListSortMethod enum class TrackListSortMethod
@@ -21,6 +21,7 @@
#include "database/TrackEmbeddedImage.hpp" #include "database/TrackEmbeddedImage.hpp"
#include "database/TrackEmbeddedImageLink.hpp" #include "database/TrackEmbeddedImageLink.hpp"
#include "database/TrackList.hpp"
#include "database/Types.hpp" #include "database/Types.hpp"
#include "Common.hpp" #include "Common.hpp"
@@ -452,4 +453,38 @@ namespace lms::db::tests
EXPECT_TRUE(visited); EXPECT_TRUE(visited);
} }
} }
TEST_F(DatabaseFixture, TrackEmbeddedImage_TrackList)
{
ScopedTrackList trackList{ session, "MytrackList", TrackListType::PlayList };
ScopedTrack track1{ session };
ScopedTrack track2{ session };
ScopedTrackEmbeddedImage image1{ session };
ScopedTrackEmbeddedImageLink imageLink1{ session, track1.lockAndGet(), image1.lockAndGet() };
ScopedTrackEmbeddedImage image2{ session };
ScopedTrackEmbeddedImageLink imageLink2{ session, track2.lockAndGet(), image2.lockAndGet() };
{
auto transaction{ session.createWriteTransaction() };
session.create<TrackListEntry>(track2.get(), trackList.get());
session.create<TrackListEntry>(track1.get(), trackList.get());
}
{
auto transaction{ session.createReadTransaction() };
TrackEmbeddedImage::FindParameters params;
params.setTrackList(trackList.getId());
params.setSortMethod(TrackEmbeddedImageSortMethod::TrackListIndexAscThenSizeDesc);
std::vector<TrackEmbeddedImageId> visitedIds;
TrackEmbeddedImage::find(session, params, [&](const TrackEmbeddedImage::pointer& image) {
visitedIds.push_back(image->getId());
});
ASSERT_EQ(visitedIds.size(), 2);
EXPECT_EQ(visitedIds[0], image2.getId());
EXPECT_EQ(visitedIds[1], image1.getId());
}
}
} // namespace lms::db::tests } // namespace lms::db::tests
@@ -312,13 +312,14 @@ namespace lms::artwork
db::TrackEmbeddedImage::FindParameters params; db::TrackEmbeddedImage::FindParameters params;
params.setTrackList(trackListId); params.setTrackList(trackListId);
params.setSortMethod(db::TrackEmbeddedImageSortMethod::MediaTypeThenFrontTypeThenSizeDescDesc); params.setSortMethod(db::TrackEmbeddedImageSortMethod::TrackListIndexAscThenSizeDesc);
params.setRange(db::Range{ .offset = 0, .size = 1 }); params.setRange(db::Range{ .offset = 0, .size = 1 });
db::TrackEmbeddedImage::find(session, params, [&](const db::TrackEmbeddedImage::pointer& image) { db::TrackEmbeddedImage::find(session, params, [&](const db::TrackEmbeddedImage::pointer& image) {
res = image->getId(); res = image->getId();
}); });
// TODO fallback on release image if not found
return res; return res;
} }