diff --git a/src/mirall/application.cpp b/src/mirall/application.cpp index 38fd4d08d5..992f448f07 100644 --- a/src/mirall/application.cpp +++ b/src/mirall/application.cpp @@ -558,21 +558,22 @@ void Application::setupProxy() switch(proxyType) { case QNetworkProxy::NoProxy: QNetworkProxy::setApplicationProxy(QNetworkProxy::NoProxy); - return; + break; case QNetworkProxy::DefaultProxy: QNetworkProxyFactory::setUseSystemConfiguration(true); - return; + break; case QNetworkProxy::Socks5Proxy: proxy.setType(QNetworkProxy::Socks5Proxy); QNetworkProxy::setApplicationProxy(proxy); - return; + break; case QNetworkProxy::HttpProxy: proxy.setType(QNetworkProxy::HttpProxy); QNetworkProxy::setApplicationProxy(proxy); - return; + break; default: - return; + break; } + _folderMan->setProxy(); } /* diff --git a/src/mirall/folder.h b/src/mirall/folder.h index f31ea5dbc8..385911856b 100644 --- a/src/mirall/folder.h +++ b/src/mirall/folder.h @@ -173,6 +173,11 @@ public slots: */ void setPollInterval( int ); + /** + * If folder is network-based, reimplement to react to proxy changes + */ + virtual void setProxy() {} + protected: /** * The minimum amounts of seconds to wait before diff --git a/src/mirall/folderman.cpp b/src/mirall/folderman.cpp index a32f7c20b2..2fbf6a9c86 100644 --- a/src/mirall/folderman.cpp +++ b/src/mirall/folderman.cpp @@ -490,4 +490,11 @@ bool FolderMan::startFromScratch( const QString& localFolder ) return false; } +void FolderMan::setProxy() +{ + foreach( Folder *f, _folderMap.values() ) { + f->setProxy(); + } +} + } diff --git a/src/mirall/folderman.h b/src/mirall/folderman.h index 78a1508090..1bd2e4b41d 100644 --- a/src/mirall/folderman.h +++ b/src/mirall/folderman.h @@ -81,6 +81,11 @@ public: */ bool startFromScratch( const QString& ); + /** + * called whenever proxy configuration changes + */ + void setProxy(); + signals: /** * signal to indicate a folder named by alias has changed its sync state. diff --git a/src/mirall/owncloudfolder.cpp b/src/mirall/owncloudfolder.cpp index 2329c3eb32..3d10f37b83 100644 --- a/src/mirall/owncloudfolder.cpp +++ b/src/mirall/owncloudfolder.cpp @@ -100,23 +100,8 @@ ownCloudFolder::ownCloudFolder(const QString &alias, qDebug() << "Could not initialize csync!"; _csync_ctx = 0; } + setProxy(); - if( _csync_ctx ) { - /* Store proxy */ - QList proxies = QNetworkProxyFactory::proxyForQuery(QUrl(cfgFile.ownCloudUrl())); - // We set at least one in Application - Q_ASSERT(proxies.count() > 0); - QNetworkProxy proxy = proxies.first(); - int proxyPort = proxy.port(); - - csync_set_module_property(_csync_ctx, "proxy_type", (char*) proxyTypeToCStr(proxy.type()) ); - csync_set_module_property(_csync_ctx, "proxy_host", proxy.hostName().toUtf8().data() ); - csync_set_module_property(_csync_ctx, "proxy_port", &proxyPort ); - csync_set_module_property(_csync_ctx, "proxy_user", proxy.user().toUtf8().data() ); - csync_set_module_property(_csync_ctx, "proxy_pwd" , proxy.password().toUtf8().data() ); - - csync_set_module_property(_csync_ctx, "csync_context", _csync_ctx); - } } } @@ -131,6 +116,34 @@ ownCloudFolder::~ownCloudFolder() csync_destroy(_csync_ctx); } +void ownCloudFolder::setProxy() +{ + if( _csync_ctx ) { + /* Store proxy */ + MirallConfigFile cfgFile; + QUrl proxyUrl(cfgFile.ownCloudUrl()); + QList proxies = QNetworkProxyFactory::proxyForQuery(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" << cfgFile.ownCloudUrl(); + } else { + qDebug() << "Passing" << proxy.hostName() << "of proxy type " << proxy.type() + << " to csync for" << cfgFile.ownCloudUrl(); + } + int proxyPort = proxy.port(); + + csync_set_module_property(_csync_ctx, "proxy_type", (char*) proxyTypeToCStr(proxy.type()) ); + csync_set_module_property(_csync_ctx, "proxy_host", proxy.hostName().toUtf8().data() ); + csync_set_module_property(_csync_ctx, "proxy_port", &proxyPort ); + csync_set_module_property(_csync_ctx, "proxy_user", proxy.user().toUtf8().data() ); + csync_set_module_property(_csync_ctx, "proxy_pwd" , proxy.password().toUtf8().data() ); + + csync_set_module_property(_csync_ctx, "csync_context", _csync_ctx); + } +} + const char* ownCloudFolder::proxyTypeToCStr(QNetworkProxy::ProxyType type) { switch (type) { diff --git a/src/mirall/owncloudfolder.h b/src/mirall/owncloudfolder.h index 9228e04d15..248e97f922 100644 --- a/src/mirall/owncloudfolder.h +++ b/src/mirall/owncloudfolder.h @@ -72,6 +72,8 @@ public: /* get status about a singel file. */ SyncFileStatus fileStatus( const QString& ); + void setProxy(); + public slots: void startSync(); void slotTerminateSync();