|
1 # -*- coding: utf-8 -*- |
|
2 |
|
3 # Copyright (c) 2012 - 2016 Detlev Offenbach <detlev@die-offenbachs.de> |
|
4 # |
|
5 |
|
6 """ |
|
7 Module implementing the synchronization manager class. |
|
8 """ |
|
9 |
|
10 from __future__ import unicode_literals |
|
11 |
|
12 from PyQt5.QtCore import QObject, pyqtSignal |
|
13 |
|
14 import Preferences |
|
15 |
|
16 from WebBrowser.WebBrowserWindow import WebBrowserWindow |
|
17 |
|
18 |
|
19 class SyncManager(QObject): |
|
20 """ |
|
21 Class implementing the synchronization manager. |
|
22 |
|
23 @signal syncError(message) emitted for a general error with the error |
|
24 message (string) |
|
25 @signal syncMessage(message) emitted to give status info about the sync |
|
26 process (string) |
|
27 @signal syncStatus(type_, message) emitted to indicate the synchronization |
|
28 status (string one of "bookmarks", "history", "passwords", |
|
29 "useragents" or "speeddial", string) |
|
30 @signal syncFinished(type_, done, download) emitted after a |
|
31 synchronization has finished (string one of "bookmarks", "history", |
|
32 "passwords", "useragents" or "speeddial", boolean, boolean) |
|
33 """ |
|
34 syncError = pyqtSignal(str) |
|
35 syncMessage = pyqtSignal(str) |
|
36 syncStatus = pyqtSignal(str, str) |
|
37 syncFinished = pyqtSignal(str, bool, bool) |
|
38 |
|
39 def __init__(self, parent=None): |
|
40 """ |
|
41 Constructor |
|
42 |
|
43 @param parent reference to the parent object (QObject) |
|
44 """ |
|
45 super(SyncManager, self).__init__(parent) |
|
46 |
|
47 self.__handler = None |
|
48 |
|
49 def handler(self): |
|
50 """ |
|
51 Public method to get a reference to the sync handler object. |
|
52 |
|
53 @return reference to the sync handler object (SyncHandler) |
|
54 """ |
|
55 return self.__handler |
|
56 |
|
57 def showSyncDialog(self): |
|
58 """ |
|
59 Public method to show the synchronization dialog. |
|
60 """ |
|
61 from .SyncAssistantDialog import SyncAssistantDialog |
|
62 dlg = SyncAssistantDialog() |
|
63 dlg.exec_() |
|
64 |
|
65 def loadSettings(self, forceUpload=False): |
|
66 """ |
|
67 Public method to load the settings. |
|
68 |
|
69 @keyparam forceUpload flag indicating a forced upload of the files |
|
70 (boolean) |
|
71 """ |
|
72 if self.__handler is not None: |
|
73 self.__handler.syncError.disconnect(self.__syncError) |
|
74 self.__handler.syncFinished.disconnect(self.__syncFinished) |
|
75 self.__handler.syncStatus.disconnect(self.__syncStatus) |
|
76 self.__handler.syncMessage.disconnect(self.syncMessage) |
|
77 self.__handler.shutdown() |
|
78 |
|
79 if self.syncEnabled(): |
|
80 from . import SyncGlobals |
|
81 if Preferences.getWebBrowser("SyncType") == SyncGlobals.SyncTypeFtp: |
|
82 from .FtpSyncHandler import FtpSyncHandler |
|
83 self.__handler = FtpSyncHandler(self) |
|
84 elif Preferences.getWebBrowser("SyncType") == \ |
|
85 SyncGlobals.SyncTypeDirectory: |
|
86 from .DirectorySyncHandler import DirectorySyncHandler |
|
87 self.__handler = DirectorySyncHandler(self) |
|
88 self.__handler.syncError.connect(self.__syncError) |
|
89 self.__handler.syncFinished.connect(self.__syncFinished) |
|
90 self.__handler.syncStatus.connect(self.__syncStatus) |
|
91 self.__handler.syncMessage.connect(self.syncMessage) |
|
92 |
|
93 self.__handler.initialLoadAndCheck(forceUpload=forceUpload) |
|
94 |
|
95 # connect sync manager to bookmarks manager |
|
96 if Preferences.getWebBrowser("SyncBookmarks"): |
|
97 WebBrowserWindow.bookmarksManager()\ |
|
98 .bookmarksSaved.connect(self.__syncBookmarks) |
|
99 else: |
|
100 try: |
|
101 WebBrowserWindow.bookmarksManager()\ |
|
102 .bookmarksSaved.disconnect(self.__syncBookmarks) |
|
103 except TypeError: |
|
104 pass |
|
105 |
|
106 # connect sync manager to history manager |
|
107 if Preferences.getWebBrowser("SyncHistory"): |
|
108 WebBrowserWindow.historyManager().historySaved\ |
|
109 .connect(self.__syncHistory) |
|
110 else: |
|
111 try: |
|
112 WebBrowserWindow.historyManager()\ |
|
113 .historySaved.disconnect(self.__syncHistory) |
|
114 except TypeError: |
|
115 pass |
|
116 |
|
117 # connect sync manager to passwords manager |
|
118 if Preferences.getWebBrowser("SyncPasswords"): |
|
119 WebBrowserWindow.passwordManager()\ |
|
120 .passwordsSaved.connect(self.__syncPasswords) |
|
121 else: |
|
122 try: |
|
123 WebBrowserWindow.passwordManager()\ |
|
124 .passwordsSaved.disconnect(self.__syncPasswords) |
|
125 except TypeError: |
|
126 pass |
|
127 |
|
128 # TODO: UserAgents |
|
129 # connect sync manager to user agent manager |
|
130 ## if Preferences.getWebBrowser("SyncUserAgents"): |
|
131 ## WebBrowserWindow.userAgentsManager()\ |
|
132 ## .userAgentSettingsSaved.connect(self.__syncUserAgents) |
|
133 ## else: |
|
134 ## try: |
|
135 ## WebBrowserWindow.userAgentsManager()\ |
|
136 ## .userAgentSettingsSaved.disconnect( |
|
137 ## self.__syncUserAgents) |
|
138 ## except TypeError: |
|
139 ## pass |
|
140 |
|
141 # TODO: SpeedDial |
|
142 # connect sync manager to speed dial |
|
143 ## if Preferences.getWebBrowser("SyncSpeedDial"): |
|
144 ## WebBrowserWindow.speedDial()\ |
|
145 ## .speedDialSaved.connect(self.__syncSpeedDial) |
|
146 ## else: |
|
147 ## try: |
|
148 ## WebBrowserWindow.speedDial()\ |
|
149 ## .speedDialSaved.disconnect(self.__syncSpeedDial) |
|
150 ## except TypeError: |
|
151 ## pass |
|
152 else: |
|
153 self.__handler = None |
|
154 |
|
155 try: |
|
156 WebBrowserWindow.bookmarksManager()\ |
|
157 .bookmarksSaved.disconnect(self.__syncBookmarks) |
|
158 except TypeError: |
|
159 pass |
|
160 try: |
|
161 WebBrowserWindow.historyManager().historySaved\ |
|
162 .disconnect(self.__syncHistory) |
|
163 except TypeError: |
|
164 pass |
|
165 try: |
|
166 WebBrowserWindow.passwordManager()\ |
|
167 .passwordsSaved.disconnect(self.__syncPasswords) |
|
168 except TypeError: |
|
169 pass |
|
170 # TODO: UserAgents |
|
171 ## try: |
|
172 ## WebBrowserWindow.userAgentsManager()\ |
|
173 ## .userAgentSettingsSaved.disconnect(self.__syncUserAgents) |
|
174 ## except TypeError: |
|
175 ## pass |
|
176 # TODO: SpeedDial |
|
177 ## try: |
|
178 ## WebBrowserWindow.speedDial()\ |
|
179 ## .speedDialSaved.disconnect(self.__syncSpeedDial) |
|
180 ## except TypeError: |
|
181 ## pass |
|
182 |
|
183 def syncEnabled(self): |
|
184 """ |
|
185 Public method to check, if synchronization is enabled. |
|
186 |
|
187 @return flag indicating enabled synchronization |
|
188 """ |
|
189 from . import SyncGlobals |
|
190 return Preferences.getWebBrowser("SyncEnabled") and \ |
|
191 Preferences.getWebBrowser("SyncType") != SyncGlobals.SyncTypeNone |
|
192 |
|
193 def __syncBookmarks(self): |
|
194 """ |
|
195 Private slot to synchronize the bookmarks. |
|
196 """ |
|
197 if self.__handler is not None: |
|
198 self.__handler.syncBookmarks() |
|
199 |
|
200 def __syncHistory(self): |
|
201 """ |
|
202 Private slot to synchronize the history. |
|
203 """ |
|
204 if self.__handler is not None: |
|
205 self.__handler.syncHistory() |
|
206 |
|
207 def __syncPasswords(self): |
|
208 """ |
|
209 Private slot to synchronize the passwords. |
|
210 """ |
|
211 if self.__handler is not None: |
|
212 self.__handler.syncPasswords() |
|
213 |
|
214 def __syncUserAgents(self): |
|
215 """ |
|
216 Private slot to synchronize the user agent settings. |
|
217 """ |
|
218 if self.__handler is not None: |
|
219 self.__handler.syncUserAgents() |
|
220 |
|
221 def __syncSpeedDial(self): |
|
222 """ |
|
223 Private slot to synchronize the speed dial settings. |
|
224 """ |
|
225 if self.__handler is not None: |
|
226 self.__handler.syncSpeedDial() |
|
227 |
|
228 def __syncError(self, message): |
|
229 """ |
|
230 Private slot to handle general synchronization issues. |
|
231 |
|
232 @param message error message (string) |
|
233 """ |
|
234 self.syncError.emit(message) |
|
235 |
|
236 def __syncFinished(self, type_, status, download): |
|
237 """ |
|
238 Private slot to handle a finished synchronization event. |
|
239 |
|
240 @param type_ type of the synchronization event (string one |
|
241 of "bookmarks", "history", "passwords", "useragents" or |
|
242 "speeddial") |
|
243 @param status flag indicating success (boolean) |
|
244 @param download flag indicating a download of a file (boolean) |
|
245 """ |
|
246 if status and download: |
|
247 if type_ == "bookmarks": |
|
248 WebBrowserWindow.bookmarksManager().reload() |
|
249 elif type_ == "history": |
|
250 WebBrowserWindow.historyManager().reload() |
|
251 elif type_ == "passwords": |
|
252 WebBrowserWindow.passwordManager().reload() |
|
253 # TODO: UserAgents |
|
254 ## elif type_ == "useragents": |
|
255 ## WebBrowserWindow.userAgentsManager().reload() |
|
256 # TODO: SpeeedDial |
|
257 ## elif type_ == "speeddial": |
|
258 ## WebBrowserWindow.speedDial().reload() |
|
259 self.syncFinished.emit(type_, status, download) |
|
260 |
|
261 def __syncStatus(self, type_, message): |
|
262 """ |
|
263 Private slot to handle a status update of a synchronization event. |
|
264 |
|
265 @param type_ type of the synchronization event (string one |
|
266 of "bookmarks", "history", "passwords", "useragents" or |
|
267 "speeddial") |
|
268 @param message status message for the event (string) |
|
269 """ |
|
270 self.syncMessage.emit(message) |
|
271 self.syncStatus.emit(type_, message) |
|
272 |
|
273 def close(self): |
|
274 """ |
|
275 Public slot to shut down the synchronization manager. |
|
276 """ |
|
277 if not self.syncEnabled(): |
|
278 return |
|
279 |
|
280 if self.__handler is not None: |
|
281 self.__handler.shutdown() |