From ae6c852cdceb2990e2dffcf02d3fe521eb0be8bd Mon Sep 17 00:00:00 2001 From: Akira Ohgaki <akiraohgaki@gmail.com> Date: Wed, 17 Aug 2016 12:45:23 +0900 Subject: [PATCH] Add core/network class --- src/core/network.cpp | 65 ++++++++++++++++++++++++++++++++++++++++++++ src/core/network.h | 39 ++++++++++++++++++++++++++ 2 files changed, 104 insertions(+) create mode 100644 src/core/network.cpp create mode 100644 src/core/network.h diff --git a/src/core/network.cpp b/src/core/network.cpp new file mode 100644 index 0000000..6d040d2 --- /dev/null +++ b/src/core/network.cpp @@ -0,0 +1,65 @@ +#include <QEventLoop> +#include <QNetworkAccessManager> +#include <QNetworkRequest> +#include <QNetworkReply> + +#include "network.h" + +namespace Core { + +Network::Network(const bool &async, QObject *parent) : + QObject(parent), _async(async) +{ + _manager = new QNetworkAccessManager(); + connect(_manager, &QNetworkAccessManager::finished, + this, &Network::_finished); + if (!_async) { + _eventLoop = new QEventLoop(); + connect(_manager, &QNetworkAccessManager::finished, + _eventLoop, &QEventLoop::quit); + } +} + +Network::~Network() +{ + _manager->deleteLater(); + if (!_async) { + delete _eventLoop; + } +} + +QNetworkReply *Network::head(const QUrl &uri) +{ + QNetworkReply *reply = _manager->head(QNetworkRequest(uri)); + if (!_async) { + _eventLoop->exec(); + } + return reply; +} + +QNetworkReply *Network::get(const QUrl &uri) +{ + QNetworkReply *reply = _manager->get(QNetworkRequest(uri)); + connect(reply, &QNetworkReply::downloadProgress, + this, &Network::_downloadProgress); + if (!_async) { + _eventLoop->exec(); + } + return reply; +} + +/** + * Private slots + */ + +void Network::_finished(QNetworkReply *reply) +{ + emit finished(reply); +} + +void Network::_downloadProgress(const qint64 &received, const qint64 &total) +{ + emit downloadProgress(received, total); +} + +} // namespace Core diff --git a/src/core/network.h b/src/core/network.h new file mode 100644 index 0000000..374310c --- /dev/null +++ b/src/core/network.h @@ -0,0 +1,39 @@ +#ifndef CORE_NETWORK_H +#define CORE_NETWORK_H + +#include <QObject> + +class QEventLoop; +class QNetworkAccessManager; +class QNetworkReply; + +namespace Core { + +class Network : public QObject +{ + Q_OBJECT + +private: + bool _async; + QNetworkAccessManager *_manager; + QEventLoop *_eventLoop; + +public: + explicit Network(const bool &async = true, QObject *parent = 0); + ~Network(); + + QNetworkReply *head(const QUrl &uri); + QNetworkReply *get(const QUrl &uri); + +private slots: + void _finished(QNetworkReply *reply); + void _downloadProgress(const qint64 &received, const qint64 &total); + +signals: + void finished(QNetworkReply *reply); + void downloadProgress(const qint64 &received, const qint64 &total); +}; + +} // namespace Core + +#endif // CORE_NETWORK_H -- GitLab