예제 #1
0
Net::DownloadHandler *Net::DownloadManager::download(const DownloadRequest &downloadRequest)
{
    // Process download request
    const QNetworkRequest request = createNetworkRequest(downloadRequest);
    const ServiceID id = ServiceID::fromURL(request.url());
    const bool isSequentialService = m_sequentialServices.contains(id);

    auto downloadHandler = new DownloadHandlerImpl {downloadRequest, this};
    connect(downloadHandler, &DownloadHandler::finished, downloadHandler, &QObject::deleteLater);
    connect(downloadHandler, &QObject::destroyed, this, [this, id, downloadHandler]()
    {
        m_waitingJobs[id].removeOne(downloadHandler);
    });

    if (!isSequentialService || !m_busyServices.contains(id)) {
        qDebug("Downloading %s...", qUtf8Printable(downloadRequest.url()));
        if (isSequentialService)
            m_busyServices.insert(id);
        downloadHandler->assignNetworkReply(m_networkManager.get(request));
    }
    else {
        m_waitingJobs[id].enqueue(downloadHandler);
    }

    return downloadHandler;
}
예제 #2
0
/* Downloading start: */
void UIDownloader::sltStartDownloading()
{
    /* Set state to acknowledging: */
    m_state = UIDownloaderState_Downloading;

    /* Send GET request: */
    createNetworkRequest(UINetworkRequestType_GET, QList<QUrl>() << m_source);
}
예제 #3
0
/* Acknowledging start: */
void UIDownloader::sltStartAcknowledging()
{
    /* Set state to acknowledging: */
    m_state = UIDownloaderState_Acknowledging;

    /* Send HEAD requests: */
    createNetworkRequest(UINetworkRequestType_HEAD, m_sources);
}
예제 #4
0
/* Downloading start: */
void UIDownloader::sltStartDownloading()
{
    /* Set state to acknowledging: */
    m_state = UIDownloaderState_Downloading;

    /* Send GET request: */
    QNetworkRequest request(m_source);

    /* Create network request: */
    createNetworkRequest(request, UINetworkRequestType_GET, tr("Downloading %1...").arg(m_strDescription));
}
예제 #5
0
/* Acknowledging start: */
void UIDownloader::sltStartAcknowledging()
{
    /* Set state to acknowledging: */
    m_state = UIDownloaderState_Acknowledging;

    /* Send HEAD requests: */
    QList<QNetworkRequest> requests;
    for (int i = 0; i < m_sources.size(); ++i)
        requests << QNetworkRequest(m_sources[i]);

    /* Create network request set: */
    createNetworkRequest(requests, UINetworkRequestType_HEAD, tr("Looking for %1...").arg(m_strDescription));
}
예제 #6
0
void Net::DownloadManager::handleReplyFinished(const QNetworkReply *reply)
{
    const ServiceID id = ServiceID::fromURL(reply->url());
    const auto waitingJobsIter = m_waitingJobs.find(id);
    if ((waitingJobsIter == m_waitingJobs.end()) || waitingJobsIter.value().isEmpty()) {
        m_busyServices.remove(id);
        return;
    }

    auto handler = static_cast<DownloadHandlerImpl *>(waitingJobsIter.value().dequeue());
    qDebug("Downloading %s...", qUtf8Printable(handler->url()));
    handler->assignNetworkReply(m_networkManager.get(createNetworkRequest(handler->downloadRequest())));
    handler->disconnect(this);
}
예제 #7
0
Net::DownloadHandler *Net::DownloadManager::download(const DownloadRequest &downloadRequest)
{
    // Process download request
    const QNetworkRequest request = createNetworkRequest(downloadRequest);
    const ServiceID id = ServiceID::fromURL(request.url());
    const bool isSequentialService = m_sequentialServices.contains(id);
    if (!isSequentialService || !m_busyServices.contains(id)) {
        qDebug("Downloading %s...", qUtf8Printable(downloadRequest.url()));
        if (isSequentialService)
            m_busyServices.insert(id);
        return new DownloadHandler {
            m_networkManager.get(request), this, downloadRequest};
    }

    auto *downloadHandler = new DownloadHandler {nullptr, this, downloadRequest};
    connect(downloadHandler, &DownloadHandler::destroyed, this, [this, id, downloadHandler]()
    {
        m_waitingJobs[id].removeOne(downloadHandler);
    });
    m_waitingJobs[id].enqueue(downloadHandler);
    return downloadHandler;
}
예제 #8
0
QNetworkReply* replyForAction(QString action) {
    QNetworkAccessManager& networkAccessManager = NetworkAccessManager::getInstance();
    return networkAccessManager.post(createNetworkRequest(), postDataForAction(action));
}