Skip to content
Snippets Groups Projects
network.cpp 1.45 KiB
Newer Older
akiraohgaki's avatar
akiraohgaki committed
/**
 * A library for Qt app
 *
 * LICENSE: The GNU Lesser General Public License, version 3.0
 *
 * @author      Akira Ohgaki <akiraohgaki@gmail.com>
 * @copyright   Akira Ohgaki
 * @license     https://opensource.org/licenses/LGPL-3.0  The GNU Lesser General Public License, version 3.0
 * @link        https://github.com/akiraohgaki/qt-libs
 */

akiraohgaki's avatar
akiraohgaki committed
#include "network.h"

akiraohgaki's avatar
akiraohgaki committed
#include <QEventLoop>
#include <QNetworkAccessManager>
#include <QNetworkRequest>
#include <QNetworkReply>

akiraohgaki's avatar
akiraohgaki committed
namespace utils {
akiraohgaki's avatar
akiraohgaki committed

Network::Network(const bool &async, QObject *parent) :
akiraohgaki's avatar
akiraohgaki committed
    QObject(parent), async_(async)
akiraohgaki's avatar
akiraohgaki committed
{
akiraohgaki's avatar
akiraohgaki committed
    manager_ = new QNetworkAccessManager(this);
akiraohgaki's avatar
akiraohgaki committed
    connect(manager_, &QNetworkAccessManager::finished, this, &utils::Network::finished);
akiraohgaki's avatar
akiraohgaki committed
    if (!async_) {
        eventLoop_ = new QEventLoop();
akiraohgaki's avatar
akiraohgaki committed
        connect(manager_, &QNetworkAccessManager::finished, eventLoop_, &QEventLoop::quit);
akiraohgaki's avatar
akiraohgaki committed
    }
}

Network::~Network()
{
akiraohgaki's avatar
akiraohgaki committed
    manager_->deleteLater();
    if (!async_) {
        delete eventLoop_;
akiraohgaki's avatar
akiraohgaki committed
    }
}

QNetworkReply *Network::head(const QUrl &uri)
{
akiraohgaki's avatar
akiraohgaki committed
    QNetworkReply *reply = manager_->head(QNetworkRequest(uri));
    if (!async_) {
        eventLoop_->exec();
akiraohgaki's avatar
akiraohgaki committed
    }
    return reply;
}

QNetworkReply *Network::get(const QUrl &uri)
{
akiraohgaki's avatar
akiraohgaki committed
    QNetworkReply *reply = manager_->get(QNetworkRequest(uri));
akiraohgaki's avatar
akiraohgaki committed
    connect(reply, &QNetworkReply::downloadProgress, this, &utils::Network::downloadProgress);
akiraohgaki's avatar
akiraohgaki committed
    if (!async_) {
        eventLoop_->exec();
akiraohgaki's avatar
akiraohgaki committed
    }
    return reply;
}

akiraohgaki's avatar
akiraohgaki committed
} // namespace utils