Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Implemented proxy support to be application global rather than set on…
… a per connection basis

git-svn-id: http://svn.osgeo.org/qgis/trunk@8649 c8812cc2-4d05-0410-92ff-de0c093fc19c
  • Loading branch information
timlinux committed Jun 15, 2008
1 parent 1131288 commit 0fa8024
Show file tree
Hide file tree
Showing 13 changed files with 136 additions and 637 deletions.
34 changes: 0 additions & 34 deletions python/core/qgsrasterdataprovider.sip
Expand Up @@ -29,40 +29,6 @@ public:

virtual ~QgsRasterDataProvider();


/**
* Gets the HTTP proxy host used for this connection
*/
virtual QString proxyHost() const = 0;

/**
* Gets the HTTP proxy port used for this connection
*/
virtual int proxyPort() const = 0;

/**
* Gets the HTTP proxy user name used for this connection
*/
virtual QString proxyUser() const = 0;

/**
* Gets the HTTP proxy user password used for this connection
*/
virtual QString proxyPass() const = 0;

/**
*
* Sets a proxy for the URL given in the constructor
*
*
* \retval TRUE if proxy setting is successful (if indeed it is supported)
*/
virtual bool setProxy(const QString & host,
int port,
const QString & user,
const QString & pass);


/**
* Add the list of WMS layer names to be rendered by this server
*/
Expand Down
22 changes: 2 additions & 20 deletions python/core/qgsrasterlayer.sip
Expand Up @@ -535,35 +535,17 @@ public:
const QStringList & layers = QStringList(),
const QStringList & styles = QStringList(),
const QString & format = QString(),
const QString & crs = QString(),
const QString & proxyHost = QString(),
int proxyPort = 80,
const QString & proxyUser = QString(),
const QString & proxyPass = QString());
const QString & crs = QString());

void setDataProvider( const QString & provider,
const QStringList & layers,
const QStringList & styles,
const QString & format,
const QString & crs,
const QString & proxyHost,
int proxyPort,
const QString & proxyUser,
const QString & proxyPass );
const QString & crs);

//! Does this layer use a provider for setting/retrieving data?
bool usesProvider();

/**
* Sets a proxy for the path given in the constructor
*
* \retval TRUE if proxy setting is successful (if indeed it is supported)
*/
bool setProxy(const QString & host = 0,
int port = 80,
const QString & user = 0,
const QString & pass = 0);

//! Which provider is being used for this Raster Layer?
QString providerKey();

Expand Down
39 changes: 26 additions & 13 deletions src/app/qgisapp.cpp
Expand Up @@ -45,6 +45,7 @@
#include <QMenuBar>
#include <QMenuItem>
#include <QMessageBox>
#include <QNetworkProxy>
#include <QPainter>
#include <QPictureIO>
#include <QPixmap>
Expand Down Expand Up @@ -331,6 +332,7 @@ static void customSrsValidation_(QgsSpatialRefSys* srs)
createLegend();
createOverview();
createMapTips();
setupProxy();

mComposer = new QgsComposer(this); // Map composer
mInternalClipboard = new QgsClipboard; // create clipboard
Expand Down Expand Up @@ -2216,12 +2218,7 @@ void QgisApp::addWmsLayer()
wmss->selectedLayers(),
wmss->selectedStylesForSelectedLayers(),
wmss->selectedImageEncoding(),
wmss->selectedCrs(),
wmss->connProxyHost(),
wmss->connProxyPort(),
wmss->connProxyUser(),
wmss->connProxyPass()
);
wmss->selectedCrs());
}
}

Expand Down Expand Up @@ -4355,6 +4352,7 @@ void QgisApp::options()
// bool splitterRedraw = mySettings.value("/qgis/splitterRedraw", true).toBool();
// canvasLegendSplit->setOpaqueResize(splitterRedraw);
// legendOverviewSplit->setOpaqueResize(splitterRedraw);
setupProxy();
}
}

Expand Down Expand Up @@ -5221,11 +5219,7 @@ QgsRasterLayer* QgisApp::addRasterLayer(QString const & rasterLayerPath,
QStringList const & layers,
QStringList const & styles,
QString const & format,
QString const & crs,
QString const & proxyHost,
int proxyPort,
QString const & proxyUser,
QString const & proxyPassword)
QString const & crs)
{
QgsDebugMsg("about to get library for " + providerKey);

Expand Down Expand Up @@ -5254,8 +5248,7 @@ QgsRasterLayer* QgisApp::addRasterLayer(QString const & rasterLayerPath,
+ " and CRS of " + crs );

// TODO: Remove the 0 when the raster layer becomes a full provider gateway.
layer = new QgsRasterLayer(0, rasterLayerPath, baseName, providerKey, layers, styles, format, crs,
proxyHost, proxyPort, proxyUser, proxyPassword);
layer = new QgsRasterLayer(0, rasterLayerPath, baseName, providerKey, layers, styles, format, crs);

QgsDebugMsg("Constructed new layer.");

Expand Down Expand Up @@ -5521,3 +5514,23 @@ void QgisApp::warnOlderProjectVersion(QString oldVersion)
}
return;
}

