Make use of the new Proxy handling class.

This commit is contained in:
Klaas Freitag 2014-01-16 12:07:58 +01:00
parent 671100ce5c
commit ec9efd7894
8 changed files with 26 additions and 94 deletions

View File

@ -31,16 +31,15 @@
#include "mirall/theme.h" #include "mirall/theme.h"
#include "mirall/updater.h" #include "mirall/updater.h"
#include "mirall/utility.h" #include "mirall/utility.h"
#include "mirall/clientproxy.h"
#include "creds/abstractcredentials.h" #include "creds/abstractcredentials.h"
#if defined(Q_OS_WIN) #if defined(QOS_WIN)
#include <windows.h> #include <windows.h>
#endif #endif
#include <QTranslator> #include <QTranslator>
#include <QNetworkProxy>
#include <QNetworkProxyFactory>
#include <QMenu> #include <QMenu>
#include <QMessageBox> #include <QMessageBox>
@ -123,13 +122,13 @@ Application::Application(int &argc, char **argv) :
connect (_theme, SIGNAL(systrayUseMonoIconsChanged(bool)), SLOT(slotUseMonoIconsChanged(bool))); connect (_theme, SIGNAL(systrayUseMonoIconsChanged(bool)), SLOT(slotUseMonoIconsChanged(bool)));
FolderMan::instance()->setupFolders(); FolderMan::instance()->setupFolders();
slotSetupProxy(); // folders have to be defined first. _proxy.setupQtProxyFromConfig(); // folders have to be defined first, than we set up the Qt proxy.
_gui = new ownCloudGui(this); _gui = new ownCloudGui(this);
if( _showLogWindow ) { if( _showLogWindow ) {
_gui->slotToggleLogBrowser(); // _showLogWindow is set in parseOptions. _gui->slotToggleLogBrowser(); // _showLogWindow is set in parseOptions.
} }
connect( _gui, SIGNAL(setupProxy()), SLOT(slotSetupProxy()));
if (account) { if (account) {
connect(account, SIGNAL(stateChanged(int)), _gui, SLOT(slotAccountStateChanged())); connect(account, SIGNAL(stateChanged(int)), _gui, SLOT(slotAccountStateChanged()));
} }
@ -314,54 +313,6 @@ void Application::setupLogging()
} }
QNetworkProxy proxyFromConfig(const MirallConfigFile& cfg)
{
QNetworkProxy proxy;
if (cfg.proxyHostName().isEmpty())
return QNetworkProxy();
proxy.setHostName(cfg.proxyHostName());
proxy.setPort(cfg.proxyPort());
if (cfg.proxyNeedsAuth()) {
proxy.setUser(cfg.proxyUser());
proxy.setPassword(cfg.proxyPassword());
}
return proxy;
}
void Application::slotSetupProxy()
{
Mirall::MirallConfigFile cfg;
int proxyType = cfg.proxyType();
QNetworkProxy proxy = proxyFromConfig(cfg);
switch(proxyType) {
case QNetworkProxy::NoProxy:
QNetworkProxyFactory::setUseSystemConfiguration(false);
QNetworkProxy::setApplicationProxy(QNetworkProxy::NoProxy);
break;
case QNetworkProxy::DefaultProxy:
QNetworkProxyFactory::setUseSystemConfiguration(true);
break;
case QNetworkProxy::Socks5Proxy:
proxy.setType(QNetworkProxy::Socks5Proxy);
QNetworkProxyFactory::setUseSystemConfiguration(false);
QNetworkProxy::setApplicationProxy(proxy);
break;
case QNetworkProxy::HttpProxy:
proxy.setType(QNetworkProxy::HttpProxy);
QNetworkProxyFactory::setUseSystemConfiguration(false);
QNetworkProxy::setApplicationProxy(proxy);
break;
default:
break;
}
FolderMan::instance()->setDirtyProxy(true);
FolderMan::instance()->slotScheduleAllFolders();
}
void Application::slotUseMonoIconsChanged(bool) void Application::slotUseMonoIconsChanged(bool)
{ {
_gui->slotComputeOverallSyncStatus(); _gui->slotComputeOverallSyncStatus();

View File

@ -26,6 +26,7 @@
#include "mirall/owncloudgui.h" #include "mirall/owncloudgui.h"
#include "mirall/connectionvalidator.h" #include "mirall/connectionvalidator.h"
#include "mirall/progressdispatcher.h" #include "mirall/progressdispatcher.h"
#include "mirall/clientproxy.h"
class QMessageBox; class QMessageBox;
class QSystemTrayIcon; class QSystemTrayIcon;
@ -71,7 +72,6 @@ protected slots:
void slotCheckConnection(); void slotCheckConnection();
void slotConnectionValidatorResult(ConnectionValidator::Status); void slotConnectionValidatorResult(ConnectionValidator::Status);
void slotStartUpdateDetector(); void slotStartUpdateDetector();
void slotSetupProxy();
void slotUseMonoIconsChanged( bool ); void slotUseMonoIconsChanged( bool );
void slotCredentialsFetched(); void slotCredentialsFetched();
void slotLogin(); void slotLogin();
@ -102,6 +102,8 @@ private:
bool _userTriggeredConnect; bool _userTriggeredConnect;
QPointer<QMessageBox> _connectionMsgBox; QPointer<QMessageBox> _connectionMsgBox;
ClientProxy _proxy;
friend class ownCloudGui; // for _startupNetworkError friend class ownCloudGui; // for _startupNetworkError
}; };

