diff -r a4e81ad85e82 -r baf4c1354c6a E5Network/E5NetworkProxyFactory.py --- a/E5Network/E5NetworkProxyFactory.py Thu May 27 18:07:41 2010 +0200 +++ b/E5Network/E5NetworkProxyFactory.py Thu May 27 20:27:46 2010 +0200 @@ -18,6 +18,48 @@ import Preferences +def schemeFromProxyType(proxyType): + """ + Module function to determine the scheme name from the proxy type. + + @param proxyType type of the proxy (QNetworkProxy.ProxyType) + @return scheme (string, one of Http, Https, Ftp) + """ + scheme = "" + if proxyType == QNetworkProxy.HttpProxy: + scheme = "Http" + elif proxyType == QNetworkProxy.HttpCachingProxy: + scheme = "Https" + elif proxyType == QNetworkProxy.FtpCachingProxy: + scheme = "Ftp" + elif proxyType == QNetworkProxy.NoProxy: + scheme = "NoProxy" + return scheme + +def proxyAuthenticationRequired(proxy, auth): + """ + Module slot to handle a proxy authentication request. + + @param proxy reference to the proxy object (QNetworkProxy) + @param auth reference to the authenticator object (QAuthenticator) + """ + info = QCoreApplication.translate("E5NetworkProxyFactory", + "<b>Connect to proxy '{0}' using:</b>")\ + .format(Qt.escape(proxy.hostName())) + + dlg = AuthenticationDialog(info, proxy.user(), True) + if dlg.exec_() == QDialog.Accepted: + username, password = dlg.getData() + auth.setUser(username) + auth.setPassword(password) + if dlg.shallSave(): + scheme = schemeFromProxyType(proxy.type()) + if scheme and scheme != "NoProxy": + Preferences.setUI("ProxyUser/{0}".format(scheme), username) + Preferences.setUI("ProxyPassword/{0}".format(scheme), password) + proxy.setUser(username) + proxy.setPassword(password) + class E5NetworkProxyFactory(QNetworkProxyFactory): """ Class implementing a network proxy factory. @@ -51,51 +93,60 @@ if value and name[-6:] == '_proxy' and \ name[:-6] == query.protocolTag().lower(): url = QUrl(value) - if url.scheme() in ["http", "https"]: + if url.scheme() == "http": proxyType = QNetworkProxy.HttpProxy + elif url.scheme() == "https": + proxyType = QNetworkProxy.HttpCachingProxy + elif url.scheme() == "ftp": + proxyType = QNetworkProxy.FtpCachingProxy else: - proxyType = QNetworkProxy.FtpCachingProxy + proxyType = QNetworkProxy.HttpProxy proxy = QNetworkProxy(proxyType, url.host(), url.port(), url.userName(), url.password()) proxyList = [proxy] break - proxyList[0].setUser(Preferences.getUI("ProxyUser/Http")) - proxyList[0].setPassword(Preferences.getUI("ProxyPassword/Http")) + scheme = schemeFromProxyType(proxyList[0].type()) + if scheme == "": + scheme = "Http" + if scheme != "NoProxy": + proxyList[0].setUser( + Preferences.getUI("ProxyUser/{0}".format(scheme))) + proxyList[0].setPassword( + Preferences.getUI("ProxyPassword/{0}".format(scheme))) return proxyList else: - host = Preferences.getUI("ProxyHost/Http") + if Preferences.getUI("UseHttpProxyForAll"): + protocol = "Http" + else: + protocol = query.protocolTag().capitalize() + host = Preferences.getUI("ProxyHost/{0}".format(protocol)) if not host: QMessageBox.critical(None, - self.trUtf8("Proxy Configuration Error"), - self.trUtf8("""Proxy usage was activated""" - """ but no proxy host configured.""")) + QCoreApplication.translate("E5NetworkProxyFactory", + "Proxy Configuration Error"), + QCoreApplication.translate("E5NetworkProxyFactory", + """Proxy usage was activated""" + """ but no proxy host for protocol""" + """ '{0}' configured.""").format(protocol)) return [QNetworkProxy(QNetworkProxy.DefaultProxy)] else: - proxy = QNetworkProxy(QNetworkProxy.HttpProxy, host, - Preferences.getUI("ProxyPort/Http"), - Preferences.getUI("ProxyUser/Http"), - Preferences.getUI("ProxyPassword/Http")) + if protocol == "Http": + proxy = QNetworkProxy(QNetworkProxy.HttpProxy, host, + Preferences.getUI("ProxyPort/Http"), + Preferences.getUI("ProxyUser/Http"), + Preferences.getUI("ProxyPassword/Http")) + elif protocol == "Https": + proxy = QNetworkProxy(QNetworkProxy.HttpCachingProxy, host, + Preferences.getUI("ProxyPort/Https"), + Preferences.getUI("ProxyUser/Https"), + Preferences.getUI("ProxyPassword/Https")) + elif protocol == "Ftp": + proxy = QNetworkProxy(QNetworkProxy.FtpCachingProxy, host, + Preferences.getUI("ProxyPort/Ftp"), + Preferences.getUI("ProxyUser/Ftp"), + Preferences.getUI("ProxyPassword/Ftp")) + else: + proxy = QNetworkProxy(QNetworkProxy.DefaultProxy) return [proxy, QNetworkProxy(QNetworkProxy.DefaultProxy)] else: return [QNetworkProxy(QNetworkProxy.NoProxy)] - -def proxyAuthenticationRequired(proxy, auth): - """ - Module slot to handle a proxy authentication request. - - @param proxy reference to the proxy object (QNetworkProxy) - @param auth reference to the authenticator object (QAuthenticator) - """ - info = QCoreApplication.translate("E5NetworkProxyFactory", "<b>Connect to proxy '{0}' using:</b>")\ - .format(Qt.escape(proxy.hostName())) - - dlg = AuthenticationDialog(info, proxy.user(), True) - if dlg.exec_() == QDialog.Accepted: - username, password = dlg.getData() - auth.setUser(username) - auth.setPassword(password) - if dlg.shallSave(): - Preferences.setUI("ProxyUser/Http", username) - Preferences.setUI("ProxyPassword/Http", password) - proxy.setUser(username) - proxy.setPassword(password)