Archived
1
Fork 0
This repository has been archived on 2025-04-12. You can view files and clone it, but cannot push or open issues or pull requests.
trinity/include/network.h

129 lines
4.2 KiB
C
Raw Normal View History

2021-07-21 16:08:15 -04:00
#pragma once
#include <QNetworkAccessManager>
#include <QNetworkRequest>
#include <QJsonObject>
#include <QJsonDocument>
#include <QUrl>
#include "requestsender.h"
class Network {
public:
Network() {
manager = new QNetworkAccessManager();
}
QNetworkAccessManager* manager;
QString homeserverURL, accessToken;
2021-07-21 16:08:15 -04:00
template<typename Fn>
inline void postJSON(const QString& path, const QJsonObject object, Fn&& fn) {
QNetworkRequest request(homeserverURL + path);
request.setHeader(QNetworkRequest::ContentTypeHeader, "application/json");
request.setRawHeader("Authorization", accessToken.toLocal8Bit());
const QByteArray jsonPost = QJsonDocument(object).toJson();
request.setHeader(QNetworkRequest::ContentLengthHeader, QByteArray::number(jsonPost.size()));
RequestSender* sender = new RequestSender(manager);
sender->fn = fn;
request.setOriginatingObject(sender);
QObject::connect(manager, &QNetworkAccessManager::finished, sender, &RequestSender::finished);
manager->post(request, jsonPost);
}
template<typename Fn, typename ProgressFn>
inline void postBinary(const QString& path, const QByteArray data, const QString mimeType, Fn&& fn, ProgressFn&& progressFn) {
QNetworkRequest request(homeserverURL + path);
request.setHeader(QNetworkRequest::ContentTypeHeader, mimeType);
request.setRawHeader("Authorization", accessToken.toLocal8Bit());
request.setHeader(QNetworkRequest::ContentLengthHeader, QByteArray::number(data.size()));
RequestSender* sender = new RequestSender(manager);
sender->fn = fn;
request.setOriginatingObject(sender);
QObject::connect(manager, &QNetworkAccessManager::finished, sender, &RequestSender::finished);
QNetworkReply* reply = manager->post(request, data);
QObject::connect(reply, &QNetworkReply::uploadProgress, progressFn);
}
template<typename Fn>
inline void post(const QString& path, Fn&& fn) {
QNetworkRequest request(homeserverURL + path);
request.setRawHeader("Authorization", accessToken.toLocal8Bit());
RequestSender* sender = new RequestSender(manager);
sender->fn = fn;
request.setOriginatingObject(sender);
QObject::connect(manager, &QNetworkAccessManager::finished, sender, &RequestSender::finished);
manager->post(request, QByteArray());
}
inline void post(const QString& path) {
QNetworkRequest request(homeserverURL + path);
request.setRawHeader("Authorization", accessToken.toLocal8Bit());
manager->post(request, QByteArray());
}
inline void putJSON(const QString& path, const QJsonObject object) {
QNetworkRequest request(homeserverURL + path);
request.setHeader(QNetworkRequest::ContentTypeHeader, "application/json");
request.setRawHeader("Authorization", accessToken.toLocal8Bit());
const QByteArray jsonPost = QJsonDocument(object).toJson();
request.setHeader(QNetworkRequest::ContentLengthHeader, QByteArray::number(jsonPost.size()));
manager->put(request, jsonPost);
}
template<typename Fn>
inline void putJSON(const QString& path, const QJsonObject object, Fn&& fn) {
QNetworkRequest request(homeserverURL + path);
request.setHeader(QNetworkRequest::ContentTypeHeader, "application/json");
request.setRawHeader("Authorization", accessToken.toLocal8Bit());
RequestSender* sender = new RequestSender(manager);
sender->fn = fn;
request.setOriginatingObject(sender);
const QByteArray jsonPost = QJsonDocument(object).toJson();
request.setHeader(QNetworkRequest::ContentLengthHeader, QByteArray::number(jsonPost.size()));
QObject::connect(manager, &QNetworkAccessManager::finished, sender, &RequestSender::finished);
manager->put(request, jsonPost);
}
template<typename Fn>
inline void get(const QString& path, Fn&& fn, const QString contentType = "application/json") {
QNetworkRequest request(homeserverURL + path);
request.setHeader(QNetworkRequest::ContentTypeHeader, contentType);
request.setRawHeader("Authorization", accessToken.toLocal8Bit());
RequestSender* sender = new RequestSender(manager);
sender->fn = fn;
request.setOriginatingObject(sender);
QObject::connect(manager, &QNetworkAccessManager::finished, sender, &RequestSender::finished);
manager->get(request);
}
};