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:
query.orderBy("CASE WHEN t_e_i_l.type = ? THEN 0 ELSE 1 END, t_e_i.size DESC").bind(ImageType::FrontCover);
break;
case TrackEmbeddedImageSortMethod::TrackListIndexAscThenSizeDesc:
assert(params.trackList.isValid());
query.orderBy("t_l_e.id, t_e_i.size DESC");
break;
}
return query;
@@ -174,6 +174,7 @@ namespace lms::db
SizeDesc,
MediaTypeThenFrontTypeThenSizeDescDesc,
FrontTypeThenSizeDesc,
TrackListIndexAscThenSizeDesc,
};
enum class TrackListSortMethod
@@ -21,6 +21,7 @@
#include "database/TrackEmbeddedImage.hpp"
#include "database/TrackEmbeddedImageLink.hpp"
#include "database/TrackList.hpp"
#include "database/Types.hpp"
#include "Common.hpp"
@@ -452,4 +453,38 @@ namespace lms::db::tests
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