Files
llink/cpp/src/networkmanager.h
2026-02-19 19:41:26 -08:00

64 lines
1.9 KiB
C++

#ifndef NETWORKMANAGER_H
#define NETWORKMANAGER_H
#include <QObject>
#include <QNetworkRequest>
QT_BEGIN_NAMESPACE
class QNetworkReply;
class QNetworkAccessManager;
class QJsonDocument;
QT_END_NAMESPACE
class NetworkManager : public QObject
{
Q_OBJECT
public:
static NetworkManager &instance();
// Delete copy constructor and assignment
NetworkManager(const NetworkManager &) = delete;
void operator=(const NetworkManager &) = delete;
QString sessionToken() const;
public slots:
// Convenience methods that inject session token.
// Network manager discard replies internally, in cases where a consumer callsite prefers to not manage QNetworkReply.
QNetworkReply *get(const QString &path);
QNetworkReply *post(const QString &path, const QJsonDocument &data);
QNetworkReply *put(const QString &path, const QJsonDocument &data);
QNetworkReply *patch(const QString &path, const QJsonDocument &data);
QNetworkReply *del(const QString &path);
QNetworkReply *del(const QString &path, const QJsonDocument &data);
void ping();
/// @brief Builds an authenticated QNetworkRequest for the given path.
/// Callers can further configure the request (e.g. redirect policy) before sending.
QNetworkRequest buildRequest(const QString &path);
/// @brief sets session token which will is injected into every request's headers
void setSessionToken(const QString &token);
signals:
/// @brief Emitted when a request is made and fails required authentication.
void unauthorizedDetected();
void pingResult(int ms);
void pingFailed();
private:
NetworkManager();
~NetworkManager();
QString m_sessionToken;
QNetworkAccessManager *m_qnam;
void setAuthHeader(QNetworkRequest &request);
/// @brief Combines the api url with given path
/// @param path should be like "/auth/me"
QString getFullUrl(const QString &path);
};
#endif // NETWORKMANAGER_H