void QgsFileDownloader::startDownload() { QgsNetworkAccessManager* nam = QgsNetworkAccessManager::instance(); QNetworkRequest request( mUrl ); if ( mReply ) { disconnect( mReply, &QNetworkReply::readyRead, this, &QgsFileDownloader::onReadyRead ); disconnect( mReply, &QNetworkReply::finished, this, &QgsFileDownloader::onFinished ); disconnect( mReply, &QNetworkReply::downloadProgress, this, &QgsFileDownloader::onDownloadProgress ); mReply->abort(); mReply->deleteLater(); } mReply = nam->get( request ); connect( mReply, &QNetworkReply::readyRead, this, &QgsFileDownloader::onReadyRead ); connect( mReply, &QNetworkReply::finished, this, &QgsFileDownloader::onFinished ); connect( mReply, &QNetworkReply::downloadProgress, this, &QgsFileDownloader::onDownloadProgress ); connect( nam, &QgsNetworkAccessManager::requestTimedOut, this, &QgsFileDownloader::onRequestTimedOut, Qt::UniqueConnection ); #ifndef QT_NO_SSL connect( nam, &QgsNetworkAccessManager::sslErrors, this, &QgsFileDownloader::onSslErrors, Qt::UniqueConnection ); #endif if ( mGuiNotificationsEnabled ) { mProgressDialog = new QProgressDialog(); mProgressDialog->setWindowTitle( tr( "Download" ) ); mProgressDialog->setLabelText( tr( "Downloading %1." ).arg( mFile.fileName() ) ); mProgressDialog->show(); connect( mProgressDialog, &QProgressDialog::canceled, this, &QgsFileDownloader::onDownloadCanceled ); } }
bool QgsGlobePluginDialog::validateRemoteUri( const QString &uri, QString &errMsg ) const { QUrl url( uri ); QgsNetworkAccessManager *nam = QgsNetworkAccessManager::instance(); QNetworkReply *reply = nullptr; while ( true ) { QNetworkRequest req( url ); req.setRawHeader( "User-Agent", "Wget/1.13.4" ); reply = nam->get( req ); QTimer timer; QEventLoop loop; QObject::connect( &timer, SIGNAL( timeout() ), &loop, SLOT( quit() ) ); QObject::connect( reply, SIGNAL( finished() ), &loop, SLOT( quit() ) ); timer.setSingleShot( true ); timer.start( 500 ); loop.exec(); if ( reply->isRunning() ) { // Timeout reply->close(); delete reply; errMsg = tr( "Timeout" ); return false; } QUrl redirectUrl = reply->attribute( QNetworkRequest::RedirectionTargetAttribute ).toUrl(); if ( redirectUrl.isValid() && url != redirectUrl ) { delete reply; url = redirectUrl; } else { break; } } errMsg = reply->error() == QNetworkReply::NoError ? QString() : reply->errorString(); delete reply; return errMsg.isEmpty(); }
bool QgsOSMDownload::start() { mError.clear(); if ( mQuery.isEmpty() ) { mError = tr( "No query has been specified." ); return false; } if ( mReply ) { mError = tr( "There is already a pending request for data." ); return false; } if ( !mFile.open( QIODevice::WriteOnly | QIODevice::Truncate ) ) { mError = tr( "Cannot open output file: %1" ).arg( mFile.fileName() ); return false; } QgsNetworkAccessManager* nwam = QgsNetworkAccessManager::instance(); QUrl url( mServiceUrl ); url.addQueryItem( QStringLiteral( "data" ), mQuery ); QNetworkRequest request( url ); request.setRawHeader( "User-Agent", "QGIS" ); mReply = nwam->get( request ); connect( mReply, SIGNAL( readyRead() ), this, SLOT( onReadyRead() ) ); connect( mReply, SIGNAL( error( QNetworkReply::NetworkError ) ), this, SLOT( onError( QNetworkReply::NetworkError ) ) ); connect( mReply, SIGNAL( finished() ), this, SLOT( onFinished() ) ); connect( mReply, SIGNAL( downloadProgress( qint64, qint64 ) ), this, SIGNAL( downloadProgress( qint64, qint64 ) ) ); return true; }