Still converting to bootstrap 5. Updated releases again

This commit is contained in:
emeric
2022-05-12 13:12:05 +02:00
parent 060e673cc1
commit 0a9fbb2046
15 changed files with 91 additions and 74 deletions
+5 -6
View File
@@ -204,8 +204,8 @@ Artist::find(Session& session, const FindParameters& params)
return execQuery(query, params.range);
}
std::vector<Release::pointer>
Artist::getReleases(const std::vector<ClusterId>& clusterIds) const
RangeResults<ReleaseId>
Artist::getReleases(Range range, const std::vector<ClusterId>& clusterIds) const
{
assert(session());
@@ -213,7 +213,7 @@ Artist::getReleases(const std::vector<ClusterId>& clusterIds) const
std::ostringstream oss;
oss << "SELECT DISTINCT r FROM release r INNER JOIN artist a ON a.id = t_a_l.artist_id INNER JOIN track_artist_link t_a_l ON t_a_l.track_id = t.id INNER JOIN track t ON t.release_id = r.id";
oss << "SELECT DISTINCT r.id FROM release r INNER JOIN artist a ON a.id = t_a_l.artist_id INNER JOIN track_artist_link t_a_l ON t_a_l.track_id = t.id INNER JOIN track t ON t.release_id = r.id";
if (!clusterIds.empty())
{
@@ -236,13 +236,12 @@ Artist::getReleases(const std::vector<ClusterId>& clusterIds) const
oss << " ORDER BY t.date DESC, r.name COLLATE NOCASE";
auto query {session()->query<Wt::Dbo::ptr<Release>>(oss.str())};
auto query {session()->query<ReleaseId>(oss.str())};
for (const std::string& bindArg : where.getBindArgs())
query.bind(bindArg);
auto res {query.resultList()};
return std::vector<Release::pointer>(res.begin(), res.end());
return execQuery(query, range);
}
std::size_t
@@ -30,6 +30,7 @@
#include "services/database/ArtistId.hpp"
#include "services/database/ClusterId.hpp"
#include "services/database/Object.hpp"
#include "services/database/ReleaseId.hpp"
#include "services/database/Types.hpp"
#include "services/database/UserId.hpp"
#include "utils/EnumSet.hpp"
@@ -88,7 +89,7 @@ class Artist : public Object<Artist, ArtistId>
const std::string& getSortName() const { return _sortName; }
std::optional<UUID> getMBID() const { return UUID::fromString(_MBID); }
std::vector<ObjectPtr<Release>> getReleases(const std::vector<ClusterId>& clusterIds = {}) const; // if non empty, get the releases that match all these clusters
RangeResults<ReleaseId> getReleases(Range range, const std::vector<ClusterId>& clusterIds = {}) const; // if non empty, get the releases that match all these clusters
std::size_t getReleaseCount() const;
std::vector<ObjectPtr<Track>> getTracks(std::optional<TrackArtistLinkType> linkType = {}) const;
bool hasNonReleaseTracks(std::optional<TrackArtistLinkType> linkType = std::nullopt) const;
+12 -12
View File
@@ -574,13 +574,13 @@ TEST_F(DatabaseFixture, SingleTrackSingleReleaseSingleArtistSingleCluster)
ASSERT_EQ(artists.results.size(), 1);
EXPECT_EQ(artists.results.front(), artist.getId());
auto releases {artist->getReleases()};
ASSERT_EQ(releases.size(), 1);
EXPECT_EQ(releases.front()->getId(), release.getId());
auto releases {artist->getReleases(Range {})};
ASSERT_EQ(releases.results.size(), 1);
EXPECT_EQ(releases.results.front(), release.getId());
releases = artist->getReleases({cluster.getId()});
ASSERT_EQ(releases.size(), 1);
EXPECT_EQ(releases.front()->getId(), release.getId());
releases = artist->getReleases(Range {}, {cluster.getId()});
ASSERT_EQ(releases.results.size(), 1);
EXPECT_EQ(releases.results.front(), release.getId());
}
}
@@ -605,13 +605,13 @@ TEST_F(DatabaseFixture, SingleTrackSingleReleaseSingleArtistMultiClusters)
{
auto transaction {session.createSharedTransaction()};
auto releases {artist->getReleases()};
ASSERT_EQ(releases.size(), 1);
EXPECT_EQ(releases.front()->getId(), release.getId());
auto releases {artist->getReleases(Range {})};
ASSERT_EQ(releases.results.size(), 1);
EXPECT_EQ(releases.results.front(), release.getId());
releases = artist->getReleases({cluster1.getId(), cluster2.getId()});
ASSERT_EQ(releases.size(), 1);
EXPECT_EQ(releases.front()->getId(), release.getId());
releases = artist->getReleases(Range {}, {cluster1.getId(), cluster2.getId()});
ASSERT_EQ(releases.results.size(), 1);
EXPECT_EQ(releases.results.front(), release.getId());
}
}
@@ -50,8 +50,9 @@ TEST_F(DatabaseFixture, MultiTracksSingleArtistSingleRelease)
auto transaction {session.createSharedTransaction()};
EXPECT_EQ(artist->getReleaseCount(), 1);
ASSERT_EQ(artist->getReleases().size(), 1);
EXPECT_EQ(artist->getReleases().front()->getId(), release.getId());
auto releases {artist->getReleases(Range {})};
ASSERT_EQ(releases.results.size(), 1);
EXPECT_EQ(releases.results.front(), release.getId());
EXPECT_EQ(release->getTracks().size(), nbTracks);
}
@@ -73,9 +74,9 @@ TEST_F(DatabaseFixture, SingleTrackSingleReleaseSingleArtist)
{
auto transaction {session.createUniqueTransaction()};
auto releases {artist->getReleases()};
ASSERT_EQ(releases.size(), 1);
EXPECT_EQ(releases.front()->getId(), release.getId());
auto releases {artist->getReleases(Range {})};
ASSERT_EQ(releases.results.size(), 1);
EXPECT_EQ(releases.results.front(), release.getId());
EXPECT_EQ(artist->getReleaseCount(), 1);
+10 -4
View File
@@ -885,9 +885,12 @@ handleGetArtistRequest(RequestContext& context)
Response response {Response::createOkResponse(context.serverProtocolVersion)};
Response::Node artistNode {artistToResponseNode(user, artist, true /* id3 */)};
auto releases {artist->getReleases()};
for (const Release::pointer& release : releases)
auto releases {artist->getReleases(Range {})};
for (const ReleaseId releaseId : releases.results)
{
const Release::pointer release {Release::find(context.dbSession, releaseId)};
artistNode.addArrayChild("album", releaseToResponseNode(release, context.dbSession, user, true /* id3 */));
}
response.addNode("artist", std::move(artistNode));
@@ -997,9 +1000,12 @@ handleGetMusicDirectoryRequest(RequestContext& context)
directoryNode.setAttribute("name", makeNameFilesystemCompatible(artist->getName()));
auto releases {artist->getReleases()};
for (const Release::pointer& release : releases)
auto releases {artist->getReleases(Range {})};
for (const ReleaseId releaseId : releases.results)
{
const Release::pointer release {Release::find(context.dbSession, releaseId)};
directoryNode.addArrayChild("child", releaseToResponseNode(release, context.dbSession, user, false /* no id3 */));
}
}
else if (releaseId)
{