NetworkResult NetworkFactory::performNetworkOperation(const QString &url, int timeout, const QByteArray &input_data, const QString &input_content_type, QByteArray &output, QNetworkAccessManager::Operation operation, bool protected_contents, const QString &username, const QString &password, bool set_basic_header) { Downloader downloader; QEventLoop loop; NetworkResult result; QString str(input_data); downloader.appendRawHeader("Content-Type", input_content_type.toLocal8Bit()); if (set_basic_header) { QString basic_value = username + ":" + password; QString header_value = QString("Basic ") + QString(basic_value.toUtf8().toBase64()); downloader.appendRawHeader("Authorization", header_value.toLocal8Bit()); } // We need to quit event loop when the download finishes. QObject::connect(&downloader, SIGNAL(completed(QNetworkReply::NetworkError)), &loop, SLOT(quit())); downloader.manipulateData(url, operation, input_data, timeout, protected_contents, username, password); loop.exec(); output = downloader.lastOutputData(); result.first = downloader.lastOutputError(); result.second = downloader.lastContentType(); return result; }
NetworkResult NetworkFactory::downloadFeedFile(const QString &url, int timeout, QByteArray &output, bool protected_contents, const QString &username, const QString &password) { // Here, we want to achieve "synchronous" approach because we want synchronout download API for // some use-cases too. Downloader downloader; QEventLoop loop; NetworkResult result; downloader.appendRawHeader("Accept", ACCEPT_HEADER_FOR_FEED_DOWNLOADER); // We need to quit event loop when the download finishes. QObject::connect(&downloader, SIGNAL(completed(QNetworkReply::NetworkError)), &loop, SLOT(quit())); downloader.downloadFile(url, timeout, protected_contents, username, password); loop.exec(); output = downloader.lastOutputData(); result.first = downloader.lastOutputError(); result.second = downloader.lastContentType(); return result; }