void QgisApp::setupProxy()
{
QSettings mySettings;
bool myFlag = mySettings.value("proxy/proxyEnabled", "0").toBool();
QNetworkProxy myProxy;
if (myFlag)
{
myProxy.setType(QNetworkProxy::HttpProxy);
myProxy.setHostName(mySettings.value("proxy/proxyHost", "").toString());
myProxy.setPort(mySettings.value("proxy/proxyPort", "").toInt());
myProxy.setUser(mySettings.value("proxy/proxyUser", "").toString());
myProxy.setPassword(mySettings.value("proxy/proxyPassword", "").toString());
}
else
{
// otherwise leave it blank to disable proxy usage
}
QNetworkProxy::setApplicationProxy(myProxy);
}
22 changes: 17 additions & 5 deletions src/app/qgisapp.h
Expand Up @@ -102,11 +102,7 @@ class QgisApp : public QMainWindow
QStringList const & layers,
QStringList const & styles,
QString const & format,
QString const & crs,
QString const & proxyHost = QString(),
int proxyPort = 80,
QString const & proxyUser = QString(),
QString const & proxyPassword = QString());
QString const & crs);

/** open a raster layer for the given file
@returns false if unable to open a raster layer for rasterFile
Expand Down Expand Up @@ -150,6 +146,22 @@ class QgisApp : public QMainWindow

void dropEvent(QDropEvent *);

/** Setup the proxy settings from the QSettings environment.
* This is not called by default in the constructor. Rather,
* the application must explicitly call setupProx(). If
* you write your own application and wish to explicitly
* set up your own proxy rather, you should e.g.
* QNetworkProxy proxy;
* proxy.setType(QNetworkProxy::Socks5Proxy);
* proxy.setHostName("proxy.example.com");
* proxy.setPort(1080);
* proxy.setUser("username");
* proxy.setPassword("password");
* QNetworkProxy::setApplicationProxy(proxy);
*
* (as documented in Qt documentation.
*/
void setupProxy();
//private slots:
public slots:
//! About QGis
Expand Down
59 changes: 23 additions & 36 deletions src/app/qgsnewhttpconnection.cpp
Expand Up @@ -19,61 +19,48 @@
#include "qgscontexthelp.h"
#include <QSettings>

QgsNewHttpConnection::QgsNewHttpConnection(QWidget *parent, const QString& baseKey, const QString& connName, Qt::WFlags fl): QDialog(parent, fl), mBaseKey(baseKey), mOriginalConnName(connName)
QgsNewHttpConnection::QgsNewHttpConnection(
QWidget *parent, const QString& baseKey, const QString& connName, Qt::WFlags fl):
QDialog(parent, fl),
mBaseKey(baseKey),
mOriginalConnName(connName)
{
setupUi(this);
connect(btnCancel, SIGNAL(clicked()), this, SLOT(reject()));
connect(btnOk, SIGNAL(clicked()), this, SLOT(saveConnection()));

if (!connName.isEmpty())
{
// populate the dialog with the information stored for the connection
// populate the fields with the stored setting parameters

QSettings settings;
{
// populate the dialog with the information stored for the connection
// populate the fields with the stored setting parameters

QString key = mBaseKey + connName;
txtName->setText (connName);
txtUrl->setText (settings.value(key + "/url").toString());
txtProxyHost->setText(settings.value(key + "/proxyhost").toString());
txtProxyPort->setText(settings.value(key + "/proxyport").toString());
txtProxyUser->setText(settings.value(key + "/proxyuser").toString());
txtProxyPass->setText(settings.value(key + "/proxypassword").toString());
}
}
QSettings settings;

QgsNewHttpConnection::~QgsNewHttpConnection()
{
QString key = mBaseKey + connName;
txtName->setText (connName);
txtUrl->setText (settings.value(key + "/url").toString());
}
connect(buttonBox, SIGNAL(helpRequested()), this, SLOT(helpRequested()));
}

void QgsNewHttpConnection::testConnection()
QgsNewHttpConnection::~QgsNewHttpConnection()
{
// following line uses Qt SQL plugin - currently not used
// QSqlDatabase *testCon = QSqlDatabase::addDatabase("QPSQL7","testconnection");


}

void QgsNewHttpConnection::saveConnection()
void QgsNewHttpConnection::accept()
{
QSettings settings;
QString key = mBaseKey + txtName->text();

//delete original entry first
if(!mOriginalConnName.isNull() && mOriginalConnName != key)
{
settings.remove(mBaseKey + mOriginalConnName);
}
{
settings.remove(mBaseKey + mOriginalConnName);
}
settings.setValue(key + "/url", txtUrl->text().trimmed());
settings.setValue(key + "/proxyhost", txtProxyHost->text().trimmed());
settings.setValue(key + "/proxyport", txtProxyPort->text().trimmed());
settings.setValue(key + "/proxyuser", txtProxyUser->text().trimmed());
settings.setValue(key + "/proxypassword", txtProxyPass->text().trimmed());

accept();

QDialog::accept();
}

void QgsNewHttpConnection::on_btnHelp_clicked()
void QgsNewHttpConnection::helpRequested()
{
QgsContextHelp::run(context_id);
}
6 changes: 2 additions & 4 deletions src/app/qgsnewhttpconnection.h
Expand Up @@ -31,13 +31,11 @@ class QgsNewHttpConnection : public QDialog, private Ui::QgsNewHttpConnectionBas
QgsNewHttpConnection(QWidget *parent = 0, const QString& baseKey = "/Qgis/connections-wms/", const QString& connName = QString::null, Qt::WFlags fl = QgisGui::ModalDialogFlags);
//! Destructor
~QgsNewHttpConnection();
//! Tests the connection using the parameters supplied
void testConnection();
public slots:
//! Saves the connection to ~/.qt/qgisrc
void saveConnection();
void accept();
//! Show context help
void on_btnHelp_clicked();
void helpRequested();
private:
QString mBaseKey;
QString mOriginalConnName; //store initial name to delete entry in case of rename
Expand Down

0 comments on commit 0fa8024

Please sign in to comment.