Removed now useless config option

This commit is contained in:
emeric
2026-07-14 23:42:32 +02:00
parent b767913b64
commit 340711daad
26 changed files with 95 additions and 129 deletions
-4
View File
@@ -90,10 +90,6 @@ api-subsonic-support-password-auth = true;
# Enable or disable token/salt authentication (params 'u', 's' and 't')
api-subsonic-support-token-auth = true;
# Use this list to make the reported server version to 1.12.0 depending on the client's name
# Main usage is to make auto detections for the 'p' (password) parameter work
api-subsonic-old-server-protocol-clients = ("DSub");
# List of clients for whom open subsonic extensions and extra fields are disabled
api-open-subsonic-disabled-clients = ("DSub");
+1 -1
View File
@@ -29,7 +29,7 @@ namespace lms::api::subsonic::benchs
{
Response generateFakeResponse()
{
Response response{ Response::createOkResponse(defaultServerProtocolVersion) };
Response response{ Response::createOkResponse() };
Response::Node& node{ response.createNode("MyNode") };
node.setAttribute("Attr1", "value1");
+1 -1
View File
@@ -68,4 +68,4 @@ namespace lms::api::subsonic::utils
// Throws on error
db::UserId authenticateUser(const Wt::Http::Request& request, db::Session& session, const SubsonicResourceConfig& config);
} // namespace lms::api::subsonic
} // namespace lms::api::subsonic::utils
+1 -1
View File
@@ -33,7 +33,7 @@ namespace lms::api::subsonic
unsigned patch{};
};
static inline constexpr ProtocolVersion defaultServerProtocolVersion{ 1, 16, 1 };
static inline constexpr ProtocolVersion serverProtocolVersion{ 1, 16, 1 };
} // namespace lms::api::subsonic
namespace lms::core::stringUtils
+1 -7
View File
@@ -50,10 +50,9 @@ namespace lms::api::subsonic
, _clientName{ getMandatoryParameterAs<std::string>(_request.getParameterMap(), "c") }
, _clientProtocolVersion{ getMandatoryParameterAs<ProtocolVersion>(_request.getParameterMap(), "v") }
, _responseFormat{ getParameterAs<std::string>(request.getParameterMap(), "f").value_or("xml") == "json" ? ResponseFormat::json : ResponseFormat::xml }
, _serverProtocolVersion{ _config.serverProtocolVersionsByClient.contains(_clientName) ? _config.serverProtocolVersionsByClient.at(_clientName) : defaultServerProtocolVersion }
, _isOpenSubsonicEnabled{ !_config.openSubsonicDisabledClients.contains(_clientName) }
{
checkProtocolVersion(_clientProtocolVersion, _serverProtocolVersion);
checkProtocolVersion(_clientProtocolVersion, serverProtocolVersion);
}
RequestContext::~RequestContext() = default;
@@ -93,11 +92,6 @@ namespace lms::api::subsonic
return _clientName;
}
ProtocolVersion RequestContext::getServerProtocolVersion() const
{
return _serverProtocolVersion;
}
ResponseFormat RequestContext::getResponseFormat() const
{
return _responseFormat;
@@ -60,7 +60,6 @@ namespace lms::api::subsonic
std::string getClientIpAddr() const;
std::string_view getClientName() const;
ProtocolVersion getServerProtocolVersion() const;
ResponseFormat getResponseFormat() const;
bool isOpenSubsonicEnabled() const;
@@ -74,7 +73,6 @@ namespace lms::api::subsonic
const ProtocolVersion _clientProtocolVersion;
const ResponseFormat _responseFormat;
const ProtocolVersion _serverProtocolVersion;
const bool _isOpenSubsonicEnabled;
};
} // namespace lms::api::subsonic
+2 -2
View File
@@ -373,7 +373,7 @@ namespace lms::api::subsonic
}
catch (const Error& e)
{
writeResponse(Response::createFailedResponse(defaultServerProtocolVersion, e), ResponseFormat::xml);
writeResponse(Response::createFailedResponse(e), ResponseFormat::xml);
throw;
}
@@ -407,7 +407,7 @@ namespace lms::api::subsonic
}
catch (const Error& e)
{
Response resp{ Response::createFailedResponse(requestContext->getServerProtocolVersion(), e) };
Response resp{ Response::createFailedResponse(e) };
writeResponse(resp, requestContext->getResponseFormat());
throw;
}
@@ -25,19 +25,6 @@ namespace lms::api::subsonic
{
namespace
{
std::unordered_map<std::string, ProtocolVersion> readConfigProtocolVersions(core::IConfig& config)
{
std::unordered_map<std::string, ProtocolVersion> res;
config.visitStrings("api-subsonic-old-server-protocol-clients",
[&](std::string_view client) {
res.emplace(std::string{ client }, ProtocolVersion{ .major = 1, .minor = 12, .patch = 0 });
},
{ "DSub" });
return res;
}
std::unordered_set<std::string> readOpenSubsonicDisabledClients(core::IConfig& config)
{
std::unordered_set<std::string> res;
@@ -55,7 +42,6 @@ namespace lms::api::subsonic
SubsonicResourceConfig readSubsonicResourceConfig(core::IConfig& config)
{
return SubsonicResourceConfig{
.serverProtocolVersionsByClient = readConfigProtocolVersions(config),
.openSubsonicDisabledClients = readOpenSubsonicDisabledClients(config),
.supportPasswordAuthentication = config.getBool("api-subsonic-support-password-auth", true),
.supportTokenAuthentication = config.getBool("api-subsonic-support-token-auth", true)
@@ -20,11 +20,8 @@
#pragma once
#include <string>
#include <unordered_map>
#include <unordered_set>
#include "ProtocolVersion.hpp"
namespace lms::core
{
class IConfig;
@@ -34,7 +31,6 @@ namespace lms::api::subsonic
{
struct SubsonicResourceConfig
{
std::unordered_map<std::string, ProtocolVersion> serverProtocolVersionsByClient;
std::unordered_set<std::string> openSubsonicDisabledClients;
bool supportPasswordAuthentication;
bool supportTokenAuthentication;
+6 -6
View File
@@ -302,23 +302,23 @@ namespace lms::api::subsonic
os << '\"';
}
Response Response::createOkResponse(ProtocolVersion protocolVersion)
Response Response::createOkResponse()
{
return createResponseCommon(protocolVersion);
return createResponseCommon();
}
Response Response::createFailedResponse(ProtocolVersion protocolVersion, const Error& error)
Response Response::createFailedResponse(const Error& error)
{
return createResponseCommon(protocolVersion, &error);
return createResponseCommon(&error);
}
Response Response::createResponseCommon(ProtocolVersion protocolVersion, const Error* error)
Response Response::createResponseCommon(const Error* error)
{
Response response;
Node& responseNode{ response._root.createChild("subsonic-response") };
responseNode.setAttribute("status", error ? "failed" : "ok");
responseNode.setVersionAttribute(protocolVersion);
responseNode.setVersionAttribute(serverProtocolVersion);
if (error)
{
+3 -3
View File
@@ -312,8 +312,8 @@ namespace lms::api::subsonic
map<Key, ValuesType> _childrenValues;
};
static Response createOkResponse(ProtocolVersion protocolVersion);
static Response createFailedResponse(ProtocolVersion protocolVersion, const Error& error);
static Response createOkResponse();
static Response createFailedResponse(const Error& error);
~Response() = default;
Response(const Response&) = delete;
@@ -328,7 +328,7 @@ namespace lms::api::subsonic
void write(std::ostream& os, ResponseFormat format) const;
private:
static Response createResponseCommon(ProtocolVersion protocolVersion, const Error* error = nullptr);
static Response createResponseCommon(const Error* error = nullptr);
class JsonSerializer
{
@@ -163,7 +163,7 @@ namespace lms::api::subsonic
throw NotImplementedGenericError{};
}
Response response{ Response::createOkResponse(context.getServerProtocolVersion()) };
Response response{ Response::createOkResponse() };
Response::Node& albumListNode{ response.createNode(id3 ? Response::Node::Key{ "albumList2" } : Response::Node::Key{ "albumList" }) };
for (const ReleaseId releaseId : releases)
@@ -182,7 +182,7 @@ namespace lms::api::subsonic
auto transaction{ context.getDbSession().createReadTransaction() };
Response response{ Response::createOkResponse(context.getServerProtocolVersion()) };
Response response{ Response::createOkResponse() };
Response::Node& starredNode{ response.createNode(id3 ? Response::Node::Key{ "starred2" } : Response::Node::Key{ "starred" }) };
feedback::IFeedbackService& feedbackService{ *core::Service<feedback::IFeedbackService>::get() };
@@ -238,7 +238,7 @@ namespace lms::api::subsonic
if (size > defaultMaxCountSize)
throw ParameterValueTooHighGenericError{ "size", defaultMaxCountSize };
Response response{ Response::createOkResponse(context.getServerProtocolVersion()) };
Response response{ Response::createOkResponse() };
Response::Node& randomSongsNode{ response.createNode("randomSongs") };
auto transaction{ context.getDbSession().createReadTransaction() };
@@ -274,7 +274,7 @@ namespace lms::api::subsonic
if (!genreObj)
throw RequestedDataNotFoundError{};
Response response{ Response::createOkResponse(context.getServerProtocolVersion()) };
Response response{ Response::createOkResponse() };
Response::Node& songsByGenreNode{ response.createNode("songsByGenre") };
Track::FindParameters params;
@@ -291,7 +291,7 @@ namespace lms::api::subsonic
Response handleGetNowPlayingRequest(RequestContext& context)
{
Response response{ Response::createOkResponse(context.getServerProtocolVersion()) };
Response response{ Response::createOkResponse() };
Response::Node& nowPlayingNode{ response.createNode("nowPlaying") };
scrobbling::IScrobblingService& scrobblingService{ *core::Service<scrobbling::IScrobblingService>::get() };
@@ -38,7 +38,7 @@ namespace lms::api::subsonic
const auto bookmarkIds{ db::TrackBookmark::find(context.getDbSession(), context.getUser()->getId()) };
Response response{ Response::createOkResponse(context.getServerProtocolVersion()) };
Response response{ Response::createOkResponse() };
Response::Node& bookmarksNode{ response.createNode("bookmarks") };
for (const db::TrackBookmarkId bookmarkId : bookmarkIds)
@@ -74,7 +74,7 @@ namespace lms::api::subsonic
if (comment)
bookmark.modify()->setComment(*comment);
return Response::createOkResponse(context.getServerProtocolVersion());
return Response::createOkResponse();
}
Response handleDeleteBookmark(RequestContext& context)
@@ -90,7 +90,7 @@ namespace lms::api::subsonic
bookmark.remove();
return Response::createOkResponse(context.getServerProtocolVersion());
return Response::createOkResponse();
}
static db::PlayQueue::pointer getOrCreatePlayQueue(RequestContext& context)
@@ -122,7 +122,7 @@ namespace lms::api::subsonic
// PlayQueue makes use of a dedicated internal playlist
static Response handleGetPlayQueueCommon(RequestContext& context, bool byIndex)
{
Response response{ Response::createOkResponse(context.getServerProtocolVersion()) };
Response response{ Response::createOkResponse() };
const db::PlayQueue::pointer playQueue{ getOrCreatePlayQueue(context) };
assert(playQueue);
@@ -204,7 +204,7 @@ namespace lms::api::subsonic
playQueue.modify()->setLastModifiedDateTime(Wt::WDateTime::currentDateTime());
}
return Response::createOkResponse(context.getServerProtocolVersion());
return Response::createOkResponse();
}
Response handleSavePlayQueue(RequestContext& context)
+15 -15
View File
@@ -214,7 +214,7 @@ namespace lms::api::subsonic
auto transaction{ context.getDbSession().createReadTransaction() };
Response response{ Response::createOkResponse(context.getServerProtocolVersion()) };
Response response{ Response::createOkResponse() };
Response::Node& similarSongsNode{ response.createNode(id3 ? Response::Node::Key{ "similarSongs2" } : Response::Node::Key{ "similarSongs" }) };
for (const TrackId trackId : tracks)
{
@@ -244,7 +244,7 @@ namespace lms::api::subsonic
Response handleGetMusicFoldersRequest(RequestContext& context)
{
Response response{ Response::createOkResponse(context.getServerProtocolVersion()) };
Response response{ Response::createOkResponse() };
Response::Node& musicFoldersNode{ response.createNode("musicFolders") };
auto transaction{ context.getDbSession().createReadTransaction() };
@@ -263,7 +263,7 @@ namespace lms::api::subsonic
// Optional params
const MediaLibraryId mediaLibrary{ getParameterAs<MediaLibraryId>(context.getParameters(), "musicFolderId").value_or(MediaLibraryId{}) };
Response response{ Response::createOkResponse(context.getServerProtocolVersion()) };
Response response{ Response::createOkResponse() };
Response::Node& indexesNode{ response.createNode("indexes") };
indexesNode.setAttribute("ignoredArticles", "");
indexesNode.setAttribute("lastModified", reportedDummyDateULong); // TODO report last file write?
@@ -310,7 +310,7 @@ namespace lms::api::subsonic
// Mandatory params
const auto directoryId{ getMandatoryParameterAs<DirectoryId>(context.getParameters(), "id") };
Response response{ Response::createOkResponse(context.getServerProtocolVersion()) };
Response response{ Response::createOkResponse() };
Response::Node& directoryNode{ response.createNode("directory") };
auto transaction{ context.getDbSession().createReadTransaction() };
@@ -374,7 +374,7 @@ namespace lms::api::subsonic
Response handleGetGenresRequest(RequestContext& context)
{
Response response{ Response::createOkResponse(context.getServerProtocolVersion()) };
Response response{ Response::createOkResponse() };
Response::Node& genresNode{ response.createNode("genres") };
@@ -392,7 +392,7 @@ namespace lms::api::subsonic
// Optional params
const MediaLibraryId mediaLibrary{ getParameterAs<MediaLibraryId>(context.getParameters(), "musicFolderId").value_or(MediaLibraryId{}) };
Response response{ Response::createOkResponse(context.getServerProtocolVersion()) };
Response response{ Response::createOkResponse() };
Response::Node& artistsNode{ response.createNode("artists") };
artistsNode.setAttribute("ignoredArticles", "");
@@ -473,7 +473,7 @@ namespace lms::api::subsonic
if (!artist)
throw RequestedDataNotFoundError{};
Response response{ Response::createOkResponse(context.getServerProtocolVersion()) };
Response response{ Response::createOkResponse() };
Response::Node artistNode{ createArtistNode(context, artist) };
auto addRelease{ [&](const Release::pointer& release) {
@@ -505,7 +505,7 @@ namespace lms::api::subsonic
if (!release)
throw RequestedDataNotFoundError{};
Response response{ Response::createOkResponse(context.getServerProtocolVersion()) };
Response response{ Response::createOkResponse() };
Response::Node albumNode{ createAlbumNode(context, release, true /* id3 */) };
const auto tracks{ Track::find(context.getDbSession(), Track::FindParameters{}.setRelease(id).setSortMethod(TrackSortMethod::Release)) };
@@ -528,7 +528,7 @@ namespace lms::api::subsonic
if (!track)
throw RequestedDataNotFoundError{};
Response response{ Response::createOkResponse(context.getServerProtocolVersion()) };
Response response{ Response::createOkResponse() };
response.addNode("song", createSongNode(context, track, context.getUser()));
return response;
@@ -542,7 +542,7 @@ namespace lms::api::subsonic
// Optional params
std::size_t count{ getParameterAs<std::size_t>(context.getParameters(), "count").value_or(20) };
Response response{ Response::createOkResponse(context.getServerProtocolVersion()) };
Response response{ Response::createOkResponse() };
Response::Node& artistInfoNode{ response.createNode(Response::Node::Key{ "artistInfo2" }) };
{
@@ -601,7 +601,7 @@ namespace lms::api::subsonic
{
const db::DirectoryId directoryId{ getMandatoryParameterAs<db::DirectoryId>(context.getParameters(), "id") };
Response response{ Response::createOkResponse(context.getServerProtocolVersion()) };
Response response{ Response::createOkResponse() };
{
auto transaction{ context.getDbSession().createReadTransaction() };
@@ -616,7 +616,7 @@ namespace lms::api::subsonic
{
const db::ReleaseId releaseId{ getMandatoryParameterAs<db::ReleaseId>(context.getParameters(), "id") };
Response response{ Response::createOkResponse(context.getServerProtocolVersion()) };
Response response{ Response::createOkResponse() };
{
auto transaction{ context.getDbSession().createReadTransaction() };
@@ -648,7 +648,7 @@ namespace lms::api::subsonic
auto transaction{ context.getDbSession().createReadTransaction() };
Response response{ Response::createOkResponse(context.getServerProtocolVersion()) };
Response response{ Response::createOkResponse() };
Response::Node& topSongs{ response.createNode("topSongs") };
const auto artists{ Artist::find(context.getDbSession(), artistName) };
@@ -684,7 +684,7 @@ namespace lms::api::subsonic
auto transaction{ context.getDbSession().createReadTransaction() };
Response response{ Response::createOkResponse(context.getServerProtocolVersion()) };
Response response{ Response::createOkResponse() };
for (const auto& similarTrack : similarTracks)
{
@@ -715,7 +715,7 @@ namespace lms::api::subsonic
auto transaction{ context.getDbSession().createReadTransaction() };
Response response{ Response::createOkResponse(context.getServerProtocolVersion()) };
Response response{ Response::createOkResponse() };
for (const auto& pathTrack : pathTracks)
{
+16 -16
View File
@@ -71,7 +71,7 @@ namespace lms::api::subsonic
Response handleJukeboxGet(RequestContext& context, jukebox::IJukeboxService& jukeboxService)
{
Response response{ Response::createOkResponse(context.getServerProtocolVersion()) };
Response response{ Response::createOkResponse() };
Response::Node jukeboxPlaylistNode{ createJukeboxStatusNode(jukeboxService) };
{
@@ -88,9 +88,9 @@ namespace lms::api::subsonic
return response;
}
Response handleJukeboxStatus(RequestContext& context, jukebox::IJukeboxService& jukeboxService)
Response handleJukeboxStatus(RequestContext& /*context*/, jukebox::IJukeboxService& jukeboxService)
{
Response response{ Response::createOkResponse(context.getServerProtocolVersion()) };
Response response{ Response::createOkResponse() };
response.addNode("jukeboxStatus", createJukeboxStatusNode(jukeboxService));
return response;
}
@@ -103,25 +103,25 @@ namespace lms::api::subsonic
jukeboxService.clearTracks();
jukeboxService.appendTracks(trackIds);
Response response{ Response::createOkResponse(context.getServerProtocolVersion()) };
Response response{ Response::createOkResponse() };
response.addNode("jukeboxStatus", createJukeboxStatusNode(jukeboxService));
return response;
}
Response handleJukeboxStart(RequestContext& context, jukebox::IJukeboxService& jukeboxService)
Response handleJukeboxStart(RequestContext& /*context*/, jukebox::IJukeboxService& jukeboxService)
{
jukeboxService.resume();
Response response{ Response::createOkResponse(context.getServerProtocolVersion()) };
Response response{ Response::createOkResponse() };
response.addNode("jukeboxStatus", createJukeboxStatusNode(jukeboxService));
return response;
}
Response handleJukeboxStop(RequestContext& context, jukebox::IJukeboxService& jukeboxService)
Response handleJukeboxStop(RequestContext& /*context*/, jukebox::IJukeboxService& jukeboxService)
{
jukeboxService.pause();
Response response{ Response::createOkResponse(context.getServerProtocolVersion()) };
Response response{ Response::createOkResponse() };
response.addNode("jukeboxStatus", createJukeboxStatusNode(jukeboxService));
return response;
}
@@ -134,7 +134,7 @@ namespace lms::api::subsonic
// do not report potential range error
jukeboxService.play(index, std::chrono::seconds{ offset });
Response response{ Response::createOkResponse(context.getServerProtocolVersion()) };
Response response{ Response::createOkResponse() };
response.addNode("jukeboxStatus", createJukeboxStatusNode(jukeboxService));
return response;
}
@@ -145,16 +145,16 @@ namespace lms::api::subsonic
jukeboxService.appendTracks(trackIds);
Response response{ Response::createOkResponse(context.getServerProtocolVersion()) };
Response response{ Response::createOkResponse() };
response.addNode("jukeboxStatus", createJukeboxStatusNode(jukeboxService));
return response;
}
Response handleJukeboxClear(RequestContext& context, jukebox::IJukeboxService& jukeboxService)
Response handleJukeboxClear(RequestContext& /*context*/, jukebox::IJukeboxService& jukeboxService)
{
jukeboxService.clearTracks();
Response response{ Response::createOkResponse(context.getServerProtocolVersion()) };
Response response{ Response::createOkResponse() };
response.addNode("jukeboxStatus", createJukeboxStatusNode(jukeboxService));
return response;
}
@@ -164,16 +164,16 @@ namespace lms::api::subsonic
const auto index{ getMandatoryParameterAs<std::size_t>(context.getParameters(), "index") };
jukeboxService.removeTrack(index);
Response response{ Response::createOkResponse(context.getServerProtocolVersion()) };
Response response{ Response::createOkResponse() };
response.addNode("jukeboxStatus", createJukeboxStatusNode(jukeboxService));
return response;
}
Response handleJukeboxShuffle(RequestContext& context, jukebox::IJukeboxService& jukeboxService)
Response handleJukeboxShuffle(RequestContext& /*context*/, jukebox::IJukeboxService& jukeboxService)
{
jukeboxService.shuffleTracks();
Response response{ Response::createOkResponse(context.getServerProtocolVersion()) };
Response response{ Response::createOkResponse() };
response.addNode("jukeboxStatus", createJukeboxStatusNode(jukeboxService));
return response;
}
@@ -186,7 +186,7 @@ namespace lms::api::subsonic
jukeboxService.setVolume(gain); // consider gain is linear
Response response{ Response::createOkResponse(context.getServerProtocolVersion()) };
Response response{ Response::createOkResponse() };
response.addNode("jukeboxStatus", createJukeboxStatusNode(jukeboxService));
return response;
}
@@ -130,7 +130,7 @@ namespace lms::api::subsonic
for (const TrackId id : params.trackIds)
core::Service<feedback::IFeedbackService>::get()->star(context.getUser()->getId(), id);
return Response::createOkResponse(context.getServerProtocolVersion());
return Response::createOkResponse();
}
Response handleUnstarRequest(RequestContext& context)
@@ -152,7 +152,7 @@ namespace lms::api::subsonic
for (const TrackId id : params.trackIds)
core::Service<feedback::IFeedbackService>::get()->unstar(context.getUser()->getId(), id);
return Response::createOkResponse(context.getServerProtocolVersion());
return Response::createOkResponse();
}
Response handleSetRating(RequestContext& context)
@@ -171,7 +171,7 @@ namespace lms::api::subsonic
else if (const TrackId * trackId{ std::get_if<TrackId>(&params.id) })
core::Service<feedback::IFeedbackService>::get()->setRating(context.getUser()->getId(), *trackId, params.rating);
return Response::createOkResponse(context.getServerProtocolVersion());
return Response::createOkResponse();
}
Response handleScrobble(RequestContext& context)
@@ -209,6 +209,6 @@ namespace lms::api::subsonic
}
}
return Response::createOkResponse(context.getServerProtocolVersion());
return Response::createOkResponse();
}
} // namespace lms::api::subsonic
@@ -49,19 +49,19 @@ namespace lms::api::subsonic::Scan
}
} // namespace
Response handleGetScanStatus(RequestContext& context)
Response handleGetScanStatus(RequestContext& /*context*/)
{
Response response{ Response::createOkResponse(context.getServerProtocolVersion()) };
Response response{ Response::createOkResponse() };
response.addNode("scanStatus", createStatusResponseNode());
return response;
}
Response handleStartScan(RequestContext& context)
Response handleStartScan(RequestContext& /*context*/)
{
core::Service<IScannerService>::get()->requestImmediateScan();
Response response{ Response::createOkResponse(context.getServerProtocolVersion()) };
Response response{ Response::createOkResponse() };
response.addNode("scanStatus", createStatusResponseNode());
return response;
@@ -236,7 +236,7 @@ namespace lms::api::subsonic
std::string artistName{ getParameterAs<std::string>(context.getParameters(), "artist").value_or("") };
std::string titleName{ getParameterAs<std::string>(context.getParameters(), "title").value_or("") };
Response response{ Response::createOkResponse(context.getServerProtocolVersion()) };
Response response{ Response::createOkResponse() };
// best effort search, as this API is really limited
auto transaction{ context.getDbSession().createReadTransaction() };
@@ -269,7 +269,7 @@ namespace lms::api::subsonic
// mandatory params
db::TrackId id{ getMandatoryParameterAs<db::TrackId>(context.getParameters(), "id") };
Response response{ Response::createOkResponse(context.getServerProtocolVersion()) };
Response response{ Response::createOkResponse() };
Response::Node& lyricsList{ response.createNode("lyricsList") };
lyricsList.createEmptyArrayChild("structuredLyrics");
@@ -55,7 +55,7 @@ namespace lms::api::subsonic
{
auto transaction{ context.getDbSession().createReadTransaction() };
Response response{ Response::createOkResponse(context.getServerProtocolVersion()) };
Response response{ Response::createOkResponse() };
Response::Node& playlistsNode{ response.createNode("playlists") };
auto addTrackList{ [&](const db::TrackList::pointer& trackList) {
@@ -103,7 +103,7 @@ namespace lms::api::subsonic
if (trackList->getUserId() != context.getUser()->getId() && trackList->getVisibility() != TrackList::Visibility::Public)
throw RequestedDataNotFoundError{};
Response response{ Response::createOkResponse(context.getServerProtocolVersion()) };
Response response{ Response::createOkResponse() };
Response::Node playlistNode{ createPlaylistNode(context, trackList) };
auto entries{ trackList->getEntries() };
@@ -156,7 +156,7 @@ namespace lms::api::subsonic
context.getDbSession().create<TrackListEntry>(track, trackList);
}
Response response{ Response::createOkResponse(context.getServerProtocolVersion()) };
Response response{ Response::createOkResponse() };
Response::Node playlistNode{ createPlaylistNode(context, trackList) };
auto entries{ trackList->getEntries() };
@@ -213,7 +213,7 @@ namespace lms::api::subsonic
context.getDbSession().create<TrackListEntry>(track, trackList);
}
return Response::createOkResponse(context.getServerProtocolVersion());
return Response::createOkResponse();
}
Response handleDeletePlaylistRequest(RequestContext& context)
@@ -227,6 +227,6 @@ namespace lms::api::subsonic
trackList.remove();
return Response::createOkResponse(context.getServerProtocolVersion());
return Response::createOkResponse();
}
} // namespace lms::api::subsonic
+9 -9
View File
@@ -37,7 +37,7 @@ namespace lms::api::subsonic
const bool includeEpisodes{ getParameterAs<bool>(context.getParameters(), "includeEpisodes").value_or(true) };
const std::optional<db::PodcastId> podcastId{ getParameterAs<db::PodcastId>(context.getParameters(), "id") };
Response response{ Response::createOkResponse(context.getServerProtocolVersion()) };
Response response{ Response::createOkResponse() };
Response::Node& podcastsNode{ response.createNode("podcasts") };
podcastsNode.createEmptyArrayChild("channel");
@@ -66,7 +66,7 @@ namespace lms::api::subsonic
std::size_t count{ getParameterAs<std::size_t>(context.getParameters(), "count").value_or(20) };
count = std::min<std::size_t>(count, 100);
Response response{ Response::createOkResponse(context.getServerProtocolVersion()) };
Response response{ Response::createOkResponse() };
Response::Node& newestPodcastsNode{ response.createNode("newestPodcasts") };
newestPodcastsNode.createEmptyArrayChild("episode");
@@ -84,11 +84,11 @@ namespace lms::api::subsonic
return response;
}
Response handleRefreshPodcasts(RequestContext& context)
Response handleRefreshPodcasts(RequestContext& /*context*/)
{
core::Service<podcast::IPodcastService>::get()->refreshPodcasts();
return Response::createOkResponse(context.getServerProtocolVersion());
return Response::createOkResponse();
}
Response handleCreatePodcastChannel(RequestContext& context)
@@ -102,7 +102,7 @@ namespace lms::api::subsonic
// no effect if podcast already exists
core::Service<podcast::IPodcastService>::get()->addPodcast(url);
return Response::createOkResponse(context.getServerProtocolVersion());
return Response::createOkResponse();
}
Response handleDeletePodcastChannel(RequestContext& context)
@@ -113,7 +113,7 @@ namespace lms::api::subsonic
if (!core::Service<podcast::IPodcastService>::get()->removePodcast(podcastId))
throw RequestedDataNotFoundError{};
return Response::createOkResponse(context.getServerProtocolVersion());
return Response::createOkResponse();
}
Response handleDeletePodcastEpisode(RequestContext& context)
@@ -124,7 +124,7 @@ namespace lms::api::subsonic
if (!core::Service<podcast::IPodcastService>::get()->deletePodcastEpisode(episodeId))
throw RequestedDataNotFoundError{};
return Response::createOkResponse(context.getServerProtocolVersion());
return Response::createOkResponse();
}
Response handleDownloadPodcastEpisode(RequestContext& context)
@@ -135,7 +135,7 @@ namespace lms::api::subsonic
if (!core::Service<podcast::IPodcastService>::get()->downloadPodcastEpisode(episodeId))
throw RequestedDataNotFoundError{};
return Response::createOkResponse(context.getServerProtocolVersion());
return Response::createOkResponse();
}
Response handleGetPodcastEpisode(RequestContext& context)
@@ -143,7 +143,7 @@ namespace lms::api::subsonic
// Mandatory parameters
const db::PodcastEpisodeId episodeId{ getMandatoryParameterAs<db::PodcastEpisodeId>(context.getParameters(), "id") };
Response response{ Response::createOkResponse(context.getServerProtocolVersion()) };
Response response{ Response::createOkResponse() };
auto transaction{ context.getDbSession().createReadTransaction() };
@@ -373,7 +373,7 @@ namespace lms::api::subsonic
if (!query.empty())
keywords = core::stringUtils::splitString(query, ' ');
Response response{ Response::createOkResponse(context.getServerProtocolVersion()) };
Response response{ Response::createOkResponse() };
Response::Node& searchResultNode{ response.createNode(id3 ? "searchResult3" : "searchResult2") };
auto transaction{ context.getDbSession().createReadTransaction() };
+7 -7
View File
@@ -26,14 +26,14 @@
namespace lms::api::subsonic
{
Response handlePingRequest(RequestContext& context)
Response handlePingRequest(RequestContext& /*context*/)
{
return Response::createOkResponse(context.getServerProtocolVersion());
return Response::createOkResponse();
}
Response handleGetLicenseRequest(RequestContext& context)
Response handleGetLicenseRequest(RequestContext& /*context*/)
{
Response response{ Response::createOkResponse(context.getServerProtocolVersion()) };
Response response{ Response::createOkResponse() };
Response::Node& licenseNode{ response.createNode("license") };
licenseNode.setAttribute("licenseExpires", "2035-09-03T14:46:43");
@@ -45,7 +45,7 @@ namespace lms::api::subsonic
Response handleTokenInfoRequest(RequestContext& context)
{
Response response{ Response::createOkResponse(context.getServerProtocolVersion()) };
Response response{ Response::createOkResponse() };
Response::Node& tokenInfoNode{ response.createNode("tokenInfo") };
auto transaction{ context.getDbSession().createReadTransaction() };
@@ -54,9 +54,9 @@ namespace lms::api::subsonic
return response;
}
Response handleGetOpenSubsonicExtensions(RequestContext& context)
Response handleGetOpenSubsonicExtensions(RequestContext& /*context*/)
{
Response response{ Response::createOkResponse(context.getServerProtocolVersion()) };
Response response{ Response::createOkResponse() };
struct Extension
{
@@ -84,7 +84,7 @@ namespace lms::api::subsonic
const ClientInfo clientInfo{ parseClientInfoFromJson(context.getBody()) };
const AudioFileInfo audioFileInfo{ getAudioFileInfo(context.getDbSession(), audioFileId) };
Response response{ Response::createOkResponse(context.getServerProtocolVersion()) };
Response response{ Response::createOkResponse() };
Response::Node& transcodeNode{ response.createNode("transcodeDecision") };
{
@@ -50,7 +50,7 @@ namespace lms::api::subsonic
if (!user)
throw RequestedDataNotFoundError{};
Response response{ Response::createOkResponse(context.getServerProtocolVersion()) };
Response response{ Response::createOkResponse() };
response.addNode("user", createUserNode(context, user));
return response;
@@ -58,7 +58,7 @@ namespace lms::api::subsonic
Response handleGetUsersRequest(RequestContext& context)
{
Response response{ Response::createOkResponse(context.getServerProtocolVersion()) };
Response response{ Response::createOkResponse() };
Response::Node& usersNode{ response.createNode("users") };
auto transaction{ context.getDbSession().createReadTransaction() };
-3
View File
@@ -27,21 +27,18 @@ namespace lms::api::subsonic::utils::tests
namespace
{
const SubsonicResourceConfig bothMechanismsSupported{
.serverProtocolVersionsByClient = {},
.openSubsonicDisabledClients = {},
.supportPasswordAuthentication = true,
.supportTokenAuthentication = true,
};
const SubsonicResourceConfig noneSupported{
.serverProtocolVersionsByClient = {},
.openSubsonicDisabledClients = {},
.supportPasswordAuthentication = false,
.supportTokenAuthentication = false,
};
const SubsonicResourceConfig passwordUnsupported{
.serverProtocolVersionsByClient = {},
.openSubsonicDisabledClients = {},
.supportPasswordAuthentication = false,
.supportTokenAuthentication = true,
+4 -5
View File
@@ -25,7 +25,6 @@
#include "core/String.hpp"
#include "core/Version.hpp"
#include "ProtocolVersion.hpp"
#include "SubsonicResponse.hpp"
namespace lms::api::subsonic::tests
@@ -34,7 +33,7 @@ namespace lms::api::subsonic::tests
{
Response generateFakeResponse()
{
Response response{ Response::createOkResponse(defaultServerProtocolVersion) };
Response response{ Response::createOkResponse() };
Response::Node& node{ response.createNode("MyNode") };
node.setAttribute("Attr1", "value1");
@@ -62,7 +61,7 @@ namespace lms::api::subsonic::tests
TEST(SubsonicResponse, emptyJson)
{
Response response{ Response::createOkResponse(defaultServerProtocolVersion) };
Response response{ Response::createOkResponse() };
std::ostringstream oss;
response.write(oss, ResponseFormat::json);
@@ -88,7 +87,7 @@ namespace lms::api::subsonic::tests
TEST(SubsonicResponse, emptyXml)
{
Response response{ Response::createOkResponse(defaultServerProtocolVersion) };
Response response{ Response::createOkResponse() };
std::ostringstream oss;
response.write(oss, ResponseFormat::xml);
@@ -116,7 +115,7 @@ namespace lms::api::subsonic::tests
TEST(SubsonicResponse, jsonNaNAndInfinity)
{
Response response{ Response::createOkResponse(defaultServerProtocolVersion) };
Response response{ Response::createOkResponse() };
Response::Node& node{ response.createNode("MyMath") };
node.setAttribute("finite", 1.25F);