From 915e1149337e4a0b2214d3beb5b1af415ba40dd1 Mon Sep 17 00:00:00 2001 From: emeric Date: Tue, 6 Sep 2022 12:48:52 +0200 Subject: [PATCH] Subsonic API: added getSong endpoint. ref #212 --- src/libs/subsonic/impl/SubsonicResource.cpp | 25 ++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/src/libs/subsonic/impl/SubsonicResource.cpp b/src/libs/subsonic/impl/SubsonicResource.cpp index aa283e98..d9140b89 100644 --- a/src/libs/subsonic/impl/SubsonicResource.cpp +++ b/src/libs/subsonic/impl/SubsonicResource.cpp @@ -872,6 +872,29 @@ handleGetAlbumRequest(RequestContext& context) return response; } +static +Response +handleGetSongRequest(RequestContext& context) +{ + // Mandatory params + TrackId id {getMandatoryParameterAs(context.parameters, "id")}; + + auto transaction {context.dbSession.createSharedTransaction()}; + + const Track::pointer track {Track::find(context.dbSession, id)}; + if (!track) + throw RequestedDataNotFoundError {}; + + User::pointer user {User::find(context.dbSession, context.userId)}; + if (!user) + throw UserNotAuthorizedError {}; + + Response response {Response::createOkResponse(context.serverProtocolVersion)}; + response.addNode("song", trackToResponseNode(track, context.dbSession, user)); + + return response; +} + static Response handleGetArtistRequest(RequestContext& context) @@ -1835,7 +1858,7 @@ static const std::unordered_map requestEntry {"/getArtists", {handleGetArtistsRequest}}, {"/getArtist", {handleGetArtistRequest}}, {"/getAlbum", {handleGetAlbumRequest}}, - {"/getSong", {handleNotImplemented}}, + {"/getSong", {handleGetSongRequest}}, {"/getVideos", {handleNotImplemented}}, {"/getArtistInfo", {handleGetArtistInfoRequest}}, {"/getArtistInfo2", {handleGetArtistInfo2Request}},