Get track list images from first tracks in list
This commit is contained in:
@@ -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
|
||||
@@ -312,13 +312,14 @@ namespace lms::artwork
|
||||
|
||||
db::TrackEmbeddedImage::FindParameters params;
|
||||
params.setTrackList(trackListId);
|
||||
params.setSortMethod(db::TrackEmbeddedImageSortMethod::MediaTypeThenFrontTypeThenSizeDescDesc);
|
||||
params.setSortMethod(db::TrackEmbeddedImageSortMethod::TrackListIndexAscThenSizeDesc);
|
||||
params.setRange(db::Range{ .offset = 0, .size = 1 });
|
||||
|
||||
db::TrackEmbeddedImage::find(session, params, [&](const db::TrackEmbeddedImage::pointer& image) {
|
||||
res = image->getId();
|
||||
});
|
||||
|
||||
// TODO fallback on release image if not found
|
||||
return res;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user