From 621e1f98db9d08ccc99414c26253fb3026338df5 Mon Sep 17 00:00:00 2001 From: emeric Date: Fri, 6 Oct 2023 08:41:53 +0200 Subject: [PATCH] Subsonic API: added common answer fields --- src/libs/subsonic/impl/ProtocolVersion.hpp | 1 + src/libs/subsonic/impl/SubsonicResponse.cpp | 6 +++++- src/libs/subsonic/impl/responses/Album.cpp | 10 +++++----- 3 files changed, 11 insertions(+), 6 deletions(-) diff --git a/src/libs/subsonic/impl/ProtocolVersion.hpp b/src/libs/subsonic/impl/ProtocolVersion.hpp index c1a56086..4dcfff13 100644 --- a/src/libs/subsonic/impl/ProtocolVersion.hpp +++ b/src/libs/subsonic/impl/ProtocolVersion.hpp @@ -31,6 +31,7 @@ namespace API::Subsonic }; static inline constexpr ProtocolVersion defaultServerProtocolVersion{ 1, 16, 0 }; + static inline constexpr std::string_view serverVersion{ "1" }; } namespace StringUtils diff --git a/src/libs/subsonic/impl/SubsonicResponse.cpp b/src/libs/subsonic/impl/SubsonicResponse.cpp index c5f2ddd5..f2f00252 100644 --- a/src/libs/subsonic/impl/SubsonicResponse.cpp +++ b/src/libs/subsonic/impl/SubsonicResponse.cpp @@ -130,7 +130,11 @@ namespace API::Subsonic responseNode.setAttribute("status", "ok"); responseNode.setVersionAttribute(protocolVersion); - responseNode.setAttribute("type", "lms"); // non standard field to ease client hacks + + // OpenSubsonic mandatory fields + responseNode.setAttribute("type", "lms"); + responseNode.setAttribute("serverVersion", serverVersion); + responseNode.setAttribute("openSubsonic", true); return response; } diff --git a/src/libs/subsonic/impl/responses/Album.cpp b/src/libs/subsonic/impl/responses/Album.cpp index 7aa6c66d..2998a70d 100644 --- a/src/libs/subsonic/impl/responses/Album.cpp +++ b/src/libs/subsonic/impl/responses/Album.cpp @@ -132,7 +132,7 @@ namespace API::Subsonic // OpenSubsonic specific fields (must always be set) { - std::optional mbid {release->getMBID()}; + std::optional mbid{ release->getMBID() }; albumNode.setAttribute("musicBrainzId", mbid ? mbid->getAsString() : ""); } @@ -149,9 +149,9 @@ namespace API::Subsonic for (const ClusterId clusterId : Cluster::find(dbSession, params).results) { - Cluster::pointer cluster {Cluster::find(dbSession, clusterId)}; + Cluster::pointer cluster{ Cluster::find(dbSession, clusterId) }; if (cluster) - albumNode.addArrayValue(field, cluster->getName()); + albumNode.addArrayValue(field, cluster->getName()); } } } }; @@ -160,11 +160,11 @@ namespace API::Subsonic addClusters("moods", "MOOD"); albumNode.createEmptyArrayChild("artists"); - for (const Artist::pointer& artist : release->getReleaseArtists() ) + for (const Artist::pointer& artist : release->getReleaseArtists()) albumNode.addArrayChild("artists", createArtistNode(artist)); { - const Wt::WDate originalReleaseDate{release->getOriginalReleaseDate()}; + const Wt::WDate originalReleaseDate{ release->getOriginalReleaseDate() }; albumNode.setAttribute("originalReleaseDate", originalReleaseDate.isValid() ? StringUtils::toISO8601String(originalReleaseDate) : ""); }