Beispiel #1
0
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();
}
Beispiel #3
0
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;
}