Removed now useless config option
This commit is contained in:
@@ -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");
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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)
|
||||
{
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
{
|
||||
|
||||
@@ -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>(¶ms.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
|
||||
@@ -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() };
|
||||
|
||||
@@ -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() };
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user