eric6/Helpviewer/Sync/SyncManager.py

changeset 6942
2602857055c5
parent 6645
ad476851d7e0
equal deleted inserted replaced
6941:f99d60d6b59b 6942:2602857055c5
1 # -*- coding: utf-8 -*-
2
3 # Copyright (c) 2012 - 2019 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 import Helpviewer.HelpWindow
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.getHelp("SyncType") == SyncGlobals.SyncTypeFtp:
82 from .FtpSyncHandler import FtpSyncHandler
83 self.__handler = FtpSyncHandler(self)
84 elif Preferences.getHelp("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.getHelp("SyncBookmarks"):
97 Helpviewer.HelpWindow.HelpWindow.bookmarksManager()\
98 .bookmarksSaved.connect(self.__syncBookmarks)
99 else:
100 try:
101 Helpviewer.HelpWindow.HelpWindow.bookmarksManager()\
102 .bookmarksSaved.disconnect(self.__syncBookmarks)
103 except TypeError:
104 pass
105
106 # connect sync manager to history manager
107 if Preferences.getHelp("SyncHistory"):
108 Helpviewer.HelpWindow.HelpWindow.historyManager().historySaved\
109 .connect(self.__syncHistory)
110 else:
111 try:
112 Helpviewer.HelpWindow.HelpWindow.historyManager()\
113 .historySaved.disconnect(self.__syncHistory)
114 except TypeError:
115 pass
116
117 # connect sync manager to passwords manager
118 if Preferences.getHelp("SyncPasswords"):
119 Helpviewer.HelpWindow.HelpWindow.passwordManager()\
120 .passwordsSaved.connect(self.__syncPasswords)
121 else:
122 try:
123 Helpviewer.HelpWindow.HelpWindow.passwordManager()\
124 .passwordsSaved.disconnect(self.__syncPasswords)
125 except TypeError:
126 pass
127
128 # connect sync manager to user agent manager
129 if Preferences.getHelp("SyncUserAgents"):
130 Helpviewer.HelpWindow.HelpWindow.userAgentsManager()\
131 .userAgentSettingsSaved.connect(self.__syncUserAgents)
132 else:
133 try:
134 Helpviewer.HelpWindow.HelpWindow.userAgentsManager()\
135 .userAgentSettingsSaved.disconnect(
136 self.__syncUserAgents)
137 except TypeError:
138 pass
139
140 # connect sync manager to speed dial
141 if Preferences.getHelp("SyncSpeedDial"):
142 Helpviewer.HelpWindow.HelpWindow.speedDial()\
143 .speedDialSaved.connect(self.__syncSpeedDial)
144 else:
145 try:
146 Helpviewer.HelpWindow.HelpWindow.speedDial()\
147 .speedDialSaved.disconnect(self.__syncSpeedDial)
148 except TypeError:
149 pass
150 else:
151 self.__handler = None
152
153 try:
154 Helpviewer.HelpWindow.HelpWindow.bookmarksManager()\
155 .bookmarksSaved.disconnect(self.__syncBookmarks)
156 except TypeError:
157 pass
158 try:
159 Helpviewer.HelpWindow.HelpWindow.historyManager().historySaved\
160 .disconnect(self.__syncHistory)
161 except TypeError:
162 pass
163 try:
164 Helpviewer.HelpWindow.HelpWindow.passwordManager()\
165 .passwordsSaved.disconnect(self.__syncPasswords)
166 except TypeError:
167 pass
168 try:
169 Helpviewer.HelpWindow.HelpWindow.userAgentsManager()\
170 .userAgentSettingsSaved.disconnect(self.__syncUserAgents)
171 except TypeError:
172 pass
173 try:
174 Helpviewer.HelpWindow.HelpWindow.speedDial()\
175 .speedDialSaved.disconnect(self.__syncSpeedDial)
176 except TypeError:
177 pass
178
179 def syncEnabled(self):
180 """
181 Public method to check, if synchronization is enabled.
182
183 @return flag indicating enabled synchronization
184 """
185 from . import SyncGlobals
186 return Preferences.getHelp("SyncEnabled") and \
187 Preferences.getHelp("SyncType") != SyncGlobals.SyncTypeNone
188
189 def __syncBookmarks(self):
190 """
191 Private slot to synchronize the bookmarks.
192 """
193 if self.__handler is not None:
194 self.__handler.syncBookmarks()
195
196 def __syncHistory(self):
197 """
198 Private slot to synchronize the history.
199 """
200 if self.__handler is not None:
201 self.__handler.syncHistory()
202
203 def __syncPasswords(self):
204 """
205 Private slot to synchronize the passwords.
206 """
207 if self.__handler is not None:
208 self.__handler.syncPasswords()
209
210 def __syncUserAgents(self):
211 """
212 Private slot to synchronize the user agent settings.
213 """
214 if self.__handler is not None:
215 self.__handler.syncUserAgents()
216
217 def __syncSpeedDial(self):
218 """
219 Private slot to synchronize the speed dial settings.
220 """
221 if self.__handler is not None:
222 self.__handler.syncSpeedDial()
223
224 def __syncError(self, message):
225 """
226 Private slot to handle general synchronization issues.
227
228 @param message error message (string)
229 """
230 self.syncError.emit(message)
231
232 def __syncFinished(self, type_, status, download):
233 """
234 Private slot to handle a finished synchronization event.
235
236 @param type_ type of the synchronization event (string one
237 of "bookmarks", "history", "passwords", "useragents" or
238 "speeddial")
239 @param status flag indicating success (boolean)
240 @param download flag indicating a download of a file (boolean)
241 """
242 if status and download:
243 if type_ == "bookmarks":
244 Helpviewer.HelpWindow.HelpWindow.bookmarksManager().reload()
245 elif type_ == "history":
246 Helpviewer.HelpWindow.HelpWindow.historyManager().reload()
247 elif type_ == "passwords":
248 Helpviewer.HelpWindow.HelpWindow.passwordManager().reload()
249 elif type_ == "useragents":
250 Helpviewer.HelpWindow.HelpWindow.userAgentsManager().reload()
251 elif type_ == "speeddial":
252 Helpviewer.HelpWindow.HelpWindow.speedDial().reload()
253 self.syncFinished.emit(type_, status, download)
254
255 def __syncStatus(self, type_, message):
256 """
257 Private slot to handle a status update of a synchronization event.
258
259 @param type_ type of the synchronization event (string one
260 of "bookmarks", "history", "passwords", "useragents" or
261 "speeddial")
262 @param message status message for the event (string)
263 """
264 self.syncMessage.emit(message)
265 self.syncStatus.emit(type_, message)
266
267 def close(self):
268 """
269 Public slot to shut down the synchronization manager.
270 """
271 if not self.syncEnabled():
272 return
273
274 if self.__handler is not None:
275 self.__handler.shutdown()

eric ide

mercurial