From ddb295c52c58b199adb90656f5644d77b4d4648d Mon Sep 17 00:00:00 2001 From: emeric Date: Mon, 29 Jul 2024 11:29:34 +0200 Subject: [PATCH] Subsonic API: do not return an error if the artist is not found in getTopSongs --- .../subsonic/impl/entrypoints/Browsing.cpp | 26 +++++++++---------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/src/libs/subsonic/impl/entrypoints/Browsing.cpp b/src/libs/subsonic/impl/entrypoints/Browsing.cpp index 82c86a54..135f5765 100644 --- a/src/libs/subsonic/impl/entrypoints/Browsing.cpp +++ b/src/libs/subsonic/impl/entrypoints/Browsing.cpp @@ -580,23 +580,23 @@ namespace lms::api::subsonic auto transaction{ context.dbSession.createReadTransaction() }; - const auto artists{ Artist::find(context.dbSession, artistName) }; - if (artists.size() != 1) - throw RequestedDataNotFoundError{}; - Response response{ Response::createOkResponse(context.serverProtocolVersion) }; Response::Node& topSongs{ response.createNode("topSongs") }; - scrobbling::IScrobblingService::FindParameters params; - params.setUser(context.user->getId()); - params.setRange(db::Range{ 0, count }); - params.setArtist(artists.front()->getId()); - - const auto trackIds{ core::Service::get()->getTopTracks(params) }; - for (const TrackId trackId : trackIds.results) + const auto artists{ Artist::find(context.dbSession, artistName) }; + if (artists.size() == 1) { - if (Track::pointer track{ Track::find(context.dbSession, trackId) }) - topSongs.addArrayChild("song", createSongNode(context, track, context.user)); + scrobbling::IScrobblingService::FindParameters params; + params.setUser(context.user->getId()); + params.setRange(db::Range{ 0, count }); + params.setArtist(artists.front()->getId()); + + const auto trackIds{ core::Service::get()->getTopTracks(params) }; + for (const TrackId trackId : trackIds.results) + { + if (Track::pointer track{ Track::find(context.dbSession, trackId) }) + topSongs.addArrayChild("song", createSongNode(context, track, context.user)); + } } return response;