mirror-chatterino2/src/common/NetworkRequest.hpp

72 lines
2.3 KiB
C++
Raw Normal View History

2018-01-19 22:45:33 +01:00
#pragma once
#include "common/NetworkCommon.hpp"
#include "common/NetworkResult.hpp"
2018-01-19 22:45:33 +01:00
#include <QHttpMultiPart>
#include <memory>
2018-01-19 22:45:33 +01:00
namespace chatterino {
2018-09-30 19:15:17 +02:00
struct NetworkData;
2018-01-19 22:45:33 +01:00
2018-12-02 17:49:15 +01:00
class NetworkRequest final
2018-01-19 22:45:33 +01:00
{
2018-08-06 21:17:03 +02:00
// Stores all data about the request that needs to be passed around to each
// part of the request
2018-07-07 13:51:01 +02:00
std::shared_ptr<NetworkData> data;
2018-01-19 22:45:33 +01:00
2018-08-06 21:17:03 +02:00
// The NetworkRequest destructor will assert if executed_ hasn't been set to
// true before dying
bool executed_ = false;
public:
2018-08-06 21:17:03 +02:00
explicit NetworkRequest(
const std::string &url,
NetworkRequestType requestType = NetworkRequestType::Get);
explicit NetworkRequest(
QUrl url, NetworkRequestType requestType = NetworkRequestType::Get);
2018-01-19 22:45:33 +01:00
2019-08-20 18:51:23 +02:00
// Enable move
2018-08-10 18:56:17 +02:00
NetworkRequest(NetworkRequest &&other) = default;
NetworkRequest &operator=(NetworkRequest &&other) = default;
2019-08-20 18:51:23 +02:00
// Disable copy
NetworkRequest(const NetworkRequest &other) = delete;
NetworkRequest &operator=(const NetworkRequest &other) = delete;
2018-01-19 22:45:33 +01:00
2019-08-20 18:51:23 +02:00
~NetworkRequest();
2019-08-20 18:51:23 +02:00
NetworkRequest type(NetworkRequestType newRequestType) &&;
NetworkRequest onReplyCreated(NetworkReplyCreatedCallback cb) &&;
NetworkRequest onError(NetworkErrorCallback cb) &&;
NetworkRequest onSuccess(NetworkSuccessCallback cb) &&;
NetworkRequest payload(const QByteArray &payload) &&;
2019-08-20 20:08:49 +02:00
NetworkRequest cache() &&;
2019-08-20 23:29:11 +02:00
/// NetworkRequest makes sure that the `caller` object still exists when the
/// callbacks are executed. Cannot be used with concurrent() since we can't
/// make sure that the object doesn't get deleted while the callback is
/// running.
2019-08-20 18:51:23 +02:00
NetworkRequest caller(const QObject *caller) &&;
NetworkRequest header(const char *headerName, const char *value) &&;
NetworkRequest header(const char *headerName, const QByteArray &value) &&;
NetworkRequest header(const char *headerName, const QString &value) &&;
NetworkRequest headerList(const QStringList &headers) &&;
2019-08-20 18:51:23 +02:00
NetworkRequest timeout(int ms) &&;
NetworkRequest concurrent() &&;
NetworkRequest authorizeTwitchV5(const QString &clientID,
const QString &oauthToken = QString()) &&;
NetworkRequest multiPart(QHttpMultiPart *payload) &&;
2018-07-06 17:56:11 +02:00
void execute();
2019-08-20 20:08:49 +02:00
static NetworkRequest twitchRequest(QUrl url);
private:
void initializeDefaultValues();
2018-05-16 15:42:45 +02:00
};
2018-01-19 22:45:33 +01:00
} // namespace chatterino