Skip to content
Snippets Groups Projects
qtlib_networkresource.h 2.57 KiB
Newer Older
akiraohgaki's avatar
akiraohgaki committed
/**
akiraohgaki's avatar
akiraohgaki committed
 * qtlib
akiraohgaki's avatar
akiraohgaki committed
 *
 * @author      Akira Ohgaki <akiraohgaki@gmail.com>
 * @copyright   Akira Ohgaki
akiraohgaki's avatar
akiraohgaki committed
 * @license     https://opensource.org/licenses/LGPL-3.0
akiraohgaki's avatar
akiraohgaki committed
 * @link        https://github.com/akiraohgaki/qtlib
akiraohgaki's avatar
akiraohgaki committed
 */

#pragma once

#include <QObject>
#include <QUrl>
akiraohgaki's avatar
akiraohgaki committed
#include <QUrlQuery>
akiraohgaki's avatar
akiraohgaki committed
#include <QNetworkRequest>
#include <QNetworkAccessManager>
#include <QNetworkReply>

akiraohgaki's avatar
akiraohgaki committed
namespace qtlib {
akiraohgaki's avatar
akiraohgaki committed

class NetworkResource : public QObject
{
    Q_OBJECT

public:
akiraohgaki's avatar
akiraohgaki committed
    explicit NetworkResource(const QString &id = "", const QUrl &url = QUrl(), bool async = true, QObject *parent = 0);
akiraohgaki's avatar
akiraohgaki committed
    ~NetworkResource();

akiraohgaki's avatar
akiraohgaki committed
    NetworkResource(const NetworkResource &other, QObject *parent = 0);
akiraohgaki's avatar
akiraohgaki committed
    NetworkResource &operator =(const NetworkResource &other);

akiraohgaki's avatar
akiraohgaki committed
    QString id() const;
    void setId(const QString &id);
akiraohgaki's avatar
akiraohgaki committed
    QUrl url() const;
    void setUrl(const QUrl &url);
    bool async() const;
akiraohgaki's avatar
akiraohgaki committed
    void setAsync(bool async);
akiraohgaki's avatar
akiraohgaki committed
    QNetworkRequest request() const;
    void setRequest(const QNetworkRequest &request);
    QNetworkAccessManager *manager() const;
    QNetworkReply *reply() const;
    QString method() const;
akiraohgaki's avatar
akiraohgaki committed
    QString contentType() const;
    QByteArray contentData() const;
akiraohgaki's avatar
akiraohgaki committed

    NetworkResource *head();
    NetworkResource *get();
akiraohgaki's avatar
akiraohgaki committed
    NetworkResource *post(const QByteArray &contentData, const QString &contentType);
    NetworkResource *post(const QUrlQuery &contentData);
    NetworkResource *put(const QByteArray &contentData, const QString &contentType);
    NetworkResource *put(const QUrlQuery &contentData);
    NetworkResource *deleteResource();
akiraohgaki's avatar
akiraohgaki committed
    bool isFinishedWithNoError();
akiraohgaki's avatar
akiraohgaki committed
    QByteArray readData();
    bool saveData(const QString &path);

signals:
    void finished(NetworkResource *resource);
akiraohgaki's avatar
akiraohgaki committed
    void downloadProgress(QString id, qint64 bytesReceived, qint64 bytesTotal);
    void uploadProgress(QString id, qint64 bytesSent, qint64 bytesTotal);
akiraohgaki's avatar
akiraohgaki committed

public slots:
    void abort();

private slots:
    void replyFinished();
akiraohgaki's avatar
akiraohgaki committed
    void replyDownloadProgress(qint64 bytesReceived, qint64 bytesTotal);
    void replyUploadProgress(qint64 bytesSent, qint64 bytesTotal);
akiraohgaki's avatar
akiraohgaki committed

private:
    void setManager(QNetworkAccessManager *manager);
    void setReply(QNetworkReply *reply);
    void setMethod(const QString &method);
akiraohgaki's avatar
akiraohgaki committed
    void setContentType(const QString &contentType);
    void setContentData(const QByteArray &contentData);
akiraohgaki's avatar
akiraohgaki committed

akiraohgaki's avatar
akiraohgaki committed
    NetworkResource *send(const QUrl &url, bool async);
akiraohgaki's avatar
akiraohgaki committed

akiraohgaki's avatar
akiraohgaki committed
    QString id_;
akiraohgaki's avatar
akiraohgaki committed
    QUrl url_;
    bool async_;
    QNetworkRequest request_;
    QNetworkAccessManager *manager_;
    QNetworkReply *reply_;
    QString method_;
akiraohgaki's avatar
akiraohgaki committed
    QString contentType_;
    QByteArray contentData_;
akiraohgaki's avatar
akiraohgaki committed
};

akiraohgaki's avatar
akiraohgaki committed
} // namespace qtlib