Do not report OpenSubsonic extra fields for selected legacy clients. This made DSub behave badly. fixes #356
This commit is contained in:
@@ -37,8 +37,9 @@ namespace API::Subsonic
|
||||
{
|
||||
using namespace Database;
|
||||
|
||||
namespace {
|
||||
Response handleGetAlbumListRequestCommon(const RequestContext& context, bool id3)
|
||||
namespace
|
||||
{
|
||||
Response handleGetAlbumListRequestCommon(RequestContext& context, bool id3)
|
||||
{
|
||||
// Mandatory params
|
||||
const std::string type{ getMandatoryParameterAs<std::string>(context.parameters, "type") };
|
||||
@@ -140,7 +141,7 @@ namespace API::Subsonic
|
||||
for (const ReleaseId releaseId : releases.results)
|
||||
{
|
||||
const Release::pointer release{ Release::find(context.dbSession, releaseId) };
|
||||
albumListNode.addArrayChild("album", createAlbumNode(release, context.dbSession, user, id3));
|
||||
albumListNode.addArrayChild("album", createAlbumNode(context, release, user, id3));
|
||||
}
|
||||
|
||||
return response;
|
||||
@@ -162,19 +163,19 @@ namespace API::Subsonic
|
||||
for (const ArtistId artistId : feedbackService.getStarredArtists(context.userId, {} /* clusters */, std::nullopt /* linkType */, ArtistSortMethod::BySortName, Range{}).results)
|
||||
{
|
||||
if (auto artist{ Artist::find(context.dbSession, artistId) })
|
||||
starredNode.addArrayChild("artist", createArtistNode(artist, context.dbSession, user, id3));
|
||||
starredNode.addArrayChild("artist", createArtistNode(context, artist, user, id3));
|
||||
}
|
||||
|
||||
for (const ReleaseId releaseId : feedbackService.getStarredReleases(context.userId, {} /* clusters */, Range{}).results)
|
||||
{
|
||||
if (auto release{ Release::find(context.dbSession, releaseId) })
|
||||
starredNode.addArrayChild("album", createAlbumNode(release, context.dbSession, user, id3));
|
||||
starredNode.addArrayChild("album", createAlbumNode(context, release, user, id3));
|
||||
}
|
||||
|
||||
for (const TrackId trackId : feedbackService.getStarredTracks(context.userId, {} /* clusters */, Range{}).results)
|
||||
{
|
||||
if (auto track{ Track::find(context.dbSession, trackId) })
|
||||
starredNode.addArrayChild("song", createSongNode(track, context.dbSession, user));
|
||||
starredNode.addArrayChild("song", createSongNode(context, track, user));
|
||||
}
|
||||
|
||||
return response;
|
||||
@@ -211,7 +212,7 @@ namespace API::Subsonic
|
||||
for (const TrackId trackId : trackIds.results)
|
||||
{
|
||||
const Track::pointer track{ Track::find(context.dbSession, trackId) };
|
||||
randomSongsNode.addArrayChild("song", createSongNode(track, context.dbSession, user));
|
||||
randomSongsNode.addArrayChild("song", createSongNode(context, track, user));
|
||||
}
|
||||
|
||||
return response;
|
||||
@@ -253,7 +254,7 @@ namespace API::Subsonic
|
||||
for (const TrackId trackId : trackIds.results)
|
||||
{
|
||||
const Track::pointer track{ Track::find(context.dbSession, trackId) };
|
||||
songsByGenreNode.addArrayChild("song", createSongNode(track, context.dbSession, user));
|
||||
songsByGenreNode.addArrayChild("song", createSongNode(context, track, user));
|
||||
}
|
||||
|
||||
return response;
|
||||
|
||||
@@ -49,7 +49,7 @@ namespace API::Subsonic
|
||||
{
|
||||
const TrackBookmark::pointer bookmark{ TrackBookmark::find(context.dbSession, bookmarkId) };
|
||||
Response::Node bookmarkNode{ createBookmarkNode(bookmark) };
|
||||
bookmarkNode.addArrayChild("entry", createSongNode(bookmark->getTrack(), context.dbSession, user));
|
||||
bookmarkNode.addArrayChild("entry", createSongNode(context, bookmark->getTrack(), user));
|
||||
|
||||
bookmarksNode.addArrayChild("bookmark", std::move(bookmarkNode));
|
||||
}
|
||||
|
||||
@@ -82,7 +82,7 @@ namespace API::Subsonic
|
||||
{
|
||||
const Artist::pointer similarArtist{ Artist::find(context.dbSession, similarArtistId) };
|
||||
if (similarArtist)
|
||||
artistInfoNode.addArrayChild("similarArtist", createArtistNode(similarArtist, context.dbSession, user, id3));
|
||||
artistInfoNode.addArrayChild("similarArtist", createArtistNode(context, similarArtist, user, id3));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -166,7 +166,7 @@ namespace API::Subsonic
|
||||
throw UserNotAuthorizedError{};
|
||||
|
||||
if (const Artist::pointer artist{ Artist::find(context.dbSession, artistId) })
|
||||
indexNode.addArrayChild("artist", createArtistNode(artist, context.dbSession, user, id3));
|
||||
indexNode.addArrayChild("artist", createArtistNode(context, artist, user, id3));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -268,7 +268,7 @@ namespace API::Subsonic
|
||||
for (const TrackId trackId : tracks)
|
||||
{
|
||||
const Track::pointer track{ Track::find(context.dbSession, trackId) };
|
||||
similarSongsNode.addArrayChild("song", createSongNode(track, context.dbSession, user));
|
||||
similarSongsNode.addArrayChild("song", createSongNode(context, track, user));
|
||||
}
|
||||
|
||||
return response;
|
||||
@@ -321,7 +321,7 @@ namespace API::Subsonic
|
||||
for (const ArtistId rootArtistId : rootArtistIds.results)
|
||||
{
|
||||
const Artist::pointer artist{ Artist::find(context.dbSession, rootArtistId) };
|
||||
directoryNode.addArrayChild("child", createArtistNode(artist, context.dbSession, user, false /* no id3 */));
|
||||
directoryNode.addArrayChild("child", createArtistNode(context, artist, user, false /* no id3 */));
|
||||
}
|
||||
}
|
||||
else if (artistId)
|
||||
@@ -338,7 +338,7 @@ namespace API::Subsonic
|
||||
for (const ReleaseId artistReleaseId : artistReleases.results)
|
||||
{
|
||||
const Release::pointer release{ Release::find(context.dbSession, artistReleaseId) };
|
||||
directoryNode.addArrayChild("child", createAlbumNode(release, context.dbSession, user, false /* no id3 */));
|
||||
directoryNode.addArrayChild("child", createAlbumNode(context, release, user, false /* no id3 */));
|
||||
}
|
||||
}
|
||||
else if (releaseId)
|
||||
@@ -355,7 +355,7 @@ namespace API::Subsonic
|
||||
for (const TrackId trackId : tracks.results)
|
||||
{
|
||||
const Track::pointer track{ Track::find(context.dbSession, trackId) };
|
||||
directoryNode.addArrayChild("child", createSongNode(track, context.dbSession, user));
|
||||
directoryNode.addArrayChild("child", createSongNode(context, track, user));
|
||||
}
|
||||
}
|
||||
else
|
||||
@@ -405,13 +405,13 @@ namespace API::Subsonic
|
||||
throw UserNotAuthorizedError{};
|
||||
|
||||
Response response{ Response::createOkResponse(context.serverProtocolVersion) };
|
||||
Response::Node artistNode{ createArtistNode(artist, context.dbSession, user, true /* id3 */) };
|
||||
Response::Node artistNode{ createArtistNode(context, artist, user, true /* id3 */) };
|
||||
|
||||
const auto releases{ Release::find(context.dbSession, Release::FindParameters {}.setArtist(artist->getId())) };
|
||||
for (const ReleaseId releaseId : releases.results)
|
||||
{
|
||||
const Release::pointer release{ Release::find(context.dbSession, releaseId) };
|
||||
artistNode.addArrayChild("album", createAlbumNode(release, context.dbSession, user, true /* id3 */));
|
||||
artistNode.addArrayChild("album", createAlbumNode(context, release, user, true /* id3 */));
|
||||
}
|
||||
|
||||
response.addNode("artist", std::move(artistNode));
|
||||
@@ -435,13 +435,13 @@ namespace API::Subsonic
|
||||
throw UserNotAuthorizedError{};
|
||||
|
||||
Response response{ Response::createOkResponse(context.serverProtocolVersion) };
|
||||
Response::Node albumNode{ createAlbumNode(release, context.dbSession, user, true /* id3 */) };
|
||||
Response::Node albumNode{ createAlbumNode(context, release, user, true /* id3 */) };
|
||||
|
||||
const auto tracks{ Track::find(context.dbSession, Track::FindParameters {}.setRelease(id).setSortMethod(TrackSortMethod::Release)) };
|
||||
for (const TrackId trackId : tracks.results)
|
||||
{
|
||||
const Track::pointer track{ Track::find(context.dbSession, trackId) };
|
||||
albumNode.addArrayChild("song", createSongNode(track, context.dbSession, user));
|
||||
albumNode.addArrayChild("song", createSongNode(context, track, user));
|
||||
}
|
||||
|
||||
response.addNode("album", std::move(albumNode));
|
||||
@@ -465,7 +465,7 @@ namespace API::Subsonic
|
||||
throw UserNotAuthorizedError{};
|
||||
|
||||
Response response{ Response::createOkResponse(context.serverProtocolVersion) };
|
||||
response.addNode("song", createSongNode(track, context.dbSession, user));
|
||||
response.addNode("song", createSongNode(context, track, user));
|
||||
|
||||
return response;
|
||||
}
|
||||
|
||||
@@ -73,7 +73,7 @@ namespace API::Subsonic
|
||||
|
||||
auto entries{ tracklist->getEntries() };
|
||||
for (const TrackListEntry::pointer& entry : entries)
|
||||
playlistNode.addArrayChild("entry", createSongNode(entry->getTrack(), context.dbSession, user));
|
||||
playlistNode.addArrayChild("entry", createSongNode(context, entry->getTrack(), user));
|
||||
|
||||
response.addNode("playlist", std::move(playlistNode));
|
||||
|
||||
|
||||
@@ -77,7 +77,7 @@ namespace API::Subsonic
|
||||
for (const ArtistId artistId : artistIds.results)
|
||||
{
|
||||
const auto artist{ Artist::find(context.dbSession, artistId) };
|
||||
searchResult2Node.addArrayChild("artist", createArtistNode(artist, context.dbSession, user, id3));
|
||||
searchResult2Node.addArrayChild("artist", createArtistNode(context, artist, user, id3));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -92,7 +92,7 @@ namespace API::Subsonic
|
||||
for (const ReleaseId releaseId : releaseIds.results)
|
||||
{
|
||||
const auto release{ Release::find(context.dbSession, releaseId) };
|
||||
searchResult2Node.addArrayChild("album", createAlbumNode(release, context.dbSession, user, id3));
|
||||
searchResult2Node.addArrayChild("album", createAlbumNode(context, release, user, id3));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -106,7 +106,7 @@ namespace API::Subsonic
|
||||
for (const TrackId trackId : trackIds.results)
|
||||
{
|
||||
const auto track{ Track::find(context.dbSession, trackId) };
|
||||
searchResult2Node.addArrayChild("song", createSongNode(track, context.dbSession, user));
|
||||
searchResult2Node.addArrayChild("song", createSongNode(context, track, user));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user