View File

@ -24,6 +24,7 @@
#include "mirall/syncjournalfilerecord.h" #include "mirall/syncjournalfilerecord.h"
#include "mirall/syncresult.h" #include "mirall/syncresult.h"
#include "mirall/utility.h" #include "mirall/utility.h"
#include "mirall/clientproxy.h"
#include "creds/abstractcredentials.h" #include "creds/abstractcredentials.h"
@ -520,30 +521,6 @@ void Folder::setIgnoredFiles()
} }
} }
void Folder::setProxy()
{
/* Store proxy */
QUrl proxyUrl(AccountManager::instance()->account()->url());
QList<QNetworkProxy> proxies = QNetworkProxyFactory::proxyForQuery(QNetworkProxyQuery(proxyUrl));
// We set at least one in Application
Q_ASSERT(proxies.count() > 0);
QNetworkProxy proxy = proxies.first();
if (proxy.type() == QNetworkProxy::NoProxy) {
qDebug() << "Passing NO proxy to csync for" << proxyUrl;
} else {
qDebug() << "Passing" << proxy.hostName() << "of proxy type " << proxy.type()
<< " to csync for" << proxyUrl;
}
_proxy_type = proxyTypeToCStr(proxy.type());
_proxy_host = proxy.hostName().toUtf8();
_proxy_port = proxy.port();
_proxy_user = proxy.user().toUtf8();
_proxy_pwd = proxy.password().toUtf8();
setProxyDirty(false);
}
void Folder::setProxyDirty(bool value) void Folder::setProxyDirty(bool value)
{ {
_proxyDirty = value; _proxyDirty = value;
@ -587,15 +564,11 @@ void Folder::startSync(const QStringList &pathList)
QMetaObject::invokeMethod(this, "slotCSyncFinished", Qt::QueuedConnection); QMetaObject::invokeMethod(this, "slotCSyncFinished", Qt::QueuedConnection);
return; return;
} }
setProxy(); _clientProxy.setCSyncProxy(AccountManager::instance()->account()->url(), _csync_ctx);
} else if (proxyDirty()) { } else if (proxyDirty()) {
setProxy(); _clientProxy.setCSyncProxy(AccountManager::instance()->account()->url(), _csync_ctx);
setProxyDirty(false);
} }
csync_set_module_property(_csync_ctx, "proxy_type", const_cast<char*>(_proxy_type) );
csync_set_module_property(_csync_ctx, "proxy_host", _proxy_host.data() );
csync_set_module_property(_csync_ctx, "proxy_port", &_proxy_port );
csync_set_module_property(_csync_ctx, "proxy_user", _proxy_user.data() );
csync_set_module_property(_csync_ctx, "proxy_pwd", _proxy_pwd.data() );
if (_thread && _thread->isRunning()) { if (_thread && _thread->isRunning()) {
qCritical() << "* ERROR csync is still running and new sync requested."; qCritical() << "* ERROR csync is still running and new sync requested.";

View File

@ -21,6 +21,9 @@
#include "mirall/progressdispatcher.h" #include "mirall/progressdispatcher.h"
#include "mirall/csyncthread.h" #include "mirall/csyncthread.h"
#include "mirall/syncjournaldb.h" #include "mirall/syncjournaldb.h"
#include "mirall/clientproxy.h"
#include <csync.h>
#include <QDir> #include <QDir>
#include <QHash> #include <QHash>
@ -40,6 +43,7 @@ namespace Mirall {
class FolderWatcher; class FolderWatcher;
typedef enum SyncFileStatus_s { typedef enum SyncFileStatus_s {
FILE_STATUS_NONE, FILE_STATUS_NONE,
FILE_STATUS_EVAL, FILE_STATUS_EVAL,
@ -188,7 +192,7 @@ private:
void setIgnoredFiles(); void setIgnoredFiles();
void setProxy();
const char* proxyTypeToCStr(QNetworkProxy::ProxyType type); const char* proxyTypeToCStr(QNetworkProxy::ProxyType type);
void bubbleUpSyncResult(); void bubbleUpSyncResult();
@ -219,6 +223,8 @@ private:
SyncJournalDb _journal; SyncJournalDb _journal;
ClientProxy _clientProxy;
CSYNC *_csync_ctx; CSYNC *_csync_ctx;
const char *_proxy_type; const char *_proxy_type;

View File

@ -31,9 +31,6 @@ public:
explicit GeneralSettings(QWidget *parent = 0); explicit GeneralSettings(QWidget *parent = 0);
~GeneralSettings(); ~GeneralSettings();
signals:
void proxySettingsChanged();
private slots: private slots:
void saveMiscSettings(); void saveMiscSettings();
void slotToggleLaunchOnStartup(bool); void slotToggleLaunchOnStartup(bool);

View File

@ -19,6 +19,7 @@
#include "mirall/application.h" #include "mirall/application.h"
#include "mirall/utility.h" #include "mirall/utility.h"
#include "mirall/mirallconfigfile.h" #include "mirall/mirallconfigfile.h"
#include "mirall/folderman.h"
#include <QNetworkProxy> #include <QNetworkProxy>
@ -138,7 +139,13 @@ void NetworkSettings::saveProxySettings()
_ui->portSpinBox->value(), needsAuth, user, pass); _ui->portSpinBox->value(), needsAuth, user, pass);
} }
emit proxySettingsChanged(); ClientProxy proxy;
proxy.setupQtProxyFromConfig(); // Refresh the Qt proxy settings as the
// quota check can happen all the time.
// ...and set the folders dirty, they refresh their proxy next time they
// start the sync.
FolderMan::instance()->setDirtyProxy(true);
} }
void NetworkSettings::saveBWLimitSettings() void NetworkSettings::saveBWLimitSettings()

View File

@ -31,9 +31,6 @@ public:
explicit NetworkSettings(QWidget *parent = 0); explicit NetworkSettings(QWidget *parent = 0);
~NetworkSettings(); ~NetworkSettings();
signals:
void proxySettingsChanged();
private slots: private slots:
void saveProxySettings(); void saveProxySettings();
void saveBWLimitSettings(); void saveBWLimitSettings();

View File

@ -73,7 +73,6 @@ SettingsDialog::SettingsDialog(ownCloudGui *gui, QWidget *parent) :
_ui->labelWidget->addItem(network); _ui->labelWidget->addItem(network);
NetworkSettings *networkSettings = new NetworkSettings; NetworkSettings *networkSettings = new NetworkSettings;
_ui->stack->addWidget(networkSettings); _ui->stack->addWidget(networkSettings);
connect(networkSettings, SIGNAL(proxySettingsChanged()), gui, SIGNAL(setupProxy()));
FolderMan *folderMan = FolderMan::instance(); FolderMan *folderMan = FolderMan::instance();
connect( folderMan, SIGNAL(folderSyncStateChange(QString)), connect( folderMan, SIGNAL(folderSyncStateChange(QString)),