OpenSubsonic API: return OS fields on error
This commit is contained in:
@@ -120,13 +120,30 @@ namespace API::Subsonic
|
|||||||
}
|
}
|
||||||
|
|
||||||
Response Response::createOkResponse(ProtocolVersion protocolVersion)
|
Response Response::createOkResponse(ProtocolVersion protocolVersion)
|
||||||
|
{
|
||||||
|
return createResponseCommon(protocolVersion);
|
||||||
|
}
|
||||||
|
|
||||||
|
Response Response::createFailedResponse(ProtocolVersion protocolVersion, const Error& error)
|
||||||
|
{
|
||||||
|
return createResponseCommon(protocolVersion, &error);
|
||||||
|
}
|
||||||
|
|
||||||
|
Response Response::createResponseCommon(ProtocolVersion protocolVersion, const Error* error)
|
||||||
{
|
{
|
||||||
Response response;
|
Response response;
|
||||||
Node& responseNode{ response._root.createChild("subsonic-response") };
|
Node& responseNode{ response._root.createChild("subsonic-response") };
|
||||||
|
|
||||||
responseNode.setAttribute("status", "ok");
|
responseNode.setAttribute("status", error ? "failed" : "ok");
|
||||||
responseNode.setVersionAttribute(protocolVersion);
|
responseNode.setVersionAttribute(protocolVersion);
|
||||||
|
|
||||||
|
if (error)
|
||||||
|
{
|
||||||
|
Node& errorNode{ responseNode.createChild("error") };
|
||||||
|
errorNode.setAttribute("code", static_cast<int>(error->getCode()));
|
||||||
|
errorNode.setAttribute("message", error->getMessage());
|
||||||
|
}
|
||||||
|
|
||||||
// OpenSubsonic mandatory fields
|
// OpenSubsonic mandatory fields
|
||||||
responseNode.setAttribute("type", "lms");
|
responseNode.setAttribute("type", "lms");
|
||||||
responseNode.setAttribute("serverVersion", serverVersion);
|
responseNode.setAttribute("serverVersion", serverVersion);
|
||||||
@@ -135,22 +152,6 @@ namespace API::Subsonic
|
|||||||
return response;
|
return response;
|
||||||
}
|
}
|
||||||
|
|
||||||
Response Response::createFailedResponse(ProtocolVersion protocolVersion, const Error& error)
|
|
||||||
{
|
|
||||||
Response response;
|
|
||||||
Node& responseNode{ response._root.createChild("subsonic-response") };
|
|
||||||
|
|
||||||
responseNode.setAttribute("status", "failed");
|
|
||||||
responseNode.setVersionAttribute(protocolVersion);
|
|
||||||
responseNode.setAttribute("type", "lms"); // non standard field to ease client hacks
|
|
||||||
|
|
||||||
Node& errorNode{ responseNode.createChild("error") };
|
|
||||||
errorNode.setAttribute("code", static_cast<int>(error.getCode()));
|
|
||||||
errorNode.setAttribute("message", error.getMessage());
|
|
||||||
|
|
||||||
return response;
|
|
||||||
}
|
|
||||||
|
|
||||||
void Response::addNode(const std::string& key, Node node)
|
void Response::addNode(const std::string& key, Node node)
|
||||||
{
|
{
|
||||||
return _root._children["subsonic-response"].front().addChild(key, std::move(node));
|
return _root._children["subsonic-response"].front().addChild(key, std::move(node));
|
||||||
@@ -300,4 +301,3 @@ namespace API::Subsonic
|
|||||||
}
|
}
|
||||||
|
|
||||||
} // namespace
|
} // namespace
|
||||||
|
|
||||||
|
|||||||
@@ -249,6 +249,7 @@ namespace API::Subsonic
|
|||||||
void write(std::ostream& os, ResponseFormat format);
|
void write(std::ostream& os, ResponseFormat format);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
static Response createResponseCommon(ProtocolVersion protocolVersion, const Error* error = nullptr);
|
||||||
void writeJSON(std::ostream& os);
|
void writeJSON(std::ostream& os);
|
||||||
void writeXML(std::ostream& os);
|
void writeXML(std::ostream& os);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user