diff -r 10706f6ad9d2 -r 40c911b8c0dd Helpviewer/Sync/DirectorySyncHandler.py --- a/Helpviewer/Sync/DirectorySyncHandler.py Sun Mar 11 13:04:30 2012 +0100 +++ b/Helpviewer/Sync/DirectorySyncHandler.py Sun Mar 11 16:46:46 2012 +0100 @@ -9,7 +9,7 @@ import os -from PyQt4.QtCore import pyqtSignal, QByteArray, QFileInfo +from PyQt4.QtCore import pyqtSignal, QByteArray, QFileInfo, QCoreApplication from .SyncHandler import SyncHandler @@ -22,16 +22,16 @@ """ Class implementing a synchronization handler using a shared directory. - @signal syncStatus(type_, done, message) emitted to indicate the synchronization - status (string one of "bookmarks", "history", "passwords" or "useragents", - boolean, string) + @signal syncStatus(type_, message) emitted to indicate the synchronization + status (string one of "bookmarks", "history", "passwords", "useragents" or + "speeddial", string) @signal syncError(message) emitted for a general error with the error message (string) @signal syncMessage(message) emitted to send a message about synchronization (string) @signal syncFinished(type_, done, download) emitted after a synchronization has - finished (string one of "bookmarks", "history", "passwords" or "useragents", - boolean, boolean) + finished (string one of "bookmarks", "history", "passwords", "useragents" or + "speeddial", boolean, boolean) """ - syncStatus = pyqtSignal(str, bool, str) + syncStatus = pyqtSignal(str, str) syncError = pyqtSignal(str) syncMessage = pyqtSignal(str) syncFinished = pyqtSignal(str, bool, bool) @@ -72,31 +72,32 @@ self.__initialSync() - def __downloadFile(self, type_, fileName): + def __downloadFile(self, type_, fileName, timestamp): """ Private method to downlaod the given file. @param type_ type of the synchronization event (string one of "bookmarks", "history", "passwords" or "useragents") @param fileName name of the file to be downloaded (string) + @param timestamp time stamp in seconds of the file to be downloaded (int) """ + self.syncStatus.emit(type_, self._messages[type_]["RemoteExists"]) try: f = open(os.path.join(Preferences.getHelp("SyncDirectoryPath"), self._remoteFiles[type_]), "rb") data = f.read() f.close() except IOError as err: - self.syncStatus.emit(type_, False, + self.syncStatus.emit(type_, self.trUtf8("Cannot read remote file.\n{0}").format(str(err))) self.syncFinished(type_, False, True) return - ok, error = self.writeFile(QByteArray(data), fileName) - if ok: - self.syncStatus.emit(type_, True, self._messages[type_]["RemoteExists"]) - else: - self.syncStatus.emit(type_, False, error) - self.syncFinished.emit(type_, True, True) + QCoreApplication.processEvents() + ok, error = self.writeFile(QByteArray(data), fileName, timestamp) + if not ok: + self.syncStatus.emit(type_, error) + self.syncFinished.emit(type_, ok, True) def __uploadFile(self, type_, fileName): """ @@ -106,10 +107,12 @@ of "bookmarks", "history", "passwords" or "useragents") @param fileName name of the file to be uploaded (string) """ + QCoreApplication.processEvents() data = self.readFile(fileName) if data.isEmpty(): - self.syncStatus.emit(type_, True, - self._messages[type_]["LocalMissing"]) + self.syncStatus.emit(type_, self._messages[type_]["LocalMissing"]) + self.syncFinished(type_, False, False) + return else: try: f = open(os.path.join(Preferences.getHelp("SyncDirectoryPath"), @@ -117,7 +120,7 @@ f.write(bytes(data)) f.close() except IOError as err: - self.syncStatus.emit(type_, False, + self.syncStatus.emit(type_, self.trUtf8("Cannot write remote file.\n{0}").format(str(err))) self.syncFinished(type_, False, False) return @@ -137,44 +140,52 @@ self._remoteFiles[type_])) and \ QFileInfo(fileName).lastModified() <= \ QFileInfo(os.path.join(Preferences.getHelp("SyncDirectoryPath"), - self._remoteFiles[type_]).lastModified()): + self._remoteFiles[type_])).lastModified(): self.__downloadFile(type_, fileName, QFileInfo(os.path.join(Preferences.getHelp("SyncDirectoryPath"), - self._remoteFiles[type_]).lastModified()).toTime_t()) + self._remoteFiles[type_])).lastModified().toTime_t()) else: if os.path.exists(os.path.join(Preferences.getHelp("SyncDirectoryPath"), self._remoteFiles[type_])): - self.syncStatus.emit(type_, True, - self._messages[type_]["RemoteMissing"]) + self.syncStatus.emit(type_, self._messages[type_]["RemoteMissing"]) else: - self.syncStatus.emit(type_, True, - self._messages[type_]["LocalNewer"]) + self.syncStatus.emit(type_, self._messages[type_]["LocalNewer"]) self.__uploadFile(type_, fileName) def __initialSync(self): """ Private slot to do the initial synchronization. """ + QCoreApplication.processEvents() # Bookmarks if Preferences.getHelp("SyncBookmarks"): self.__initialSyncFile("bookmarks", Helpviewer.HelpWindow.HelpWindow.bookmarksManager().getFileName()) + QCoreApplication.processEvents() # History if Preferences.getHelp("SyncHistory"): self.__initialSyncFile("history", Helpviewer.HelpWindow.HelpWindow.historyManager().getFileName()) + QCoreApplication.processEvents() # Passwords if Preferences.getHelp("SyncPasswords"): self.__initialSyncFile("passwords", Helpviewer.HelpWindow.HelpWindow.passwordManager().getFileName()) + QCoreApplication.processEvents() # User Agent Settings if Preferences.getHelp("SyncUserAgents"): self.__initialSyncFile("useragents", Helpviewer.HelpWindow.HelpWindow.userAgentsManager().getFileName()) + QCoreApplication.processEvents() + # Speed Dial Settings + if Preferences.getHelp("SyncSpeedDial"): + self.__initialSyncFile("speeddial", + Helpviewer.HelpWindow.HelpWindow.speedDial().getFileName()) + self.__forceUpload = False self.syncMessage.emit(self.trUtf8("Synchronization finished")) @@ -186,7 +197,7 @@ of "bookmarks", "history", "passwords" or "useragents") @param fileName name of the file to be synchronized (string) """ - self.syncStatus.emit(type_, True, self._messages[type_]["Uploading"]) + self.syncStatus.emit(type_, self._messages[type_]["Uploading"]) self.__uploadFile(type_, fileName) def syncBookmarks(self): @@ -217,6 +228,13 @@ self.__syncFile("useragents", Helpviewer.HelpWindow.HelpWindow.userAgentsManager().getFileName()) + def syncSpeedDial(self): + """ + Public method to synchronize the speed dial data. + """ + self.__syncFile("speeddial", + Helpviewer.HelpWindow.HelpWindow.speedDial().getFileName()) + def shutdown(self): """ Public method to shut down the handler.