input/qobuz: parse and report message from error responses

This commit is contained in:
Max Kellermann
2018-01-21 12:52:54 +01:00
parent 714e69e708
commit 542bbb0889
7 changed files with 214 additions and 4 deletions

View File

@@ -19,6 +19,7 @@
#include "config.h"
#include "QobuzTrackRequest.hxx"
#include "QobuzErrorParser.hxx"
#include "QobuzClient.hxx"
#include "lib/yajl/Callbacks.hxx"
#include "util/RuntimeError.hxx"
@@ -71,8 +72,10 @@ void
QobuzTrackRequest::OnHeaders(unsigned status,
std::multimap<std::string, std::string> &&headers)
{
if (status != 200)
throw FormatRuntimeError("Status %u from Qobuz", status);
if (status != 200) {
error_parser = std::make_unique<QobuzErrorParser>(status, headers);
return;
}
auto i = headers.find("content-type");
if (i == headers.end() || i->second.find("/json") == i->second.npos)
@@ -84,12 +87,22 @@ QobuzTrackRequest::OnHeaders(unsigned status,
void
QobuzTrackRequest::OnData(ConstBuffer<void> data)
{
if (error_parser) {
error_parser->OnData(data);
return;
}
parser.Parse((const unsigned char *)data.data, data.size);
}
void
QobuzTrackRequest::OnEnd()
{
if (error_parser) {
error_parser->OnEnd();
return;
}
parser.CompleteParse();
if (url.empty())