Enqueue tracks in a understandable order when playing an artist
This commit is contained in:
@@ -1059,8 +1059,6 @@ handleGetSimilarSongsRequestCommon(RequestContext& context, bool id3)
|
|||||||
// "Returns a random collection of songs from the given artist and similar artists"
|
// "Returns a random collection of songs from the given artist and similar artists"
|
||||||
auto tracks {artist->getRandomTracks(count / 2)};
|
auto tracks {artist->getRandomTracks(count / 2)};
|
||||||
|
|
||||||
LMS_LOG(API_SUBSONIC, DEBUG) << "Now have " << tracks.size() << " tracks";
|
|
||||||
|
|
||||||
auto similarArtistsId {getServices().similaritySearcher->getSimilarArtists(context.db.getSession(), artist.id(), 5)};
|
auto similarArtistsId {getServices().similaritySearcher->getSimilarArtists(context.db.getSession(), artist.id(), 5)};
|
||||||
for ( const auto& similarArtistId : similarArtistsId )
|
for ( const auto& similarArtistId : similarArtistsId )
|
||||||
{
|
{
|
||||||
@@ -1070,8 +1068,6 @@ handleGetSimilarSongsRequestCommon(RequestContext& context, bool id3)
|
|||||||
|
|
||||||
auto similarArtistTracks {similarArtist->getRandomTracks((count / 2) / 5)};
|
auto similarArtistTracks {similarArtist->getRandomTracks((count / 2) / 5)};
|
||||||
|
|
||||||
LMS_LOG(API_SUBSONIC, DEBUG) << "Added " << similarArtistTracks.size() << " similar tracks from artist " << similarArtist->getName();
|
|
||||||
|
|
||||||
tracks.insert(tracks.end(),
|
tracks.insert(tracks.end(),
|
||||||
std::make_move_iterator(std::begin(similarArtistTracks)),
|
std::make_move_iterator(std::begin(similarArtistTracks)),
|
||||||
std::make_move_iterator(std::end(similarArtistTracks)));
|
std::make_move_iterator(std::end(similarArtistTracks)));
|
||||||
@@ -1081,8 +1077,6 @@ handleGetSimilarSongsRequestCommon(RequestContext& context, bool id3)
|
|||||||
std::mt19937 randGenerator {static_cast<std::mt19937::result_type>(std::chrono::duration_cast<std::chrono::milliseconds>(now.time_since_epoch()).count())};
|
std::mt19937 randGenerator {static_cast<std::mt19937::result_type>(std::chrono::duration_cast<std::chrono::milliseconds>(now.time_since_epoch()).count())};
|
||||||
std::shuffle(std::begin(tracks), std::end(tracks), randGenerator);
|
std::shuffle(std::begin(tracks), std::end(tracks), randGenerator);
|
||||||
|
|
||||||
LMS_LOG(API_SUBSONIC, DEBUG) << "FINAL Now have " << tracks.size() << " tracks";
|
|
||||||
|
|
||||||
Response response {Response::createOkResponse()};
|
Response response {Response::createOkResponse()};
|
||||||
Response::Node& similarSongsNode {response.createNode(id3 ? "similarSongs2" : "similarSongs")};
|
Response::Node& similarSongsNode {response.createNode(id3 ? "similarSongs2" : "similarSongs")};
|
||||||
for (const Database::Track::pointer& track : tracks)
|
for (const Database::Track::pointer& track : tracks)
|
||||||
|
|||||||
@@ -209,7 +209,11 @@ Artist::getReleases(const std::set<IdType>& clusterIds) const
|
|||||||
std::vector<Wt::Dbo::ptr<Track>>
|
std::vector<Wt::Dbo::ptr<Track>>
|
||||||
Artist::getTracks() const
|
Artist::getTracks() const
|
||||||
{
|
{
|
||||||
return std::vector<Wt::Dbo::ptr<Track>>(_tracks.begin(), _tracks.end());
|
Wt::Dbo::collection<Wt::Dbo::ptr<Track>> tracks {session()->query<Wt::Dbo::ptr<Track>>("SELECT t from Track t INNER JOIN artist a ON t_a.artist_id = a.id INNER JOIN track_artist t_a ON t_a.track_id = t.id INNER JOIN release r ON r.id = t.release_id")
|
||||||
|
.where("a.id = ?").bind(self()->id())
|
||||||
|
.orderBy("t.year,r.name,t.disc_number,t.track_number")};
|
||||||
|
|
||||||
|
return std::vector<Wt::Dbo::ptr<Track>>(tracks.begin(), tracks.end());
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<Wt::Dbo::ptr<Track>>
|
std::vector<Wt::Dbo::ptr<Track>>
|
||||||
|
|||||||
Reference in New Issue
Block a user