Helpviewer/Network/FtpReply.py

changeset 304
98429932e0c9
parent 287
52b4c72080d2
child 311
df292f01b392
--- a/Helpviewer/Network/FtpReply.py	Sat May 29 15:25:12 2010 +0200
+++ b/Helpviewer/Network/FtpReply.py	Sat May 29 15:26:00 2010 +0200
@@ -10,7 +10,7 @@
 from PyQt4.QtCore import QByteArray, QIODevice, Qt, QUrl, QTimer, QBuffer
 from PyQt4.QtGui import QPixmap
 from PyQt4.QtNetwork import QFtp, QNetworkReply, QNetworkRequest, QUrlInfo, \
-    QNetworkProxyQuery, QNetworkProxy
+    QNetworkProxyQuery, QNetworkProxy, QAuthenticator
 from PyQt4.QtWebKit import QWebSettings
 
 import UI.PixmapCache
@@ -103,6 +103,8 @@
         """
         QNetworkReply.__init__(self, parent)
         
+        self.__manager = parent
+        
         self.__ftp = QFtp(self)
         self.__ftp.listInfo.connect(self.__processListInfo)
         self.__ftp.readyRead.connect(self.__processData)
@@ -203,19 +205,35 @@
         @param error flag indicating an error condition (boolean)
         """
         if error:
-            if error == QFtp.HostNotFound:
+            if self.__ftp.error() == QFtp.HostNotFound:
                 err = QNetworkReply.HostNotFoundError
-            elif error == QFtp.ConnectionRefused:
+            elif self.__ftp.error() == QFtp.ConnectionRefused:
                 err = QNetworkReply.ConnectionRefusedError
             else:
-                err = QNetworkReply.ContentNotFoundError
+                if self.__ftp.state() != QFtp.LoggedIn and \
+                   self.__ftp.state() == QFtp.Connected:
+                    # authentication is required
+                    newUrl = self.url()
+                    auth = QAuthenticator()
+                    self.__manager.authenticationRequired.emit(self, auth)
+                    if not auth.isNull():
+                        newUrl.setUserName(auth.user())
+                        newUrl.setPassword(auth.password())
+                        self.setUrl(newUrl)
+                        self.__ftp.login(auth.user(), auth.password())
+                        return
+                
+                err = QNetworkReply.ProtocolFailure
             self.setError(err, self.__ftp.errorString())
             self.error.emit(err)
+            self.finished.emit()
+            if self.__ftp.state() != QFtp.Unconnected:
+                self.__ftp.close()
             return
         
         cmd = self.__ftp.currentCommand()
         if cmd == QFtp.ConnectToHost:
-            self.__ftp.login()
+            self.__ftp.login(self.url().userName(), self.url().password())
         elif cmd == QFtp.Login:
             self.__ftp.list(self.url().path())
         elif cmd == QFtp.List:

eric ide

mercurial