20 |
20 |
21 class DirectorySyncHandler(SyncHandler): |
21 class DirectorySyncHandler(SyncHandler): |
22 """ |
22 """ |
23 Class implementing a synchronization handler using a shared directory. |
23 Class implementing a synchronization handler using a shared directory. |
24 |
24 |
25 @signal syncStatus(type_, done, message) emitted to indicate the synchronization |
25 @signal syncStatus(type_, message) emitted to indicate the synchronization |
26 status (string one of "bookmarks", "history", "passwords" or "useragents", |
26 status (string one of "bookmarks", "history", "passwords", "useragents" or |
27 boolean, string) |
27 "speeddial", string) |
28 @signal syncError(message) emitted for a general error with the error message (string) |
28 @signal syncError(message) emitted for a general error with the error message (string) |
29 @signal syncMessage(message) emitted to send a message about synchronization (string) |
29 @signal syncMessage(message) emitted to send a message about synchronization (string) |
30 @signal syncFinished(type_, done, download) emitted after a synchronization has |
30 @signal syncFinished(type_, done, download) emitted after a synchronization has |
31 finished (string one of "bookmarks", "history", "passwords" or "useragents", |
31 finished (string one of "bookmarks", "history", "passwords", "useragents" or |
32 boolean, boolean) |
32 "speeddial", boolean, boolean) |
33 """ |
33 """ |
34 syncStatus = pyqtSignal(str, bool, str) |
34 syncStatus = pyqtSignal(str, str) |
35 syncError = pyqtSignal(str) |
35 syncError = pyqtSignal(str) |
36 syncMessage = pyqtSignal(str) |
36 syncMessage = pyqtSignal(str) |
37 syncFinished = pyqtSignal(str, bool, bool) |
37 syncFinished = pyqtSignal(str, bool, bool) |
38 |
38 |
39 def __init__(self, parent=None): |
39 def __init__(self, parent=None): |
70 .format(str(err))) |
70 .format(str(err))) |
71 return |
71 return |
72 |
72 |
73 self.__initialSync() |
73 self.__initialSync() |
74 |
74 |
75 def __downloadFile(self, type_, fileName): |
75 def __downloadFile(self, type_, fileName, timestamp): |
76 """ |
76 """ |
77 Private method to downlaod the given file. |
77 Private method to downlaod the given file. |
78 |
78 |
79 @param type_ type of the synchronization event (string one |
79 @param type_ type of the synchronization event (string one |
80 of "bookmarks", "history", "passwords" or "useragents") |
80 of "bookmarks", "history", "passwords" or "useragents") |
81 @param fileName name of the file to be downloaded (string) |
81 @param fileName name of the file to be downloaded (string) |
82 """ |
82 @param timestamp time stamp in seconds of the file to be downloaded (int) |
|
83 """ |
|
84 self.syncStatus.emit(type_, self._messages[type_]["RemoteExists"]) |
83 try: |
85 try: |
84 f = open(os.path.join(Preferences.getHelp("SyncDirectoryPath"), |
86 f = open(os.path.join(Preferences.getHelp("SyncDirectoryPath"), |
85 self._remoteFiles[type_]), "rb") |
87 self._remoteFiles[type_]), "rb") |
86 data = f.read() |
88 data = f.read() |
87 f.close() |
89 f.close() |
88 except IOError as err: |
90 except IOError as err: |
89 self.syncStatus.emit(type_, False, |
91 self.syncStatus.emit(type_, |
90 self.trUtf8("Cannot read remote file.\n{0}").format(str(err))) |
92 self.trUtf8("Cannot read remote file.\n{0}").format(str(err))) |
91 self.syncFinished(type_, False, True) |
93 self.syncFinished(type_, False, True) |
92 return |
94 return |
93 |
95 |
94 ok, error = self.writeFile(QByteArray(data), fileName) |
96 QCoreApplication.processEvents() |
95 if ok: |
97 ok, error = self.writeFile(QByteArray(data), fileName, timestamp) |
96 self.syncStatus.emit(type_, True, self._messages[type_]["RemoteExists"]) |
98 if not ok: |
97 else: |
99 self.syncStatus.emit(type_, error) |
98 self.syncStatus.emit(type_, False, error) |
100 self.syncFinished.emit(type_, ok, True) |
99 self.syncFinished.emit(type_, True, True) |
|
100 |
101 |
101 def __uploadFile(self, type_, fileName): |
102 def __uploadFile(self, type_, fileName): |
102 """ |
103 """ |
103 Private method to upload the given file. |
104 Private method to upload the given file. |
104 |
105 |
105 @param type_ type of the synchronization event (string one |
106 @param type_ type of the synchronization event (string one |
106 of "bookmarks", "history", "passwords" or "useragents") |
107 of "bookmarks", "history", "passwords" or "useragents") |
107 @param fileName name of the file to be uploaded (string) |
108 @param fileName name of the file to be uploaded (string) |
108 """ |
109 """ |
|
110 QCoreApplication.processEvents() |
109 data = self.readFile(fileName) |
111 data = self.readFile(fileName) |
110 if data.isEmpty(): |
112 if data.isEmpty(): |
111 self.syncStatus.emit(type_, True, |
113 self.syncStatus.emit(type_, self._messages[type_]["LocalMissing"]) |
112 self._messages[type_]["LocalMissing"]) |
114 self.syncFinished(type_, False, False) |
|
115 return |
113 else: |
116 else: |
114 try: |
117 try: |
115 f = open(os.path.join(Preferences.getHelp("SyncDirectoryPath"), |
118 f = open(os.path.join(Preferences.getHelp("SyncDirectoryPath"), |
116 self._remoteFiles[type_]), "wb") |
119 self._remoteFiles[type_]), "wb") |
117 f.write(bytes(data)) |
120 f.write(bytes(data)) |
118 f.close() |
121 f.close() |
119 except IOError as err: |
122 except IOError as err: |
120 self.syncStatus.emit(type_, False, |
123 self.syncStatus.emit(type_, |
121 self.trUtf8("Cannot write remote file.\n{0}").format(str(err))) |
124 self.trUtf8("Cannot write remote file.\n{0}").format(str(err))) |
122 self.syncFinished(type_, False, False) |
125 self.syncFinished(type_, False, False) |
123 return |
126 return |
124 |
127 |
125 self.syncFinished.emit(type_, True, False) |
128 self.syncFinished.emit(type_, True, False) |
135 if not self.__forceUpload and \ |
138 if not self.__forceUpload and \ |
136 os.path.exists(os.path.join(Preferences.getHelp("SyncDirectoryPath"), |
139 os.path.exists(os.path.join(Preferences.getHelp("SyncDirectoryPath"), |
137 self._remoteFiles[type_])) and \ |
140 self._remoteFiles[type_])) and \ |
138 QFileInfo(fileName).lastModified() <= \ |
141 QFileInfo(fileName).lastModified() <= \ |
139 QFileInfo(os.path.join(Preferences.getHelp("SyncDirectoryPath"), |
142 QFileInfo(os.path.join(Preferences.getHelp("SyncDirectoryPath"), |
140 self._remoteFiles[type_]).lastModified()): |
143 self._remoteFiles[type_])).lastModified(): |
141 self.__downloadFile(type_, fileName, |
144 self.__downloadFile(type_, fileName, |
142 QFileInfo(os.path.join(Preferences.getHelp("SyncDirectoryPath"), |
145 QFileInfo(os.path.join(Preferences.getHelp("SyncDirectoryPath"), |
143 self._remoteFiles[type_]).lastModified()).toTime_t()) |
146 self._remoteFiles[type_])).lastModified().toTime_t()) |
144 else: |
147 else: |
145 if os.path.exists(os.path.join(Preferences.getHelp("SyncDirectoryPath"), |
148 if os.path.exists(os.path.join(Preferences.getHelp("SyncDirectoryPath"), |
146 self._remoteFiles[type_])): |
149 self._remoteFiles[type_])): |
147 self.syncStatus.emit(type_, True, |
150 self.syncStatus.emit(type_, self._messages[type_]["RemoteMissing"]) |
148 self._messages[type_]["RemoteMissing"]) |
|
149 else: |
151 else: |
150 self.syncStatus.emit(type_, True, |
152 self.syncStatus.emit(type_, self._messages[type_]["LocalNewer"]) |
151 self._messages[type_]["LocalNewer"]) |
|
152 self.__uploadFile(type_, fileName) |
153 self.__uploadFile(type_, fileName) |
153 |
154 |
154 def __initialSync(self): |
155 def __initialSync(self): |
155 """ |
156 """ |
156 Private slot to do the initial synchronization. |
157 Private slot to do the initial synchronization. |
157 """ |
158 """ |
|
159 QCoreApplication.processEvents() |
158 # Bookmarks |
160 # Bookmarks |
159 if Preferences.getHelp("SyncBookmarks"): |
161 if Preferences.getHelp("SyncBookmarks"): |
160 self.__initialSyncFile("bookmarks", |
162 self.__initialSyncFile("bookmarks", |
161 Helpviewer.HelpWindow.HelpWindow.bookmarksManager().getFileName()) |
163 Helpviewer.HelpWindow.HelpWindow.bookmarksManager().getFileName()) |
162 |
164 |
|
165 QCoreApplication.processEvents() |
163 # History |
166 # History |
164 if Preferences.getHelp("SyncHistory"): |
167 if Preferences.getHelp("SyncHistory"): |
165 self.__initialSyncFile("history", |
168 self.__initialSyncFile("history", |
166 Helpviewer.HelpWindow.HelpWindow.historyManager().getFileName()) |
169 Helpviewer.HelpWindow.HelpWindow.historyManager().getFileName()) |
167 |
170 |
|
171 QCoreApplication.processEvents() |
168 # Passwords |
172 # Passwords |
169 if Preferences.getHelp("SyncPasswords"): |
173 if Preferences.getHelp("SyncPasswords"): |
170 self.__initialSyncFile("passwords", |
174 self.__initialSyncFile("passwords", |
171 Helpviewer.HelpWindow.HelpWindow.passwordManager().getFileName()) |
175 Helpviewer.HelpWindow.HelpWindow.passwordManager().getFileName()) |
172 |
176 |
|
177 QCoreApplication.processEvents() |
173 # User Agent Settings |
178 # User Agent Settings |
174 if Preferences.getHelp("SyncUserAgents"): |
179 if Preferences.getHelp("SyncUserAgents"): |
175 self.__initialSyncFile("useragents", |
180 self.__initialSyncFile("useragents", |
176 Helpviewer.HelpWindow.HelpWindow.userAgentsManager().getFileName()) |
181 Helpviewer.HelpWindow.HelpWindow.userAgentsManager().getFileName()) |
177 |
182 |
|
183 QCoreApplication.processEvents() |
|
184 # Speed Dial Settings |
|
185 if Preferences.getHelp("SyncSpeedDial"): |
|
186 self.__initialSyncFile("speeddial", |
|
187 Helpviewer.HelpWindow.HelpWindow.speedDial().getFileName()) |
|
188 |
178 self.__forceUpload = False |
189 self.__forceUpload = False |
179 self.syncMessage.emit(self.trUtf8("Synchronization finished")) |
190 self.syncMessage.emit(self.trUtf8("Synchronization finished")) |
180 |
191 |
181 def __syncFile(self, type_, fileName): |
192 def __syncFile(self, type_, fileName): |
182 """ |
193 """ |
184 |
195 |
185 @param type_ type of the synchronization event (string one |
196 @param type_ type of the synchronization event (string one |
186 of "bookmarks", "history", "passwords" or "useragents") |
197 of "bookmarks", "history", "passwords" or "useragents") |
187 @param fileName name of the file to be synchronized (string) |
198 @param fileName name of the file to be synchronized (string) |
188 """ |
199 """ |
189 self.syncStatus.emit(type_, True, self._messages[type_]["Uploading"]) |
200 self.syncStatus.emit(type_, self._messages[type_]["Uploading"]) |
190 self.__uploadFile(type_, fileName) |
201 self.__uploadFile(type_, fileName) |
191 |
202 |
192 def syncBookmarks(self): |
203 def syncBookmarks(self): |
193 """ |
204 """ |
194 Public method to synchronize the bookmarks. |
205 Public method to synchronize the bookmarks. |