Sun, 23 Sep 2012 16:23:04 +0200
Changed the FTP sync code in the eric web browser to use ftplib.
--- a/Documentation/Help/source.qhp Sat Sep 22 19:40:50 2012 +0200 +++ b/Documentation/Help/source.qhp Sun Sep 23 16:23:04 2012 +0200 @@ -4534,13 +4534,15 @@ <keyword name="FtpSyncHandler (Constructor)" id="FtpSyncHandler (Constructor)" ref="eric5.Helpviewer.Sync.FtpSyncHandler.html#FtpSyncHandler.__init__" /> <keyword name="FtpSyncHandler (Module)" id="FtpSyncHandler (Module)" ref="eric5.Helpviewer.Sync.FtpSyncHandler.html" /> <keyword name="FtpSyncHandler.__changeToStore" id="FtpSyncHandler.__changeToStore" ref="eric5.Helpviewer.Sync.FtpSyncHandler.html#FtpSyncHandler.__changeToStore" /> - <keyword name="FtpSyncHandler.__checkSyncFiles" id="FtpSyncHandler.__checkSyncFiles" ref="eric5.Helpviewer.Sync.FtpSyncHandler.html#FtpSyncHandler.__checkSyncFiles" /> - <keyword name="FtpSyncHandler.__commandFinished" id="FtpSyncHandler.__commandFinished" ref="eric5.Helpviewer.Sync.FtpSyncHandler.html#FtpSyncHandler.__commandFinished" /> + <keyword name="FtpSyncHandler.__connectAndLogin" id="FtpSyncHandler.__connectAndLogin" ref="eric5.Helpviewer.Sync.FtpSyncHandler.html#FtpSyncHandler.__connectAndLogin" /> + <keyword name="FtpSyncHandler.__dirListCallback" id="FtpSyncHandler.__dirListCallback" ref="eric5.Helpviewer.Sync.FtpSyncHandler.html#FtpSyncHandler.__dirListCallback" /> + <keyword name="FtpSyncHandler.__doFtpCommands" id="FtpSyncHandler.__doFtpCommands" ref="eric5.Helpviewer.Sync.FtpSyncHandler.html#FtpSyncHandler.__doFtpCommands" /> + <keyword name="FtpSyncHandler.__doFtpLogin" id="FtpSyncHandler.__doFtpLogin" ref="eric5.Helpviewer.Sync.FtpSyncHandler.html#FtpSyncHandler.__doFtpLogin" /> <keyword name="FtpSyncHandler.__downloadFile" id="FtpSyncHandler.__downloadFile" ref="eric5.Helpviewer.Sync.FtpSyncHandler.html#FtpSyncHandler.__downloadFile" /> + <keyword name="FtpSyncHandler.__downloadFileCallback" id="FtpSyncHandler.__downloadFileCallback" ref="eric5.Helpviewer.Sync.FtpSyncHandler.html#FtpSyncHandler.__downloadFileCallback" /> <keyword name="FtpSyncHandler.__idleTimeout" id="FtpSyncHandler.__idleTimeout" ref="eric5.Helpviewer.Sync.FtpSyncHandler.html#FtpSyncHandler.__idleTimeout" /> <keyword name="FtpSyncHandler.__initialSync" id="FtpSyncHandler.__initialSync" ref="eric5.Helpviewer.Sync.FtpSyncHandler.html#FtpSyncHandler.__initialSync" /> <keyword name="FtpSyncHandler.__initialSyncFile" id="FtpSyncHandler.__initialSyncFile" ref="eric5.Helpviewer.Sync.FtpSyncHandler.html#FtpSyncHandler.__initialSyncFile" /> - <keyword name="FtpSyncHandler.__storeReached" id="FtpSyncHandler.__storeReached" ref="eric5.Helpviewer.Sync.FtpSyncHandler.html#FtpSyncHandler.__storeReached" /> <keyword name="FtpSyncHandler.__syncFile" id="FtpSyncHandler.__syncFile" ref="eric5.Helpviewer.Sync.FtpSyncHandler.html#FtpSyncHandler.__syncFile" /> <keyword name="FtpSyncHandler.__uploadFile" id="FtpSyncHandler.__uploadFile" ref="eric5.Helpviewer.Sync.FtpSyncHandler.html#FtpSyncHandler.__uploadFile" /> <keyword name="FtpSyncHandler.initialLoadAndCheck" id="FtpSyncHandler.initialLoadAndCheck" ref="eric5.Helpviewer.Sync.FtpSyncHandler.html#FtpSyncHandler.initialLoadAndCheck" />
--- a/Documentation/Source/eric5.Helpviewer.Sync.FtpSyncHandler.html Sat Sep 22 19:40:50 2012 +0200 +++ b/Documentation/Source/eric5.Helpviewer.Sync.FtpSyncHandler.html Sun Sep 23 16:23:04 2012 +0200 @@ -83,15 +83,24 @@ <td><a href="#FtpSyncHandler.__changeToStore">__changeToStore</a></td> <td>Private slot to change to the storage directory.</td> </tr><tr> -<td><a href="#FtpSyncHandler.__checkSyncFiles">__checkSyncFiles</a></td> -<td>Private slot called for each entry sent by the FTP list command.</td> +<td><a href="#FtpSyncHandler.__connectAndLogin">__connectAndLogin</a></td> +<td>Private method to connect to the FTP server and log in.</td> +</tr><tr> +<td><a href="#FtpSyncHandler.__dirListCallback">__dirListCallback</a></td> +<td>Private slot handling the receipt of directory listing lines.</td> </tr><tr> -<td><a href="#FtpSyncHandler.__commandFinished">__commandFinished</a></td> -<td>Private slot handling the end of a command.</td> +<td><a href="#FtpSyncHandler.__doFtpCommands">__doFtpCommands</a></td> +<td>Private slot executing the sequence of FTP commands.</td> +</tr><tr> +<td><a href="#FtpSyncHandler.__doFtpLogin">__doFtpLogin</a></td> +<td>Private method to do the FTP login with asking for a username and password, if the login fails with an error 530.</td> </tr><tr> <td><a href="#FtpSyncHandler.__downloadFile">__downloadFile</a></td> <td>Private method to downlaod the given file.</td> </tr><tr> +<td><a href="#FtpSyncHandler.__downloadFileCallback">__downloadFileCallback</a></td> +<td>Private method receiving the downloaded data.</td> +</tr><tr> <td><a href="#FtpSyncHandler.__idleTimeout">__idleTimeout</a></td> <td>Private slot to prevent a disconnect from the server.</td> </tr><tr> @@ -101,9 +110,6 @@ <td><a href="#FtpSyncHandler.__initialSyncFile">__initialSyncFile</a></td> <td>Private method to do the initial synchronization of the given file.</td> </tr><tr> -<td><a href="#FtpSyncHandler.__storeReached">__storeReached</a></td> -<td>Private slot executed, when the storage directory was reached.</td> -</tr><tr> <td><a href="#FtpSyncHandler.__syncFile">__syncFile</a></td> <td>Private method to synchronize the given file.</td> </tr><tr> @@ -152,29 +158,53 @@ <p> Private slot to change to the storage directory. </p><p> - This action might cause the storage path to be created on the server. -</p><a NAME="FtpSyncHandler.__checkSyncFiles" ID="FtpSyncHandler.__checkSyncFiles"></a> -<h4>FtpSyncHandler.__checkSyncFiles</h4> -<b>__checkSyncFiles</b>(<i>info</i>) + This action will create the storage path on the server, if it + does not exist. Upon return, the current directory of the server + is the sync directory. +</p><a NAME="FtpSyncHandler.__connectAndLogin" ID="FtpSyncHandler.__connectAndLogin"></a> +<h4>FtpSyncHandler.__connectAndLogin</h4> +<b>__connectAndLogin</b>(<i></i>) <p> - Private slot called for each entry sent by the FTP list command. + Private method to connect to the FTP server and log in. </p><dl> -<dt><i>info</i></dt> +<dt>Returns:</dt> <dd> -info about the entry (QUrlInfo) +flag indicating a successful log in (boolean) +</dd> +</dl><a NAME="FtpSyncHandler.__dirListCallback" ID="FtpSyncHandler.__dirListCallback"></a> +<h4>FtpSyncHandler.__dirListCallback</h4> +<b>__dirListCallback</b>(<i>line</i>) +<p> + Private slot handling the receipt of directory listing lines. +</p><dl> +<dt><i>line</i></dt> +<dd> +the received line of the directory listing (string) </dd> -</dl><a NAME="FtpSyncHandler.__commandFinished" ID="FtpSyncHandler.__commandFinished"></a> -<h4>FtpSyncHandler.__commandFinished</h4> -<b>__commandFinished</b>(<i>id, error</i>) +</dl><a NAME="FtpSyncHandler.__doFtpCommands" ID="FtpSyncHandler.__doFtpCommands"></a> +<h4>FtpSyncHandler.__doFtpCommands</h4> +<b>__doFtpCommands</b>(<i></i>) <p> - Private slot handling the end of a command. + Private slot executing the sequence of FTP commands. +</p><a NAME="FtpSyncHandler.__doFtpLogin" ID="FtpSyncHandler.__doFtpLogin"></a> +<h4>FtpSyncHandler.__doFtpLogin</h4> +<b>__doFtpLogin</b>(<i>username, password</i>) +<p> + Private method to do the FTP login with asking for a username and password, + if the login fails with an error 530. </p><dl> -<dt><i>id</i></dt> +<dt><i>username</i></dt> +<dd> +user name to use for the login (string) +</dd><dt><i>password</i></dt> <dd> -id of the finished command (integer) -</dd><dt><i>error</i></dt> +password to use for the login (string) +</dd> +</dl><dl> +<dt>Returns:</dt> <dd> -flag indicating an error situation (boolean) +tuple of two flags indicating a successful login and + if the login should be retried (boolean, boolean) </dd> </dl><a NAME="FtpSyncHandler.__downloadFile" ID="FtpSyncHandler.__downloadFile"></a> <h4>FtpSyncHandler.__downloadFile</h4> @@ -193,6 +223,24 @@ <dd> time stamp in seconds of the file to be downloaded (int) </dd> +</dl><a NAME="FtpSyncHandler.__downloadFileCallback" ID="FtpSyncHandler.__downloadFileCallback"></a> +<h4>FtpSyncHandler.__downloadFileCallback</h4> +<b>__downloadFileCallback</b>(<i>buffer, data</i>) +<p> + Private method receiving the downloaded data. +</p><dl> +<dt><i>buffer</i></dt> +<dd> +reference to the buffer (io.BytesIO) +</dd><dt><i>data</i></dt> +<dd> +byte string to store in the buffer (bytes) +</dd> +</dl><dl> +<dt>Returns:</dt> +<dd> +number of bytes written to the buffer (integer) +</dd> </dl><a NAME="FtpSyncHandler.__idleTimeout" ID="FtpSyncHandler.__idleTimeout"></a> <h4>FtpSyncHandler.__idleTimeout</h4> <b>__idleTimeout</b>(<i></i>) @@ -217,12 +265,7 @@ <dd> name of the file to be synchronized (string) </dd> -</dl><a NAME="FtpSyncHandler.__storeReached" ID="FtpSyncHandler.__storeReached"></a> -<h4>FtpSyncHandler.__storeReached</h4> -<b>__storeReached</b>(<i></i>) -<p> - Private slot executed, when the storage directory was reached. -</p><a NAME="FtpSyncHandler.__syncFile" ID="FtpSyncHandler.__syncFile"></a> +</dl><a NAME="FtpSyncHandler.__syncFile" ID="FtpSyncHandler.__syncFile"></a> <h4>FtpSyncHandler.__syncFile</h4> <b>__syncFile</b>(<i>type_, fileName</i>) <p>
--- a/Helpviewer/Sync/FtpSyncHandler.py Sat Sep 22 19:40:50 2012 +0200 +++ b/Helpviewer/Sync/FtpSyncHandler.py Sun Sep 23 16:23:04 2012 +0200 @@ -7,9 +7,14 @@ Module implementing a synchronization handler using FTP. """ -from PyQt4.QtCore import pyqtSignal, QUrl, QIODevice, QTime, QThread, QTimer, QBuffer, \ - QFileInfo -from PyQt4.QtNetwork import QFtp, QNetworkProxyQuery, QNetworkProxy, QNetworkProxyFactory +import ftplib +import io + +from PyQt4.QtCore import pyqtSignal, QUrl, QTimer, QFileInfo, QCoreApplication, QByteArray +from PyQt4.QtNetwork import QNetworkProxyQuery, QNetworkProxy, QAuthenticator + +from E5Network.E5NetworkProxyFactory import E5NetworkProxyFactory, \ + proxyAuthenticationRequired from .SyncHandler import SyncHandler @@ -17,6 +22,8 @@ import Preferences +from Utilities.FtpUtilities import FtpDirLineParser, FtpDirLineParserError + class FtpSyncHandler(SyncHandler): """ @@ -46,6 +53,7 @@ self.__state = "idle" self.__forceUpload = False + self.__connected = False self.__remoteFilesFound = {} @@ -61,24 +69,23 @@ self.__state = "initializing" self.__forceUpload = forceUpload + self.__dirLineParser = FtpDirLineParser() self.__remoteFilesFound = {} - self.__syncIDs = {} self.__idleTimer = QTimer(self) self.__idleTimer.setInterval(Preferences.getHelp("SyncFtpIdleTimeout") * 1000) self.__idleTimer.timeout.connect(self.__idleTimeout) - self.__ftp = QFtp(self) - self.__ftp.commandFinished.connect(self.__commandFinished) - self.__ftp.listInfo.connect(self.__checkSyncFiles) + self.__ftp = ftplib.FTP() # do proxy setup + self.__proxy = None url = QUrl("ftp://{0}:{1}".format( Preferences.getHelp("SyncFtpServer"), Preferences.getHelp("SyncFtpPort") )) query = QNetworkProxyQuery(url) - proxyList = QNetworkProxyFactory.proxyForQuery(query) + proxyList = E5NetworkProxyFactory().queryProxy(query) ftpProxy = QNetworkProxy() for proxy in proxyList: if proxy.type() == QNetworkProxy.NoProxy or \ @@ -89,96 +96,133 @@ self.syncError.emit(self.trUtf8("No suitable proxy found.")) return elif ftpProxy.type() == QNetworkProxy.FtpCachingProxy: - self.__ftp.setProxy(ftpProxy.hostName(), ftpProxy.port()) + self.__proxy = ftpProxy + + QTimer.singleShot(0, self.__doFtpCommands) + + def __doFtpCommands(self): + """ + Private slot executing the sequence of FTP commands. + """ + try: + ok = self.__connectAndLogin() + if ok: + self.__changeToStore() + self.__ftp.retrlines("LIST", self.__dirListCallback) + self.__initialSync() + self.__state = "idle" + self.__idleTimer.start() + except ftplib.all_errors as err: + self.syncError.emit(str(err)) + + def __connectAndLogin(self): + """ + Private method to connect to the FTP server and log in. - self.__ftp.connectToHost(Preferences.getHelp("SyncFtpServer"), - Preferences.getHelp("SyncFtpPort")) - self.__ftp.login(Preferences.getHelp("SyncFtpUser"), - Preferences.getHelp("SyncFtpPassword")) + @return flag indicating a successful log in (boolean) + """ + retry = True + while retry: + if self.__proxy: + self.__ftp.connect( + self.__proxy.hostName(), + self.__proxy.port(), + timeout=10) + else: + self.__ftp.connect( + Preferences.getHelp("SyncFtpServer"), + Preferences.getHelp("SyncFtpPort"), + timeout=10) + ok, retry = self.__doFtpLogin( + Preferences.getHelp("SyncFtpUser"), + Preferences.getHelp("SyncFtpPassword")) + self.__connected = ok + if not ok: + self.syncError.emit(self.trUtf8("Cannot log in to FTP host.")) + + return ok + + def __doFtpLogin(self, username, password): + """ + Private method to do the FTP login with asking for a username and password, + if the login fails with an error 530. + + @param username user name to use for the login (string) + @param password password to use for the login (string) + @return tuple of two flags indicating a successful login and + if the login should be retried (boolean, boolean) + """ + # 1. do proxy login, if a proxy is used + if self.__proxy: + try: + self.__ftp.login(self.__proxy.user(), self.__proxy.password()) + except ftplib.error_perm as err: + code, msg = err.args[0].split(None, 1) + if code.strip() == "530": + auth = QAuthenticator() + auth.setOption("realm", self.__proxy.hostName()) + proxyAuthenticationRequired(self.__proxy, auth) + if not auth.isNull() and auth.user(): + self.__proxy.setUser(auth.user()) + self.__proxy.setPassword(auth.password()) + return False, True + return False, False + + # 2. do the real login + if self.__proxy: + loginName = "{0}@{1}".format( + username, Preferences.getHelp("SyncFtpServer")) + if Preferences.getHelp("SyncFtpPort") != ftplib.FTP_PORT: + loginName = "{0}:{1}".format( + loginName, Preferences.getHelp("SyncFtpPort")) + else: + loginName = username + self.__ftp.login(loginName, password) + return True, False def __changeToStore(self): """ Private slot to change to the storage directory. - This action might cause the storage path to be created on the server. - """ - self.__storePathList = \ - Preferences.getHelp("SyncFtpPath").replace("\\", "/").split("/") - if self.__storePathList[0] == "": - del self.__storePathList[0] - self.__ftp.cd(self.__storePathList[0]) - - def __commandFinished(self, id, error): - """ - Private slot handling the end of a command. - - @param id id of the finished command (integer) - @param error flag indicating an error situation (boolean) + This action will create the storage path on the server, if it + does not exist. Upon return, the current directory of the server + is the sync directory. """ - if error: - if self.__ftp.currentCommand() in [ - QFtp.ConnectToHost, QFtp.Login, QFtp.Mkdir, QFtp.List]: - self.syncError.emit(self.__ftp.errorString()) - elif self.__ftp.currentCommand() == QFtp.Cd: - self.__ftp.mkdir(self.__storePathList[0]) - self.__ftp.cd(self.__storePathList[0]) - else: - if id in self.__syncIDs: - if self.__ftp.currentCommand() == QFtp.Get: - self.__syncIDs[id][1].close() - self.syncStatus.emit(self.__syncIDs[id][0], self.__ftp.errorString()) - self.syncFinished.emit(self.__syncIDs[id][0], False, - self.__syncIDs[id][2]) - del self.__syncIDs[id] - if not self.__syncIDs: - self.__state = "idle" - self.syncMessage.emit(self.trUtf8("Synchronization finished")) - else: - if self.__ftp.currentCommand() == QFtp.Login: - self.__changeToStore() - elif self.__ftp.currentCommand() == QFtp.Cd: - del self.__storePathList[0] - if self.__storePathList: - self.__ftp.cd(self.__storePathList[0]) + storePathList = \ + Preferences.getHelp("SyncFtpPath").replace("\\", "/").split("/") + if storePathList[0] == "": + storePathList.pop(0) + while storePathList: + path = storePathList[0] + try: + self.__ftp.cwd(path) + except ftplib.error_perm as err: + code, msg = err.args[0].split(None, 1) + if code.strip() == "550": + # path does not exist, create it + self.__ftp.mkd(path) + self.__ftp.cwd(path) else: - self.__storeReached() - elif self.__ftp.currentCommand() == QFtp.List: - self.__initialSync() - else: - if id in self.__syncIDs: - ok = True - if self.__ftp.currentCommand() == QFtp.Get: - self.__syncIDs[id][1].close() - ok, error = self.writeFile(self.__syncIDs[id][1].buffer(), - self.__syncIDs[id][3], - self.__syncIDs[id][0], - self.__syncIDs[id][4]) - if not ok: - self.syncStatus.emit(self.__syncIDs[id][0], error) - self.syncFinished.emit(self.__syncIDs[id][0], ok, - self.__syncIDs[id][2]) - del self.__syncIDs[id] - if not self.__syncIDs: - self.__state = "idle" - self.syncMessage.emit(self.trUtf8("Synchronization finished")) + raise + storePathList.pop(0) - def __storeReached(self): + def __dirListCallback(self, line): """ - Private slot executed, when the storage directory was reached. + Private slot handling the receipt of directory listing lines. + + @param line the received line of the directory listing (string) """ - if self.__state == "initializing": - self.__ftp.list() - self.__idleTimer.start() - - def __checkSyncFiles(self, info): - """ - Private slot called for each entry sent by the FTP list command. + try: + urlInfo = self.__dirLineParser.parseLine(line) + except FtpDirLineParserError: + # silently ignore parser errors + urlInfo = None - @param info info about the entry (QUrlInfo) - """ - if info.isValid() and info.isFile(): - if info.name() in self._remoteFiles.values(): - self.__remoteFilesFound[info.name()] = info.lastModified() + if urlInfo and urlInfo.isValid() and urlInfo.isFile(): + if urlInfo.name() in self._remoteFiles.values(): + self.__remoteFilesFound[urlInfo.name()] = urlInfo.lastModified() + + QCoreApplication.processEvents() def __downloadFile(self, type_, fileName, timestamp): """ @@ -190,10 +234,31 @@ @param timestamp time stamp in seconds of the file to be downloaded (int) """ self.syncStatus.emit(type_, self._messages[type_]["RemoteExists"]) - buffer = QBuffer(self) - buffer.open(QIODevice.WriteOnly) - id = self.__ftp.get(self._remoteFiles[type_], buffer) - self.__syncIDs[id] = (type_, buffer, True, fileName, timestamp) + buffer = io.BytesIO() + try: + self.__ftp.retrbinary( + "RETR {0}".format(self._remoteFiles[type_]), + lambda x: self.__downloadFileCallback(buffer, x)) + ok, error = self.writeFile( + QByteArray(buffer.getvalue()), fileName, type_, timestamp) + if not ok: + self.syncStatus.emit(type_, error) + self.syncFinished.emit(type_, ok, True) + except ftplib.all_errors as err: + self.syncStatus.emit(type_, str(err)) + self.syncFinished.emit(type_, False, True) + + def __downloadFileCallback(self, buffer, data): + """ + Private method receiving the downloaded data. + + @param buffer reference to the buffer (io.BytesIO) + @param data byte string to store in the buffer (bytes) + @return number of bytes written to the buffer (integer) + """ + res = buffer.write(data) + QCoreApplication.processEvents() + return res def __uploadFile(self, type_, fileName): """ @@ -208,8 +273,16 @@ self.syncStatus.emit(type_, self._messages[type_]["LocalMissing"]) self.syncFinished(type_, False, False) else: - id = self.__ftp.put(data, self._remoteFiles[type_]) - self.__syncIDs[id] = (type_, data, False) + buffer = io.BytesIO(data.data()) + try: + self.__ftp.storbinary( + "STOR {0}".format(self._remoteFiles[type_]), + buffer, + callback=lambda x: QCoreApplication.processEvents()) + self.syncFinished.emit(type_, True, False) + except ftplib.all_errors as err: + self.syncStatus.emit(type_, str(err)) + self.syncFinished.emit(type_, False, False) def __initialSyncFile(self, type_, fileName): """ @@ -220,11 +293,11 @@ @param fileName name of the file to be synchronized (string) """ if not self.__forceUpload and \ - self._remoteFiles[type_] in self.__remoteFilesFound and \ - QFileInfo(fileName).lastModified() <= \ - self.__remoteFilesFound[self._remoteFiles[type_]]: - self.__downloadFile(type_, fileName, - self.__remoteFilesFound[self._remoteFiles[type_]].toTime_t()) + self._remoteFiles[type_] in self.__remoteFilesFound: + if QFileInfo(fileName).lastModified() < \ + self.__remoteFilesFound[self._remoteFiles[type_]]: + self.__downloadFile(type_, fileName, + self.__remoteFilesFound[self._remoteFiles[type_]].toTime_t()) else: if self._remoteFiles[type_] not in self.__remoteFilesFound: self.syncStatus.emit(type_, self._messages[type_]["RemoteMissing"]) @@ -274,9 +347,21 @@ if self.__state == "initializing": return + # use idle timeout to check, if we are still connected + if self.__connected: + self.__idleTimeout() + if not self.__connected: + ok = self.__connectAndLogin() + if not ok: + self.syncStatus.emit(type_, self.trUtf8("Cannot log in to FTP host.")) + return + + # upload the changed file self.__state = "uploading" self.syncStatus.emit(type_, self._messages[type_]["Uploading"]) self.__uploadFile(type_, fileName) + self.syncStatus.emit(type_, self.trUtf8("Synchronization finished.")) + self.__state = "idle" def syncBookmarks(self): """ @@ -320,17 +405,20 @@ if self.__idleTimer.isActive(): self.__idleTimer.stop() - t = QTime.currentTime() - t.start() - while t.elapsed() < 5000 and self.__ftp.hasPendingCommands(): - QThread.msleep(200) - if self.__ftp.hasPendingCommands(): - self.__ftp.clearPendingCommands() - if self.__ftp.currentCommand() != 0: - self.__ftp.abort() + try: + self.__ftp.quit() + except ftplib.all_errors: + pass # ignore FTP errors because we are shutting down anyway + self.__connected = False def __idleTimeout(self): """ Private slot to prevent a disconnect from the server. """ - self.__ftp.rawCommand("NOOP") + if self.__state == "idle" and self.__connected: + try: + self.__ftp.voidcmd("NOOP") + except ftplib.Error as err: + code, msg = err.args[0].split(None, 1) + if code.strip() == "421": + self.__connected = False
--- a/changelog Sat Sep 22 19:40:50 2012 +0200 +++ b/changelog Sun Sep 23 16:23:04 2012 +0200 @@ -35,6 +35,8 @@ -- added support for AdBlock exceptions -- added support for AdBlock checksum checking when downloading a subscription -- added support for variable AdBlock update periods (given in subscription) + -- changed FTP support to use Python's ftplib instead of QFtp because the later + is not supported in Qt5 anymore Version 5.3-snapshot-20120624: - bug fixes
--- a/i18n/eric5_cs.ts Sat Sep 22 19:40:50 2012 +0200 +++ b/i18n/eric5_cs.ts Sun Sep 23 16:23:04 2012 +0200 @@ -6489,7 +6489,7 @@ <message> <location filename="Helpviewer/Download/DownloadItem.ui" line="63"/> <source>Info</source> - <translation type="unfinished">Info</translation> + <translation type="obsolete">Info</translation> </message> <message> <location filename="Helpviewer/Download/DownloadItem.ui" line="78"/> @@ -6522,37 +6522,37 @@ <translation type="obsolete"><p>Chystáte se stáhnout soubor <b>{0}</b>.</p><p>Co chcete udělat?</p></translation> </message> <message> - <location filename="Helpviewer/Download/DownloadItem.py" line="206"/> + <location filename="Helpviewer/Download/DownloadItem.py" line="219"/> <source>Download canceled: {0}</source> <translation type="unfinished">Download zrušen: {0}</translation> </message> <message> - <location filename="Helpviewer/Download/DownloadItem.py" line="196"/> + <location filename="Helpviewer/Download/DownloadItem.py" line="209"/> <source>Save File</source> <translation type="unfinished">Uložit soubor</translation> </message> <message> - <location filename="Helpviewer/Download/DownloadItem.py" line="225"/> + <location filename="Helpviewer/Download/DownloadItem.py" line="238"/> <source>Download directory ({0}) couldn't be created.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="Helpviewer/Download/DownloadItem.py" line="395"/> + <location filename="Helpviewer/Download/DownloadItem.py" line="412"/> <source>Error opening save file: {0}</source> <translation type="unfinished">Chyba při otvírání uloženého souboru: {0}</translation> </message> <message> - <location filename="Helpviewer/Download/DownloadItem.py" line="407"/> + <location filename="Helpviewer/Download/DownloadItem.py" line="424"/> <source>Error saving: {0}</source> <translation type="unfinished">Chyba při ukládání: {0}</translation> </message> <message> - <location filename="Helpviewer/Download/DownloadItem.py" line="419"/> + <location filename="Helpviewer/Download/DownloadItem.py" line="436"/> <source>Network Error: {0}</source> <translation type="unfinished">Chyba sítě: {0}</translation> </message> <message> - <location filename="Helpviewer/Download/DownloadItem.py" line="528"/> + <location filename="Helpviewer/Download/DownloadItem.py" line="545"/> <source>?</source> <translation type="unfinished">?</translation> </message> @@ -6562,12 +6562,12 @@ <translation type="obsolete">{0} staženo</translation> </message> <message> - <location filename="Helpviewer/Download/DownloadItem.py" line="541"/> + <location filename="Helpviewer/Download/DownloadItem.py" line="558"/> <source>{0} of {1} - Stopped</source> <translation type="unfinished">{0} z {1} - zastaveno</translation> </message> <message> - <location filename="Helpviewer/Download/DownloadItem.py" line="184"/> + <location filename="Helpviewer/Download/DownloadItem.py" line="197"/> <source>VirusTotal scan scheduled: {0}</source> <translation type="unfinished"></translation> </message> @@ -6577,13 +6577,13 @@ <translation type="unfinished"></translation> </message> <message> - <location filename="Helpviewer/Download/DownloadItem.py" line="527"/> + <location filename="Helpviewer/Download/DownloadItem.py" line="544"/> <source>{0} of {1} ({2}/sec) {3}</source> <translation type="unfinished"></translation> </message> <message> - <location filename="Helpviewer/Download/DownloadItem.py" line="536"/> + <location filename="Helpviewer/Download/DownloadItem.py" line="553"/> <source>{0} downloaded SHA1: {1} MD5: {2}</source> @@ -13616,24 +13616,24 @@ <context> <name>FtpReply</name> <message> - <location filename="Helpviewer/Network/FtpReply.py" line="395"/> + <location filename="Helpviewer/Network/FtpReply.py" line="386"/> <source> <p><a class="link_parent" href="{0}">Change to parent directory</a></p></source> <translation type="unfinished"></translation> </message> <message> - <location filename="Helpviewer/Network/FtpReply.py" line="408"/> + <location filename="Helpviewer/Network/FtpReply.py" line="399"/> <source> <tr><th align="left">Name</th><th>Size</th><th align="left">Last modified</th></tr> </source> <translation type="unfinished"></translation> </message> <message> - <location filename="Helpviewer/Network/FtpReply.py" line="434"/> + <location filename="Helpviewer/Network/FtpReply.py" line="425"/> <source>{0} {1}</source> <comment>size unit</comment> <translation type="unfinished"></translation> </message> <message> - <location filename="Helpviewer/Network/FtpReply.py" line="458"/> + <location filename="Helpviewer/Network/FtpReply.py" line="449"/> <source>Listing of {0}</source> <translation type="unfinished"></translation> </message> @@ -13643,7 +13643,7 @@ <translation type="obsolete"><b>Zadejte uživatelské jméno a heslo pro '{0}'</b></translation> </message> <message> - <location filename="Helpviewer/Network/FtpReply.py" line="155"/> + <location filename="Helpviewer/Network/FtpReply.py" line="141"/> <source>No suitable proxy found.</source> <translation type="unfinished"></translation> </message> @@ -13651,13 +13651,18 @@ <context> <name>FtpSyncHandler</name> <message> - <location filename="Helpviewer/Sync/FtpSyncHandler.py" line="89"/> + <location filename="Helpviewer/Sync/FtpSyncHandler.py" line="96"/> <source>No suitable proxy found.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="Helpviewer/Sync/FtpSyncHandler.py" line="163"/> - <source>Synchronization finished</source> + <location filename="Helpviewer/Sync/FtpSyncHandler.py" line="356"/> + <source>Cannot log in to FTP host.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="Helpviewer/Sync/FtpSyncHandler.py" line="363"/> + <source>Synchronization finished.</source> <translation type="unfinished"></translation> </message> </context> @@ -28147,12 +28152,12 @@ <translation>Certifikáty</translation> </message> <message> - <location filename="Helpviewer/Network/NetworkAccessManager.py" line="197"/> + <location filename="Helpviewer/Network/NetworkAccessManager.py" line="200"/> <source><b>Enter username and password for '{0}'</b></source> <translation><b>Zadejte uživatelské jméno a heslo pro '{0}'</b></translation> </message> <message> - <location filename="Helpviewer/Network/NetworkAccessManager.py" line="200"/> + <location filename="Helpviewer/Network/NetworkAccessManager.py" line="197"/> <source><b>Enter username and password for '{0}', realm '{1}'</b></source> <translation><b>Zadejte uživatelské jméno a heslo pro {0}', realm '{1}'</b></translation> </message>
--- a/i18n/eric5_de.ts Sat Sep 22 19:40:50 2012 +0200 +++ b/i18n/eric5_de.ts Sun Sep 23 16:23:04 2012 +0200 @@ -6262,11 +6262,6 @@ <translation>Dateiname</translation> </message> <message> - <location filename="Helpviewer/Download/DownloadItem.ui" line="63"/> - <source>Info</source> - <translation>Info</translation> - </message> - <message> <location filename="Helpviewer/Download/DownloadItem.ui" line="78"/> <source>Press to repeat the download</source> <translation>Drücken, um den Download zu wiederholen</translation> @@ -6282,47 +6277,47 @@ <translation>Drücken, um die geladenen Datei zu öffnen</translation> </message> <message> - <location filename="Helpviewer/Download/DownloadItem.py" line="206"/> + <location filename="Helpviewer/Download/DownloadItem.py" line="219"/> <source>Download canceled: {0}</source> <translation>Download abgebrochen: {0}</translation> </message> <message> - <location filename="Helpviewer/Download/DownloadItem.py" line="196"/> + <location filename="Helpviewer/Download/DownloadItem.py" line="209"/> <source>Save File</source> <translation>Datei speichern</translation> </message> <message> - <location filename="Helpviewer/Download/DownloadItem.py" line="225"/> + <location filename="Helpviewer/Download/DownloadItem.py" line="238"/> <source>Download directory ({0}) couldn't be created.</source> <translation>Das Downloadverzeichnis ({0}) konnte nicht erzeugt werden.</translation> </message> <message> - <location filename="Helpviewer/Download/DownloadItem.py" line="395"/> + <location filename="Helpviewer/Download/DownloadItem.py" line="412"/> <source>Error opening save file: {0}</source> <translation>Fehler beim Öffnen der zu speichernden Datei: {0}</translation> </message> <message> - <location filename="Helpviewer/Download/DownloadItem.py" line="407"/> + <location filename="Helpviewer/Download/DownloadItem.py" line="424"/> <source>Error saving: {0}</source> <translation>Fehler beim Speichern: {0}</translation> </message> <message> - <location filename="Helpviewer/Download/DownloadItem.py" line="419"/> + <location filename="Helpviewer/Download/DownloadItem.py" line="436"/> <source>Network Error: {0}</source> <translation>Netzwerkfehler: {0}</translation> </message> <message> - <location filename="Helpviewer/Download/DownloadItem.py" line="528"/> + <location filename="Helpviewer/Download/DownloadItem.py" line="545"/> <source>?</source> <translation>?</translation> </message> <message> - <location filename="Helpviewer/Download/DownloadItem.py" line="541"/> + <location filename="Helpviewer/Download/DownloadItem.py" line="558"/> <source>{0} of {1} - Stopped</source> <translation>{0} von {1} - Angehalten</translation> </message> <message> - <location filename="Helpviewer/Download/DownloadItem.py" line="184"/> + <location filename="Helpviewer/Download/DownloadItem.py" line="197"/> <source>VirusTotal scan scheduled: {0}</source> <translation>Prüfung mit VirusTotal beauftragt: {0}</translation> </message> @@ -6332,14 +6327,14 @@ <translation>Drücken, um den Download zu pausieren</translation> </message> <message> - <location filename="Helpviewer/Download/DownloadItem.py" line="527"/> + <location filename="Helpviewer/Download/DownloadItem.py" line="544"/> <source>{0} of {1} ({2}/sec) {3}</source> <translation>{0} von {1} ({2}/s) {3}</translation> </message> <message> - <location filename="Helpviewer/Download/DownloadItem.py" line="536"/> + <location filename="Helpviewer/Download/DownloadItem.py" line="553"/> <source>{0} downloaded SHA1: {1} MD5: {2}</source> @@ -13283,30 +13278,30 @@ <context> <name>FtpReply</name> <message> - <location filename="Helpviewer/Network/FtpReply.py" line="395"/> + <location filename="Helpviewer/Network/FtpReply.py" line="386"/> <source> <p><a class="link_parent" href="{0}">Change to parent directory</a></p></source> <translation> <p><a class="link_parent" href="{0}">In den übergeordneten Ordner wechseln</a></p></translation> </message> <message> - <location filename="Helpviewer/Network/FtpReply.py" line="408"/> + <location filename="Helpviewer/Network/FtpReply.py" line="399"/> <source> <tr><th align="left">Name</th><th>Size</th><th align="left">Last modified</th></tr> </source> <translation> <tr><th align="left">Name</th><th>Größe</th><th align="left">Zuletzt verändert</th></tr> </translation> </message> <message> - <location filename="Helpviewer/Network/FtpReply.py" line="434"/> + <location filename="Helpviewer/Network/FtpReply.py" line="425"/> <source>{0} {1}</source> <comment>size unit</comment> <translation>{0} {1}</translation> </message> <message> - <location filename="Helpviewer/Network/FtpReply.py" line="458"/> + <location filename="Helpviewer/Network/FtpReply.py" line="449"/> <source>Listing of {0}</source> <translation>Index von {0}</translation> </message> <message> - <location filename="Helpviewer/Network/FtpReply.py" line="155"/> + <location filename="Helpviewer/Network/FtpReply.py" line="141"/> <source>No suitable proxy found.</source> <translation>Kein geeigneter Proxy gefunden.</translation> </message> @@ -13314,14 +13309,19 @@ <context> <name>FtpSyncHandler</name> <message> - <location filename="Helpviewer/Sync/FtpSyncHandler.py" line="89"/> + <location filename="Helpviewer/Sync/FtpSyncHandler.py" line="96"/> <source>No suitable proxy found.</source> <translation>Kein geeigneter Proxy gefunden.</translation> </message> <message> - <location filename="Helpviewer/Sync/FtpSyncHandler.py" line="163"/> - <source>Synchronization finished</source> - <translation>Synchronisation beendet</translation> + <location filename="Helpviewer/Sync/FtpSyncHandler.py" line="356"/> + <source>Cannot log in to FTP host.</source> + <translation>Anmeldung am FTP Server fehlgeschlagen.</translation> + </message> + <message> + <location filename="Helpviewer/Sync/FtpSyncHandler.py" line="363"/> + <source>Synchronization finished.</source> + <translation>Synchronisation beendet.</translation> </message> </context> <context> @@ -27092,12 +27092,12 @@ <context> <name>NetworkAccessManager</name> <message> - <location filename="Helpviewer/Network/NetworkAccessManager.py" line="197"/> + <location filename="Helpviewer/Network/NetworkAccessManager.py" line="200"/> <source><b>Enter username and password for '{0}'</b></source> <translation><b>Gib Nutzernamen und Kennwort für '{0}' ein</b></translation> </message> <message> - <location filename="Helpviewer/Network/NetworkAccessManager.py" line="200"/> + <location filename="Helpviewer/Network/NetworkAccessManager.py" line="197"/> <source><b>Enter username and password for '{0}', realm '{1}'</b></source> <translation><b>Gib Nutzernamen und Kennwort für '{0}' und Realm '{1}' ein</b></translation> </message>
--- a/i18n/eric5_en.ts Sat Sep 22 19:40:50 2012 +0200 +++ b/i18n/eric5_en.ts Sun Sep 23 16:23:04 2012 +0200 @@ -6206,11 +6206,6 @@ <translation type="unfinished"></translation> </message> <message> - <location filename="Helpviewer/Download/DownloadItem.ui" line="63"/> - <source>Info</source> - <translation type="unfinished"></translation> - </message> - <message> <location filename="Helpviewer/Download/DownloadItem.ui" line="78"/> <source>Press to repeat the download</source> <translation type="unfinished"></translation> @@ -6226,47 +6221,47 @@ <translation type="unfinished"></translation> </message> <message> - <location filename="Helpviewer/Download/DownloadItem.py" line="206"/> + <location filename="Helpviewer/Download/DownloadItem.py" line="219"/> <source>Download canceled: {0}</source> <translation type="unfinished"></translation> </message> <message> - <location filename="Helpviewer/Download/DownloadItem.py" line="196"/> + <location filename="Helpviewer/Download/DownloadItem.py" line="209"/> <source>Save File</source> <translation type="unfinished"></translation> </message> <message> - <location filename="Helpviewer/Download/DownloadItem.py" line="225"/> + <location filename="Helpviewer/Download/DownloadItem.py" line="238"/> <source>Download directory ({0}) couldn't be created.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="Helpviewer/Download/DownloadItem.py" line="395"/> + <location filename="Helpviewer/Download/DownloadItem.py" line="412"/> <source>Error opening save file: {0}</source> <translation type="unfinished"></translation> </message> <message> - <location filename="Helpviewer/Download/DownloadItem.py" line="407"/> + <location filename="Helpviewer/Download/DownloadItem.py" line="424"/> <source>Error saving: {0}</source> <translation type="unfinished"></translation> </message> <message> - <location filename="Helpviewer/Download/DownloadItem.py" line="419"/> + <location filename="Helpviewer/Download/DownloadItem.py" line="436"/> <source>Network Error: {0}</source> <translation type="unfinished"></translation> </message> <message> - <location filename="Helpviewer/Download/DownloadItem.py" line="528"/> + <location filename="Helpviewer/Download/DownloadItem.py" line="545"/> <source>?</source> <translation type="unfinished"></translation> </message> <message> - <location filename="Helpviewer/Download/DownloadItem.py" line="541"/> + <location filename="Helpviewer/Download/DownloadItem.py" line="558"/> <source>{0} of {1} - Stopped</source> <translation type="unfinished"></translation> </message> <message> - <location filename="Helpviewer/Download/DownloadItem.py" line="184"/> + <location filename="Helpviewer/Download/DownloadItem.py" line="197"/> <source>VirusTotal scan scheduled: {0}</source> <translation type="unfinished"></translation> </message> @@ -6276,13 +6271,13 @@ <translation type="unfinished"></translation> </message> <message> - <location filename="Helpviewer/Download/DownloadItem.py" line="527"/> + <location filename="Helpviewer/Download/DownloadItem.py" line="544"/> <source>{0} of {1} ({2}/sec) {3}</source> <translation type="unfinished"></translation> </message> <message> - <location filename="Helpviewer/Download/DownloadItem.py" line="536"/> + <location filename="Helpviewer/Download/DownloadItem.py" line="553"/> <source>{0} downloaded SHA1: {1} MD5: {2}</source> @@ -13198,29 +13193,29 @@ <context> <name>FtpReply</name> <message> - <location filename="Helpviewer/Network/FtpReply.py" line="395"/> + <location filename="Helpviewer/Network/FtpReply.py" line="386"/> <source> <p><a class="link_parent" href="{0}">Change to parent directory</a></p></source> <translation type="unfinished"></translation> </message> <message> - <location filename="Helpviewer/Network/FtpReply.py" line="408"/> + <location filename="Helpviewer/Network/FtpReply.py" line="399"/> <source> <tr><th align="left">Name</th><th>Size</th><th align="left">Last modified</th></tr> </source> <translation type="unfinished"></translation> </message> <message> - <location filename="Helpviewer/Network/FtpReply.py" line="434"/> + <location filename="Helpviewer/Network/FtpReply.py" line="425"/> <source>{0} {1}</source> <comment>size unit</comment> <translation type="unfinished"></translation> </message> <message> - <location filename="Helpviewer/Network/FtpReply.py" line="458"/> + <location filename="Helpviewer/Network/FtpReply.py" line="449"/> <source>Listing of {0}</source> <translation type="unfinished"></translation> </message> <message> - <location filename="Helpviewer/Network/FtpReply.py" line="155"/> + <location filename="Helpviewer/Network/FtpReply.py" line="141"/> <source>No suitable proxy found.</source> <translation type="unfinished"></translation> </message> @@ -13228,13 +13223,18 @@ <context> <name>FtpSyncHandler</name> <message> - <location filename="Helpviewer/Sync/FtpSyncHandler.py" line="89"/> + <location filename="Helpviewer/Sync/FtpSyncHandler.py" line="96"/> <source>No suitable proxy found.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="Helpviewer/Sync/FtpSyncHandler.py" line="163"/> - <source>Synchronization finished</source> + <location filename="Helpviewer/Sync/FtpSyncHandler.py" line="356"/> + <source>Cannot log in to FTP host.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="Helpviewer/Sync/FtpSyncHandler.py" line="363"/> + <source>Synchronization finished.</source> <translation type="unfinished"></translation> </message> </context> @@ -26944,12 +26944,12 @@ <context> <name>NetworkAccessManager</name> <message> - <location filename="Helpviewer/Network/NetworkAccessManager.py" line="197"/> + <location filename="Helpviewer/Network/NetworkAccessManager.py" line="200"/> <source><b>Enter username and password for '{0}'</b></source> <translation type="unfinished"></translation> </message> <message> - <location filename="Helpviewer/Network/NetworkAccessManager.py" line="200"/> + <location filename="Helpviewer/Network/NetworkAccessManager.py" line="197"/> <source><b>Enter username and password for '{0}', realm '{1}'</b></source> <translation type="unfinished"></translation> </message>
--- a/i18n/eric5_es.ts Sat Sep 22 19:40:50 2012 +0200 +++ b/i18n/eric5_es.ts Sun Sep 23 16:23:04 2012 +0200 @@ -6313,7 +6313,7 @@ <message> <location filename="Helpviewer/Download/DownloadItem.ui" line="63"/> <source>Info</source> - <translation>Información</translation> + <translation type="obsolete">Información</translation> </message> <message> <location filename="Helpviewer/Download/DownloadItem.ui" line="78"/> @@ -6331,47 +6331,47 @@ <translation>Pulse para abrir el archivo descargado</translation> </message> <message> - <location filename="Helpviewer/Download/DownloadItem.py" line="206"/> + <location filename="Helpviewer/Download/DownloadItem.py" line="219"/> <source>Download canceled: {0}</source> <translation>Descarga cancelada: {0}</translation> </message> <message> - <location filename="Helpviewer/Download/DownloadItem.py" line="196"/> + <location filename="Helpviewer/Download/DownloadItem.py" line="209"/> <source>Save File</source> <translation>Guardar archivo</translation> </message> <message> - <location filename="Helpviewer/Download/DownloadItem.py" line="225"/> + <location filename="Helpviewer/Download/DownloadItem.py" line="238"/> <source>Download directory ({0}) couldn't be created.</source> <translation>El directorio de descargas ({0}) no ha podido ser creado.</translation> </message> <message> - <location filename="Helpviewer/Download/DownloadItem.py" line="395"/> + <location filename="Helpviewer/Download/DownloadItem.py" line="412"/> <source>Error opening save file: {0}</source> <translation>Error al abrir el fichero a guardar: {0}</translation> </message> <message> - <location filename="Helpviewer/Download/DownloadItem.py" line="407"/> + <location filename="Helpviewer/Download/DownloadItem.py" line="424"/> <source>Error saving: {0}</source> <translation>Error al guardar: {0}</translation> </message> <message> - <location filename="Helpviewer/Download/DownloadItem.py" line="419"/> + <location filename="Helpviewer/Download/DownloadItem.py" line="436"/> <source>Network Error: {0}</source> <translation>Error de Red: {0}</translation> </message> <message> - <location filename="Helpviewer/Download/DownloadItem.py" line="528"/> + <location filename="Helpviewer/Download/DownloadItem.py" line="545"/> <source>?</source> <translation>?</translation> </message> <message> - <location filename="Helpviewer/Download/DownloadItem.py" line="541"/> + <location filename="Helpviewer/Download/DownloadItem.py" line="558"/> <source>{0} of {1} - Stopped</source> <translation>{0} de {1} - Parado</translation> </message> <message> - <location filename="Helpviewer/Download/DownloadItem.py" line="184"/> + <location filename="Helpviewer/Download/DownloadItem.py" line="197"/> <source>VirusTotal scan scheduled: {0}</source> <translation>Scan de VirusTotal programado: {0}</translation> </message> @@ -6381,14 +6381,14 @@ <translation>Pulse para pausar la descarga</translation> </message> <message> - <location filename="Helpviewer/Download/DownloadItem.py" line="527"/> + <location filename="Helpviewer/Download/DownloadItem.py" line="544"/> <source>{0} of {1} ({2}/sec) {3}</source> <translation>{0} de {1} ({2}/sec) {3}</translation> </message> <message> - <location filename="Helpviewer/Download/DownloadItem.py" line="536"/> + <location filename="Helpviewer/Download/DownloadItem.py" line="553"/> <source>{0} downloaded SHA1: {1} MD5: {2}</source> @@ -13339,30 +13339,30 @@ <context> <name>FtpReply</name> <message> - <location filename="Helpviewer/Network/FtpReply.py" line="155"/> + <location filename="Helpviewer/Network/FtpReply.py" line="141"/> <source>No suitable proxy found.</source> <translation type="unfinished">No se ha encontrado ningún proxy adecuado.</translation> </message> <message> - <location filename="Helpviewer/Network/FtpReply.py" line="395"/> + <location filename="Helpviewer/Network/FtpReply.py" line="386"/> <source> <p><a class="link_parent" href="{0}">Change to parent directory</a></p></source> <translation> <p><a class="link_parent" href="{0}">Cambiar al directorio superior</a></p></translation> </message> <message> - <location filename="Helpviewer/Network/FtpReply.py" line="408"/> + <location filename="Helpviewer/Network/FtpReply.py" line="399"/> <source> <tr><th align="left">Name</th><th>Size</th><th align="left">Last modified</th></tr> </source> <translation> <tr><th align="left">Nombre</th><th>Tamaño</th><th align="left">Última modificación</th></tr> </translation> </message> <message> - <location filename="Helpviewer/Network/FtpReply.py" line="434"/> + <location filename="Helpviewer/Network/FtpReply.py" line="425"/> <source>{0} {1}</source> <comment>size unit</comment> <translation>{0} {1}</translation> </message> <message> - <location filename="Helpviewer/Network/FtpReply.py" line="458"/> + <location filename="Helpviewer/Network/FtpReply.py" line="449"/> <source>Listing of {0}</source> <translation>Listado de {0}</translation> </message> @@ -13375,14 +13375,24 @@ <context> <name>FtpSyncHandler</name> <message> - <location filename="Helpviewer/Sync/FtpSyncHandler.py" line="89"/> + <location filename="Helpviewer/Sync/FtpSyncHandler.py" line="96"/> <source>No suitable proxy found.</source> <translation>¡El archivo remoto de marcadores ya existe! Sincronizando copia local...</translation> </message> <message> <location filename="Helpviewer/Sync/FtpSyncHandler.py" line="163"/> <source>Synchronization finished</source> - <translation>Subiendo archivo local de marcadores...</translation> + <translation type="obsolete">Subiendo archivo local de marcadores...</translation> + </message> + <message> + <location filename="Helpviewer/Sync/FtpSyncHandler.py" line="356"/> + <source>Cannot log in to FTP host.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="Helpviewer/Sync/FtpSyncHandler.py" line="363"/> + <source>Synchronization finished.</source> + <translation type="unfinished"></translation> </message> </context> <context> @@ -27275,12 +27285,12 @@ <translation>Certificados</translation> </message> <message> - <location filename="Helpviewer/Network/NetworkAccessManager.py" line="197"/> + <location filename="Helpviewer/Network/NetworkAccessManager.py" line="200"/> <source><b>Enter username and password for '{0}'</b></source> <translation><b>Introduzca nombre de usuario y contraseña para '{0}'</b></translation> </message> <message> - <location filename="Helpviewer/Network/NetworkAccessManager.py" line="200"/> + <location filename="Helpviewer/Network/NetworkAccessManager.py" line="197"/> <source><b>Enter username and password for '{0}', realm '{1}'</b></source> <translation><b>Introduzca nombre de usuario y contraseña para '{0}', reino {1}'</b></translation> </message>
--- a/i18n/eric5_fr.ts Sat Sep 22 19:40:50 2012 +0200 +++ b/i18n/eric5_fr.ts Sun Sep 23 16:23:04 2012 +0200 @@ -6812,7 +6812,7 @@ <message> <location filename="Helpviewer/Download/DownloadItem.ui" line="63"/> <source>Info</source> - <translation type="unfinished">Info</translation> + <translation type="obsolete">Info</translation> </message> <message> <location filename="Helpviewer/Download/DownloadItem.ui" line="78"/> @@ -6835,47 +6835,47 @@ <translation type="unfinished"></translation> </message> <message> - <location filename="Helpviewer/Download/DownloadItem.py" line="206"/> + <location filename="Helpviewer/Download/DownloadItem.py" line="219"/> <source>Download canceled: {0}</source> <translation type="unfinished"></translation> </message> <message> - <location filename="Helpviewer/Download/DownloadItem.py" line="196"/> + <location filename="Helpviewer/Download/DownloadItem.py" line="209"/> <source>Save File</source> <translation type="unfinished"></translation> </message> <message> - <location filename="Helpviewer/Download/DownloadItem.py" line="225"/> + <location filename="Helpviewer/Download/DownloadItem.py" line="238"/> <source>Download directory ({0}) couldn't be created.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="Helpviewer/Download/DownloadItem.py" line="395"/> + <location filename="Helpviewer/Download/DownloadItem.py" line="412"/> <source>Error opening save file: {0}</source> <translation type="unfinished"></translation> </message> <message> - <location filename="Helpviewer/Download/DownloadItem.py" line="407"/> + <location filename="Helpviewer/Download/DownloadItem.py" line="424"/> <source>Error saving: {0}</source> <translation type="unfinished"></translation> </message> <message> - <location filename="Helpviewer/Download/DownloadItem.py" line="419"/> + <location filename="Helpviewer/Download/DownloadItem.py" line="436"/> <source>Network Error: {0}</source> <translation type="unfinished"></translation> </message> <message> - <location filename="Helpviewer/Download/DownloadItem.py" line="528"/> + <location filename="Helpviewer/Download/DownloadItem.py" line="545"/> <source>?</source> <translation type="unfinished">?</translation> </message> <message> - <location filename="Helpviewer/Download/DownloadItem.py" line="541"/> + <location filename="Helpviewer/Download/DownloadItem.py" line="558"/> <source>{0} of {1} - Stopped</source> <translation type="unfinished"></translation> </message> <message> - <location filename="Helpviewer/Download/DownloadItem.py" line="184"/> + <location filename="Helpviewer/Download/DownloadItem.py" line="197"/> <source>VirusTotal scan scheduled: {0}</source> <translation type="unfinished"></translation> </message> @@ -6885,13 +6885,13 @@ <translation type="unfinished"></translation> </message> <message> - <location filename="Helpviewer/Download/DownloadItem.py" line="527"/> + <location filename="Helpviewer/Download/DownloadItem.py" line="544"/> <source>{0} of {1} ({2}/sec) {3}</source> <translation type="unfinished"></translation> </message> <message> - <location filename="Helpviewer/Download/DownloadItem.py" line="536"/> + <location filename="Helpviewer/Download/DownloadItem.py" line="553"/> <source>{0} downloaded SHA1: {1} MD5: {2}</source> @@ -14444,29 +14444,29 @@ <context> <name>FtpReply</name> <message> - <location filename="Helpviewer/Network/FtpReply.py" line="395"/> + <location filename="Helpviewer/Network/FtpReply.py" line="386"/> <source> <p><a class="link_parent" href="{0}">Change to parent directory</a></p></source> <translation type="unfinished"></translation> </message> <message> - <location filename="Helpviewer/Network/FtpReply.py" line="408"/> + <location filename="Helpviewer/Network/FtpReply.py" line="399"/> <source> <tr><th align="left">Name</th><th>Size</th><th align="left">Last modified</th></tr> </source> <translation type="unfinished"></translation> </message> <message> - <location filename="Helpviewer/Network/FtpReply.py" line="434"/> + <location filename="Helpviewer/Network/FtpReply.py" line="425"/> <source>{0} {1}</source> <comment>size unit</comment> <translation type="unfinished"></translation> </message> <message> - <location filename="Helpviewer/Network/FtpReply.py" line="458"/> + <location filename="Helpviewer/Network/FtpReply.py" line="449"/> <source>Listing of {0}</source> <translation type="unfinished"></translation> </message> <message> - <location filename="Helpviewer/Network/FtpReply.py" line="155"/> + <location filename="Helpviewer/Network/FtpReply.py" line="141"/> <source>No suitable proxy found.</source> <translation type="unfinished"></translation> </message> @@ -14474,13 +14474,18 @@ <context> <name>FtpSyncHandler</name> <message> - <location filename="Helpviewer/Sync/FtpSyncHandler.py" line="89"/> + <location filename="Helpviewer/Sync/FtpSyncHandler.py" line="96"/> <source>No suitable proxy found.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="Helpviewer/Sync/FtpSyncHandler.py" line="163"/> - <source>Synchronization finished</source> + <location filename="Helpviewer/Sync/FtpSyncHandler.py" line="356"/> + <source>Cannot log in to FTP host.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="Helpviewer/Sync/FtpSyncHandler.py" line="363"/> + <source>Synchronization finished.</source> <translation type="unfinished"></translation> </message> </context> @@ -29399,12 +29404,12 @@ <translation type="unfinished"></translation> </message> <message> - <location filename="Helpviewer/Network/NetworkAccessManager.py" line="197"/> + <location filename="Helpviewer/Network/NetworkAccessManager.py" line="200"/> <source><b>Enter username and password for '{0}'</b></source> <translation type="unfinished"></translation> </message> <message> - <location filename="Helpviewer/Network/NetworkAccessManager.py" line="200"/> + <location filename="Helpviewer/Network/NetworkAccessManager.py" line="197"/> <source><b>Enter username and password for '{0}', realm '{1}'</b></source> <translation type="unfinished"></translation> </message>
--- a/i18n/eric5_it.ts Sat Sep 22 19:40:50 2012 +0200 +++ b/i18n/eric5_it.ts Sun Sep 23 16:23:04 2012 +0200 @@ -6386,7 +6386,7 @@ <message> <location filename="Helpviewer/Download/DownloadItem.ui" line="63"/> <source>Info</source> - <translation>Info</translation> + <translation type="obsolete">Info</translation> </message> <message> <location filename="Helpviewer/Download/DownloadItem.ui" line="78"/> @@ -6409,32 +6409,32 @@ <translation>Premi per aprire il file scaricato</translation> </message> <message> - <location filename="Helpviewer/Download/DownloadItem.py" line="206"/> + <location filename="Helpviewer/Download/DownloadItem.py" line="219"/> <source>Download canceled: {0}</source> <translation>Download cancellato: {0}</translation> </message> <message> - <location filename="Helpviewer/Download/DownloadItem.py" line="196"/> + <location filename="Helpviewer/Download/DownloadItem.py" line="209"/> <source>Save File</source> <translation>Salva file</translation> </message> <message> - <location filename="Helpviewer/Download/DownloadItem.py" line="225"/> + <location filename="Helpviewer/Download/DownloadItem.py" line="238"/> <source>Download directory ({0}) couldn't be created.</source> <translation>La directory ({0}) per il download non può essere creata.</translation> </message> <message> - <location filename="Helpviewer/Download/DownloadItem.py" line="395"/> + <location filename="Helpviewer/Download/DownloadItem.py" line="412"/> <source>Error opening save file: {0}</source> <translation>Errore nell'apertura del file: {0}</translation> </message> <message> - <location filename="Helpviewer/Download/DownloadItem.py" line="407"/> + <location filename="Helpviewer/Download/DownloadItem.py" line="424"/> <source>Error saving: {0}</source> <translation>Errore nel salvataggio di: {0}</translation> </message> <message> - <location filename="Helpviewer/Download/DownloadItem.py" line="419"/> + <location filename="Helpviewer/Download/DownloadItem.py" line="436"/> <source>Network Error: {0}</source> <translation>Errore di rete: {0}</translation> </message> @@ -6444,7 +6444,7 @@ <translation type="obsolete">{0} di {1} ({2}/sec) - {3}</translation> </message> <message> - <location filename="Helpviewer/Download/DownloadItem.py" line="528"/> + <location filename="Helpviewer/Download/DownloadItem.py" line="545"/> <source>?</source> <translation>?</translation> </message> @@ -6454,12 +6454,12 @@ <translation type="obsolete">{0} scaricato</translation> </message> <message> - <location filename="Helpviewer/Download/DownloadItem.py" line="541"/> + <location filename="Helpviewer/Download/DownloadItem.py" line="558"/> <source>{0} of {1} - Stopped</source> <translation>{0} di {1} - Fermati</translation> </message> <message> - <location filename="Helpviewer/Download/DownloadItem.py" line="184"/> + <location filename="Helpviewer/Download/DownloadItem.py" line="197"/> <source>VirusTotal scan scheduled: {0}</source> <translation type="unfinished"></translation> </message> @@ -6469,13 +6469,13 @@ <translation type="unfinished"></translation> </message> <message> - <location filename="Helpviewer/Download/DownloadItem.py" line="527"/> + <location filename="Helpviewer/Download/DownloadItem.py" line="544"/> <source>{0} of {1} ({2}/sec) {3}</source> <translation type="unfinished"></translation> </message> <message> - <location filename="Helpviewer/Download/DownloadItem.py" line="536"/> + <location filename="Helpviewer/Download/DownloadItem.py" line="553"/> <source>{0} downloaded SHA1: {1} MD5: {2}</source> @@ -13450,30 +13450,30 @@ <context> <name>FtpReply</name> <message> - <location filename="Helpviewer/Network/FtpReply.py" line="155"/> + <location filename="Helpviewer/Network/FtpReply.py" line="141"/> <source>No suitable proxy found.</source> <translation type="unfinished">Nessun proxy utilizzabile trovato.</translation> </message> <message> - <location filename="Helpviewer/Network/FtpReply.py" line="395"/> + <location filename="Helpviewer/Network/FtpReply.py" line="386"/> <source> <p><a class="link_parent" href="{0}">Change to parent directory</a></p></source> <translation> <p><a class="link_parent" href="{0}">Cambia alla directory superiore</a></p></translation> </message> <message> - <location filename="Helpviewer/Network/FtpReply.py" line="408"/> + <location filename="Helpviewer/Network/FtpReply.py" line="399"/> <source> <tr><th align="left">Name</th><th>Size</th><th align="left">Last modified</th></tr> </source> <translation> <tr><th align="left">Nome</th><th>Dimensione</th><th align="left">Ultima modifica</th></tr> </translation> </message> <message> - <location filename="Helpviewer/Network/FtpReply.py" line="434"/> + <location filename="Helpviewer/Network/FtpReply.py" line="425"/> <source>{0} {1}</source> <comment>size unit</comment> <translation>{0} {1}</translation> </message> <message> - <location filename="Helpviewer/Network/FtpReply.py" line="458"/> + <location filename="Helpviewer/Network/FtpReply.py" line="449"/> <source>Listing of {0}</source> <translation>Elenco di {0}</translation> </message> @@ -13486,13 +13486,18 @@ <context> <name>FtpSyncHandler</name> <message> - <location filename="Helpviewer/Sync/FtpSyncHandler.py" line="89"/> + <location filename="Helpviewer/Sync/FtpSyncHandler.py" line="96"/> <source>No suitable proxy found.</source> <translation type="unfinished">Nessun proxy utilizzabile trovato.</translation> </message> <message> - <location filename="Helpviewer/Sync/FtpSyncHandler.py" line="163"/> - <source>Synchronization finished</source> + <location filename="Helpviewer/Sync/FtpSyncHandler.py" line="356"/> + <source>Cannot log in to FTP host.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="Helpviewer/Sync/FtpSyncHandler.py" line="363"/> + <source>Synchronization finished.</source> <translation type="unfinished"></translation> </message> </context> @@ -27758,12 +27763,12 @@ <translation>Certificati</translation> </message> <message> - <location filename="Helpviewer/Network/NetworkAccessManager.py" line="197"/> + <location filename="Helpviewer/Network/NetworkAccessManager.py" line="200"/> <source><b>Enter username and password for '{0}'</b></source> <translation><b>Inserisci utente e password per '{0}'</b></translation> </message> <message> - <location filename="Helpviewer/Network/NetworkAccessManager.py" line="200"/> + <location filename="Helpviewer/Network/NetworkAccessManager.py" line="197"/> <source><b>Enter username and password for '{0}', realm '{1}'</b></source> <translation><b>Inserisci utente e password per '{0}', dominio '{1}'</b></translation> </message>
--- a/i18n/eric5_ru.ts Sat Sep 22 19:40:50 2012 +0200 +++ b/i18n/eric5_ru.ts Sun Sep 23 16:23:04 2012 +0200 @@ -6418,7 +6418,7 @@ <message> <location filename="Helpviewer/Download/DownloadItem.ui" line="63"/> <source>Info</source> - <translation>Информация</translation> + <translation type="obsolete">Информация</translation> </message> <message> <location filename="Helpviewer/Download/DownloadItem.ui" line="78"/> @@ -6451,32 +6451,32 @@ <translation type="obsolete"><p>Начинается загрузка файла <b>{0}</b>.</p><p>Что Вы хотите с ним сделать?</p></translation> </message> <message> - <location filename="Helpviewer/Download/DownloadItem.py" line="206"/> + <location filename="Helpviewer/Download/DownloadItem.py" line="219"/> <source>Download canceled: {0}</source> <translation>Скачивание прервано: {0}</translation> </message> <message> - <location filename="Helpviewer/Download/DownloadItem.py" line="196"/> + <location filename="Helpviewer/Download/DownloadItem.py" line="209"/> <source>Save File</source> <translation>Сохранить файл</translation> </message> <message> - <location filename="Helpviewer/Download/DownloadItem.py" line="225"/> + <location filename="Helpviewer/Download/DownloadItem.py" line="238"/> <source>Download directory ({0}) couldn't be created.</source> <translation>Невозможно создать каталог ({0}) для загрузки.</translation> </message> <message> - <location filename="Helpviewer/Download/DownloadItem.py" line="395"/> + <location filename="Helpviewer/Download/DownloadItem.py" line="412"/> <source>Error opening save file: {0}</source> <translation>Ошибка сохранения файла: {0}</translation> </message> <message> - <location filename="Helpviewer/Download/DownloadItem.py" line="407"/> + <location filename="Helpviewer/Download/DownloadItem.py" line="424"/> <source>Error saving: {0}</source> <translation>Ошибка при сохранении: {0}</translation> </message> <message> - <location filename="Helpviewer/Download/DownloadItem.py" line="419"/> + <location filename="Helpviewer/Download/DownloadItem.py" line="436"/> <source>Network Error: {0}</source> <translation>Сетевая ошибка: {0}</translation> </message> @@ -6486,7 +6486,7 @@ <translation type="obsolete">{0} of {1} ({2}/sec) - {3}</translation> </message> <message> - <location filename="Helpviewer/Download/DownloadItem.py" line="528"/> + <location filename="Helpviewer/Download/DownloadItem.py" line="545"/> <source>?</source> <translation>?</translation> </message> @@ -6496,12 +6496,12 @@ <translation type="obsolete">{0} скачано</translation> </message> <message> - <location filename="Helpviewer/Download/DownloadItem.py" line="541"/> + <location filename="Helpviewer/Download/DownloadItem.py" line="558"/> <source>{0} of {1} - Stopped</source> <translation>{0} из {1} - остановлено</translation> </message> <message> - <location filename="Helpviewer/Download/DownloadItem.py" line="184"/> + <location filename="Helpviewer/Download/DownloadItem.py" line="197"/> <source>VirusTotal scan scheduled: {0}</source> <translation type="unfinished"></translation> </message> @@ -6511,13 +6511,13 @@ <translation type="unfinished"></translation> </message> <message> - <location filename="Helpviewer/Download/DownloadItem.py" line="527"/> + <location filename="Helpviewer/Download/DownloadItem.py" line="544"/> <source>{0} of {1} ({2}/sec) {3}</source> <translation type="unfinished"></translation> </message> <message> - <location filename="Helpviewer/Download/DownloadItem.py" line="536"/> + <location filename="Helpviewer/Download/DownloadItem.py" line="553"/> <source>{0} downloaded SHA1: {1} MD5: {2}</source> @@ -13548,30 +13548,30 @@ <context> <name>FtpReply</name> <message> - <location filename="Helpviewer/Network/FtpReply.py" line="395"/> + <location filename="Helpviewer/Network/FtpReply.py" line="386"/> <source> <p><a class="link_parent" href="{0}">Change to parent directory</a></p></source> <translation> <p><a class="link_parent" href="{0}">Перейти в родительский каталог</a></p></translation> </message> <message> - <location filename="Helpviewer/Network/FtpReply.py" line="408"/> + <location filename="Helpviewer/Network/FtpReply.py" line="399"/> <source> <tr><th align="left">Name</th><th>Size</th><th align="left">Last modified</th></tr> </source> <translation> <tr><th align="left">Имя</th><th>Размер</th><th align="left">Последнее изменение</th></tr> </translation> </message> <message> - <location filename="Helpviewer/Network/FtpReply.py" line="434"/> + <location filename="Helpviewer/Network/FtpReply.py" line="425"/> <source>{0} {1}</source> <comment>size unit</comment> <translation>{0} {1}</translation> </message> <message> - <location filename="Helpviewer/Network/FtpReply.py" line="458"/> + <location filename="Helpviewer/Network/FtpReply.py" line="449"/> <source>Listing of {0}</source> <translation>Список {0}</translation> </message> <message> - <location filename="Helpviewer/Network/FtpReply.py" line="155"/> + <location filename="Helpviewer/Network/FtpReply.py" line="141"/> <source>No suitable proxy found.</source> <translation type="unfinished">Не найдено подходящего прокси.</translation> </message> @@ -13584,13 +13584,18 @@ <context> <name>FtpSyncHandler</name> <message> - <location filename="Helpviewer/Sync/FtpSyncHandler.py" line="89"/> + <location filename="Helpviewer/Sync/FtpSyncHandler.py" line="96"/> <source>No suitable proxy found.</source> <translation type="unfinished">Не найдено подходящего прокси.</translation> </message> <message> - <location filename="Helpviewer/Sync/FtpSyncHandler.py" line="163"/> - <source>Synchronization finished</source> + <location filename="Helpviewer/Sync/FtpSyncHandler.py" line="356"/> + <source>Cannot log in to FTP host.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="Helpviewer/Sync/FtpSyncHandler.py" line="363"/> + <source>Synchronization finished.</source> <translation type="unfinished"></translation> </message> </context> @@ -27875,12 +27880,12 @@ <context> <name>NetworkAccessManager</name> <message> - <location filename="Helpviewer/Network/NetworkAccessManager.py" line="197"/> + <location filename="Helpviewer/Network/NetworkAccessManager.py" line="200"/> <source><b>Enter username and password for '{0}'</b></source> <translation><b>Введите имя пользователя и пароль для '{0}'</b></translation> </message> <message> - <location filename="Helpviewer/Network/NetworkAccessManager.py" line="200"/> + <location filename="Helpviewer/Network/NetworkAccessManager.py" line="197"/> <source><b>Enter username and password for '{0}', realm '{1}'</b></source> <translation><b>Введите имя пользователя и пароль для '{0}'; realm '{1}'</b></translation> </message>
--- a/i18n/eric5_tr.ts Sat Sep 22 19:40:50 2012 +0200 +++ b/i18n/eric5_tr.ts Sun Sep 23 16:23:04 2012 +0200 @@ -6497,7 +6497,7 @@ <message> <location filename="Helpviewer/Download/DownloadItem.ui" line="63"/> <source>Info</source> - <translation>Bilgi</translation> + <translation type="obsolete">Bilgi</translation> </message> <message> <location filename="Helpviewer/Download/DownloadItem.ui" line="78"/> @@ -6530,37 +6530,37 @@ <translation type="obsolete"><p>İndirdiğiniz <b>{0}</b> doyası hakkında bilgin var.</p><p>Bununla ne yapmak istiyorsunuz?</p></translation> </message> <message> - <location filename="Helpviewer/Download/DownloadItem.py" line="206"/> + <location filename="Helpviewer/Download/DownloadItem.py" line="219"/> <source>Download canceled: {0}</source> <translation>İndirme iptal edildi: {0}</translation> </message> <message> - <location filename="Helpviewer/Download/DownloadItem.py" line="196"/> + <location filename="Helpviewer/Download/DownloadItem.py" line="209"/> <source>Save File</source> <translation>Dosyayı Kaydet</translation> </message> <message> - <location filename="Helpviewer/Download/DownloadItem.py" line="225"/> + <location filename="Helpviewer/Download/DownloadItem.py" line="238"/> <source>Download directory ({0}) couldn't be created.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="Helpviewer/Download/DownloadItem.py" line="395"/> + <location filename="Helpviewer/Download/DownloadItem.py" line="412"/> <source>Error opening save file: {0}</source> <translation>kaydedilen dosyanın açılışında hata:{0}</translation> </message> <message> - <location filename="Helpviewer/Download/DownloadItem.py" line="407"/> + <location filename="Helpviewer/Download/DownloadItem.py" line="424"/> <source>Error saving: {0}</source> <translation>Kaydederken hata: {0}</translation> </message> <message> - <location filename="Helpviewer/Download/DownloadItem.py" line="419"/> + <location filename="Helpviewer/Download/DownloadItem.py" line="436"/> <source>Network Error: {0}</source> <translation>Ağ hatası: {0}</translation> </message> <message> - <location filename="Helpviewer/Download/DownloadItem.py" line="528"/> + <location filename="Helpviewer/Download/DownloadItem.py" line="545"/> <source>?</source> <translation>?</translation> </message> @@ -6570,12 +6570,12 @@ <translation type="obsolete">{0} indirildi</translation> </message> <message> - <location filename="Helpviewer/Download/DownloadItem.py" line="541"/> + <location filename="Helpviewer/Download/DownloadItem.py" line="558"/> <source>{0} of {1} - Stopped</source> <translation>{0} nın{1} - Durdu</translation> </message> <message> - <location filename="Helpviewer/Download/DownloadItem.py" line="184"/> + <location filename="Helpviewer/Download/DownloadItem.py" line="197"/> <source>VirusTotal scan scheduled: {0}</source> <translation type="unfinished"></translation> </message> @@ -6585,13 +6585,13 @@ <translation type="unfinished"></translation> </message> <message> - <location filename="Helpviewer/Download/DownloadItem.py" line="527"/> + <location filename="Helpviewer/Download/DownloadItem.py" line="544"/> <source>{0} of {1} ({2}/sec) {3}</source> <translation type="unfinished"></translation> </message> <message> - <location filename="Helpviewer/Download/DownloadItem.py" line="536"/> + <location filename="Helpviewer/Download/DownloadItem.py" line="553"/> <source>{0} downloaded SHA1: {1} MD5: {2}</source> @@ -13628,24 +13628,24 @@ <context> <name>FtpReply</name> <message> - <location filename="Helpviewer/Network/FtpReply.py" line="395"/> + <location filename="Helpviewer/Network/FtpReply.py" line="386"/> <source> <p><a class="link_parent" href="{0}">Change to parent directory</a></p></source> <translation type="unfinished"></translation> </message> <message> - <location filename="Helpviewer/Network/FtpReply.py" line="408"/> + <location filename="Helpviewer/Network/FtpReply.py" line="399"/> <source> <tr><th align="left">Name</th><th>Size</th><th align="left">Last modified</th></tr> </source> <translation type="unfinished"></translation> </message> <message> - <location filename="Helpviewer/Network/FtpReply.py" line="434"/> + <location filename="Helpviewer/Network/FtpReply.py" line="425"/> <source>{0} {1}</source> <comment>size unit</comment> <translation type="unfinished"></translation> </message> <message> - <location filename="Helpviewer/Network/FtpReply.py" line="458"/> + <location filename="Helpviewer/Network/FtpReply.py" line="449"/> <source>Listing of {0}</source> <translation type="unfinished"></translation> </message> @@ -13655,7 +13655,7 @@ <translation type="obsolete"><b> '{0}' için kullanıcı adını ve parolayı giriniz</b></translation> </message> <message> - <location filename="Helpviewer/Network/FtpReply.py" line="155"/> + <location filename="Helpviewer/Network/FtpReply.py" line="141"/> <source>No suitable proxy found.</source> <translation type="unfinished"></translation> </message> @@ -13663,13 +13663,18 @@ <context> <name>FtpSyncHandler</name> <message> - <location filename="Helpviewer/Sync/FtpSyncHandler.py" line="89"/> + <location filename="Helpviewer/Sync/FtpSyncHandler.py" line="96"/> <source>No suitable proxy found.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="Helpviewer/Sync/FtpSyncHandler.py" line="163"/> - <source>Synchronization finished</source> + <location filename="Helpviewer/Sync/FtpSyncHandler.py" line="356"/> + <source>Cannot log in to FTP host.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="Helpviewer/Sync/FtpSyncHandler.py" line="363"/> + <source>Synchronization finished.</source> <translation type="unfinished"></translation> </message> </context> @@ -27948,12 +27953,12 @@ <context> <name>NetworkAccessManager</name> <message> - <location filename="Helpviewer/Network/NetworkAccessManager.py" line="197"/> + <location filename="Helpviewer/Network/NetworkAccessManager.py" line="200"/> <source><b>Enter username and password for '{0}'</b></source> <translation><b> '{0}' için kullanıcı adını ve parolayı giriniz</b></translation> </message> <message> - <location filename="Helpviewer/Network/NetworkAccessManager.py" line="200"/> + <location filename="Helpviewer/Network/NetworkAccessManager.py" line="197"/> <source><b>Enter username and password for '{0}', realm '{1}'</b></source> <translation><b> '{1}' alanı, '{0}' için kullanıcı adı ve parola giriniz</b></translation> </message>
--- a/i18n/eric5_zh_CN.GB2312.ts Sat Sep 22 19:40:50 2012 +0200 +++ b/i18n/eric5_zh_CN.GB2312.ts Sun Sep 23 16:23:04 2012 +0200 @@ -6806,7 +6806,7 @@ <message> <location filename="Helpviewer/Download/DownloadItem.ui" line="63"/> <source>Info</source> - <translation type="unfinished">信息</translation> + <translation type="obsolete">信息</translation> </message> <message> <location filename="Helpviewer/Download/DownloadItem.ui" line="78"/> @@ -6829,47 +6829,47 @@ <translation type="unfinished"></translation> </message> <message> - <location filename="Helpviewer/Download/DownloadItem.py" line="206"/> + <location filename="Helpviewer/Download/DownloadItem.py" line="219"/> <source>Download canceled: {0}</source> <translation type="unfinished"></translation> </message> <message> - <location filename="Helpviewer/Download/DownloadItem.py" line="196"/> + <location filename="Helpviewer/Download/DownloadItem.py" line="209"/> <source>Save File</source> <translation type="unfinished">保存文件</translation> </message> <message> - <location filename="Helpviewer/Download/DownloadItem.py" line="225"/> + <location filename="Helpviewer/Download/DownloadItem.py" line="238"/> <source>Download directory ({0}) couldn't be created.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="Helpviewer/Download/DownloadItem.py" line="395"/> + <location filename="Helpviewer/Download/DownloadItem.py" line="412"/> <source>Error opening save file: {0}</source> <translation type="unfinished"></translation> </message> <message> - <location filename="Helpviewer/Download/DownloadItem.py" line="407"/> + <location filename="Helpviewer/Download/DownloadItem.py" line="424"/> <source>Error saving: {0}</source> <translation type="unfinished"></translation> </message> <message> - <location filename="Helpviewer/Download/DownloadItem.py" line="419"/> + <location filename="Helpviewer/Download/DownloadItem.py" line="436"/> <source>Network Error: {0}</source> <translation type="unfinished"></translation> </message> <message> - <location filename="Helpviewer/Download/DownloadItem.py" line="528"/> + <location filename="Helpviewer/Download/DownloadItem.py" line="545"/> <source>?</source> <translation type="unfinished">?</translation> </message> <message> - <location filename="Helpviewer/Download/DownloadItem.py" line="541"/> + <location filename="Helpviewer/Download/DownloadItem.py" line="558"/> <source>{0} of {1} - Stopped</source> <translation type="unfinished"></translation> </message> <message> - <location filename="Helpviewer/Download/DownloadItem.py" line="184"/> + <location filename="Helpviewer/Download/DownloadItem.py" line="197"/> <source>VirusTotal scan scheduled: {0}</source> <translation type="unfinished"></translation> </message> @@ -6879,13 +6879,13 @@ <translation type="unfinished"></translation> </message> <message> - <location filename="Helpviewer/Download/DownloadItem.py" line="527"/> + <location filename="Helpviewer/Download/DownloadItem.py" line="544"/> <source>{0} of {1} ({2}/sec) {3}</source> <translation type="unfinished"></translation> </message> <message> - <location filename="Helpviewer/Download/DownloadItem.py" line="536"/> + <location filename="Helpviewer/Download/DownloadItem.py" line="553"/> <source>{0} downloaded SHA1: {1} MD5: {2}</source> @@ -14391,29 +14391,29 @@ <context> <name>FtpReply</name> <message> - <location filename="Helpviewer/Network/FtpReply.py" line="395"/> + <location filename="Helpviewer/Network/FtpReply.py" line="386"/> <source> <p><a class="link_parent" href="{0}">Change to parent directory</a></p></source> <translation type="unfinished"></translation> </message> <message> - <location filename="Helpviewer/Network/FtpReply.py" line="408"/> + <location filename="Helpviewer/Network/FtpReply.py" line="399"/> <source> <tr><th align="left">Name</th><th>Size</th><th align="left">Last modified</th></tr> </source> <translation type="unfinished"></translation> </message> <message> - <location filename="Helpviewer/Network/FtpReply.py" line="434"/> + <location filename="Helpviewer/Network/FtpReply.py" line="425"/> <source>{0} {1}</source> <comment>size unit</comment> <translation type="unfinished"></translation> </message> <message> - <location filename="Helpviewer/Network/FtpReply.py" line="458"/> + <location filename="Helpviewer/Network/FtpReply.py" line="449"/> <source>Listing of {0}</source> <translation type="unfinished"></translation> </message> <message> - <location filename="Helpviewer/Network/FtpReply.py" line="155"/> + <location filename="Helpviewer/Network/FtpReply.py" line="141"/> <source>No suitable proxy found.</source> <translation type="unfinished"></translation> </message> @@ -14421,13 +14421,18 @@ <context> <name>FtpSyncHandler</name> <message> - <location filename="Helpviewer/Sync/FtpSyncHandler.py" line="89"/> + <location filename="Helpviewer/Sync/FtpSyncHandler.py" line="96"/> <source>No suitable proxy found.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="Helpviewer/Sync/FtpSyncHandler.py" line="163"/> - <source>Synchronization finished</source> + <location filename="Helpviewer/Sync/FtpSyncHandler.py" line="356"/> + <source>Cannot log in to FTP host.</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="Helpviewer/Sync/FtpSyncHandler.py" line="363"/> + <source>Synchronization finished.</source> <translation type="unfinished"></translation> </message> </context> @@ -29371,12 +29376,12 @@ <translation type="unfinished"></translation> </message> <message> - <location filename="Helpviewer/Network/NetworkAccessManager.py" line="197"/> + <location filename="Helpviewer/Network/NetworkAccessManager.py" line="200"/> <source><b>Enter username and password for '{0}'</b></source> <translation type="unfinished"></translation> </message> <message> - <location filename="Helpviewer/Network/NetworkAccessManager.py" line="200"/> + <location filename="Helpviewer/Network/NetworkAccessManager.py" line="197"/> <source><b>Enter username and password for '{0}', realm '{1}'</b></source> <translation type="unfinished"></translation> </message>