From 5257f687b43585b8702fe441bdf2915b27694a3b Mon Sep 17 00:00:00 2001 From: emeric Date: Wed, 13 Dec 2023 18:55:09 +0100 Subject: [PATCH] Subsonic API: returns the created/updated playlist in createPlaylist endpoint. ref #393 --- src/libs/subsonic/impl/ProtocolVersion.hpp | 2 +- src/libs/subsonic/impl/entrypoints/Playlists.cpp | 13 +++++++++++-- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/src/libs/subsonic/impl/ProtocolVersion.hpp b/src/libs/subsonic/impl/ProtocolVersion.hpp index 6dd17d54..ba2c5788 100644 --- a/src/libs/subsonic/impl/ProtocolVersion.hpp +++ b/src/libs/subsonic/impl/ProtocolVersion.hpp @@ -31,7 +31,7 @@ namespace API::Subsonic }; static inline constexpr ProtocolVersion defaultServerProtocolVersion{ 1, 16, 0 }; - static inline constexpr std::string_view serverVersion{ "4" }; + static inline constexpr std::string_view serverVersion{ "5" }; } namespace StringUtils diff --git a/src/libs/subsonic/impl/entrypoints/Playlists.cpp b/src/libs/subsonic/impl/entrypoints/Playlists.cpp index 3b9373a7..75d1488e 100644 --- a/src/libs/subsonic/impl/entrypoints/Playlists.cpp +++ b/src/libs/subsonic/impl/entrypoints/Playlists.cpp @@ -89,7 +89,7 @@ namespace API::Subsonic std::vector trackIds{ getMultiParametersAs(context.parameters, "songId") }; if (!name && !id) - throw RequiredParameterMissingError{ "name or id" }; + throw RequiredParameterMissingError{ "name or playlistId" }; auto transaction{ context.dbSession.createWriteTransaction() }; @@ -125,7 +125,16 @@ namespace API::Subsonic context.dbSession.create(track, tracklist); } - return Response::createOkResponse(context.serverProtocolVersion); + Response response{ Response::createOkResponse(context.serverProtocolVersion) }; + Response::Node playlistNode{ createPlaylistNode(tracklist, context.dbSession) }; + + auto entries{ tracklist->getEntries() }; + for (const TrackListEntry::pointer& entry : entries) + playlistNode.addArrayChild("entry", createSongNode(context, entry->getTrack(), user)); + + response.addNode("playlist", std::move(playlistNode)); + + return response; } Response handleUpdatePlaylistRequest(RequestContext& context)