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; }
/* Downloading start: */ void UIDownloader::sltStartDownloading() { /* Set state to acknowledging: */ m_state = UIDownloaderState_Downloading; /* Send GET request: */ createNetworkRequest(UINetworkRequestType_GET, QList<QUrl>() << m_source); }
/* Acknowledging start: */ void UIDownloader::sltStartAcknowledging() { /* Set state to acknowledging: */ m_state = UIDownloaderState_Acknowledging; /* Send HEAD requests: */ createNetworkRequest(UINetworkRequestType_HEAD, m_sources); }
/* 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)); }
/* 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)); }
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); }
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; }
QNetworkReply* replyForAction(QString action) { QNetworkAccessManager& networkAccessManager = NetworkAccessManager::getInstance(); return networkAccessManager.post(createNetworkRequest(), postDataForAction(action)); }