Get track list images from first tracks in list
This commit is contained in:
@@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user