mirror-chatterino2/src/providers/IvrApi.cpp

62 lines
1.5 KiB
C++
Raw Normal View History

#include "IvrApi.hpp"
#include "common/Outcome.hpp"
#include "common/QLogging.hpp"
#include <QUrlQuery>
namespace chatterino {
static IvrApi *instance = nullptr;
void IvrApi::getSubage(QString userName, QString channelName,
ResultCallback<IvrSubage> successCallback,
IvrFailureCallback failureCallback)
{
assert(!userName.isEmpty() && !channelName.isEmpty());
this->makeRequest("twitch/subage/" + userName + "/" + channelName, {})
.onSuccess([successCallback, failureCallback](auto result) -> Outcome {
auto root = result.parseJson();
successCallback(root);
return Success;
})
.onError([failureCallback](NetworkResult result) {
qCWarning(chatterinoIvr)
<< "Failed IVR API Call!" << result.status()
<< QString(result.getData());
failureCallback();
})
.execute();
}
NetworkRequest IvrApi::makeRequest(QString url, QUrlQuery urlQuery)
{
assert(!url.startsWith("/"));
const QString baseUrl("https://api.ivr.fi/");
QUrl fullUrl(baseUrl + url);
fullUrl.setQuery(urlQuery);
return NetworkRequest(fullUrl).timeout(5 * 1000).header("Accept",
"application/json");
}
void IvrApi::initialize()
{
assert(instance == nullptr);
instance = new IvrApi();
}
IvrApi *getIvr()
{
assert(instance != nullptr);
return instance;
}
} // namespace chatterino