Raised artist/album/track limits when explorin the collection. fixes #237

This commit is contained in:
emeric
2022-06-12 21:15:56 +02:00
parent 27dfaf999a
commit b9305f2c25
21 changed files with 114 additions and 114 deletions
@@ -405,64 +405,12 @@ Release::hasVariousArtists() const
return getArtists().size() > 1;
}
std::vector<Track::pointer>
Release::getTracks(const std::vector<ClusterId>& clusterIds) const
{
assert(session());
WhereClause where;
std::ostringstream oss;
oss << "SELECT t FROM track t INNER JOIN release r ON t.release_id = r.id";
if (!clusterIds.empty())
{
oss << " INNER JOIN cluster c ON c.id = t_c.cluster_id INNER JOIN track_cluster t_c ON t_c.track_id = t.id";
WhereClause clusterClause;
for (auto id : clusterIds)
clusterClause.Or(WhereClause("c.id = ?")).bind(id.toString());
where.And(clusterClause);
}
where.And(WhereClause("r.id = ?")).bind(getId().toString());
oss << " " << where.get();
if (!clusterIds.empty())
oss << " GROUP BY t.id HAVING COUNT(*) = " << clusterIds.size();
oss << " ORDER BY t.disc_number,t.track_number";
auto query {session()->query<Wt::Dbo::ptr<Track>>(oss.str())};
for (const std::string& bindArg : where.getBindArgs())
query.bind(bindArg);
auto res {query.resultList()};
return std::vector<Track::pointer> (res.begin(), res.end());
}
std::size_t
Release::getTracksCount() const
{
return _tracks.size();
}
Track::pointer
Release::getFirstTrack() const
{
assert(session());
return session()->query<Wt::Dbo::ptr<Track>>("SELECT t from track t")
.join("release r ON t.release_id = r.id")
.where("r.id = ?").bind(getId())
.orderBy("t.disc_number,t.track_number")
.limit(1)
.resultValue();
}
std::chrono::milliseconds
Release::getDuration() const
{