magpie/API/api.h

50 lines
1.3 KiB
C++

#pragma once
#include <memory>
#include <QObject>
#include <QString>
#include <QUrl>
#include <QJSValue>
#include <QNetworkAccessManager>
#include <QNetworkReply>
class API : public QObject {
Q_OBJECT
public:
enum State {Offline, NoServer, NotAuthenticated, Authenticated};
Q_ENUM(State)
private:
Q_PROPERTY(QUrl address READ getAddress WRITE setAddress NOTIFY addressChanged)
Q_PROPERTY(State state READ getState NOTIFY stateChanged)
public:
explicit API(const QUrl& path = QString(), QObject* parent = nullptr);
QUrl getAddress() const;
State getState() const;
void setAddress(const QUrl& path);
signals:
void addressChanged(const QUrl& path);
void stateChanged(State state);
public slots:
void test(const QString& path, const QJSValue& finished = QJSValue());
void sendRegister(const QString& login, const QString& password, const QJSValue& finished = QJSValue());
private slots:
void onTestFinished(QNetworkReply* reply, const QJSValue& finished) const;
void onRegisterFinished(QNetworkReply* reply, const QJSValue& finished) const;
private:
void callCallback(const QJSValue& callback, const QString& error = QString(), const QJSValueList& arguments = QJSValueList()) const;
private:
QUrl address;
QNetworkAccessManager network;
State state;
};