//SPDX-FileCopyrightText: 2023 Yury Gubich //SPDX-License-Identifier: GPL-3.0-or-later #include "poll.h" #include #include "API/codes.h" const std::map Request::Poll::updatesStructure({ {"data", QMetaType::QVariantMap}, }); Request::Poll::Poll (const QUrl& baseUrl, bool clear): Request(createUrl(baseUrl, "/poll", clear)) { request.setTransferTimeout(30000); } void Request::Poll::onSuccess (const QVariantMap& data) { if (!validateResponse(data, resultStructure)) return Request::onError("Malformed response", std::nullopt); Codes::Poll code = Codes::convertPoll(data.value("result").toInt()); if (code == Codes::Poll::success) if (!validateResponse(data, updatesStructure)) return onError("Malformed response: received a poll that claimed to have some updates, but the \"data\" field is abscent", data); Request::onSuccess(data); } void Request::Poll::onError (const QString& err, const std::optional& data) { if (validateResponse(data, resultStructure)) Request::onError(err + ": " + Codes::description(Codes::convertPoll(data->value("result").toInt())), data); else Request::onError(err, data); } QUrl Request::Poll::createUrl (QUrl base, const QString& path, bool clear) { QString startingPath = base.path(); base.setPath(startingPath + path); if (clear) base.setQuery(QUrlQuery({{"clearCache", "all"}})); return base; }