E5Network/E5NetworkProxyFactory.py

changeset 289
baf4c1354c6a
parent 286
652f5159f1c3
child 317
f6b0163a21be
--- 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)

eric ide

mercurial