// SPDX-FileCopyrightText: 2023 Yury Gubich // SPDX-License-Identifier: GPL-3.0-or-later #pragma once #include #include #include #include #include #include #include #include #include #include #include "models/magpie.h" #include "requests/request.h" class API : public QObject { Q_OBJECT public: using SuccessMapHandler = std::function; using SuccessListHandler = std::function; using ErrorHandler = std::function&)>; using RequestId = unsigned int; explicit API(Models::Magpie& magpie, QObject* parent = nullptr); RequestId requestAssets(const SuccessListHandler& success, const ErrorHandler& error); RequestId poll(const SuccessMapHandler& success, const ErrorHandler& error, bool clear = false); static const RequestId none = 0; public slots: void cancelRequest(RequestId id); RequestId test(const QString& path, const QJSValue& finished = QJSValue()); RequestId sendRegister(const QString& login, const QString& password, const QJSValue& finished = QJSValue()); RequestId sendLogin(const QString& login, const QString& password, const QJSValue& finished = QJSValue()); RequestId addAsset(const QString& title, const QString& icon, const QJSValue& finished = QJSValue()); private slots: void onRequestDone(RequestId id); private: void callCallback(const QJSValue& callback, const QString& error = QString(), const QJSValueList& arguments = QJSValueList()) const; RequestId registerAndSend(std::unique_ptr request); private: RequestId idCounter; Models::Magpie& magpie; QNetworkAccessManager network; std::map> requests; std::unique_ptr pollReply; };