18 |
18 |
19 |
19 |
20 class UserAgentManager(QObject): |
20 class UserAgentManager(QObject): |
21 """ |
21 """ |
22 Class implementing a user agent manager. |
22 Class implementing a user agent manager. |
23 |
23 |
24 @signal changed() emitted to indicate a change |
24 @signal changed() emitted to indicate a change |
25 @signal userAgentSettingsSaved() emitted after the user agent settings |
25 @signal userAgentSettingsSaved() emitted after the user agent settings |
26 were saved |
26 were saved |
27 """ |
27 """ |
|
28 |
28 changed = pyqtSignal() |
29 changed = pyqtSignal() |
29 userAgentSettingsSaved = pyqtSignal() |
30 userAgentSettingsSaved = pyqtSignal() |
30 |
31 |
31 def __init__(self, parent=None): |
32 def __init__(self, parent=None): |
32 """ |
33 """ |
33 Constructor |
34 Constructor |
34 |
35 |
35 @param parent reference to the parent object (QObject) |
36 @param parent reference to the parent object (QObject) |
36 """ |
37 """ |
37 super().__init__(parent) |
38 super().__init__(parent) |
38 |
39 |
39 self.__agents = {} |
40 self.__agents = {} |
40 # dictionary with agent strings indexed by host name |
41 # dictionary with agent strings indexed by host name |
41 self.__loaded = False |
42 self.__loaded = False |
42 self.__saveTimer = AutoSaver(self, self.save) |
43 self.__saveTimer = AutoSaver(self, self.save) |
43 |
44 |
44 self.changed.connect(self.__saveTimer.changeOccurred) |
45 self.changed.connect(self.__saveTimer.changeOccurred) |
45 |
46 |
46 def getFileName(self): |
47 def getFileName(self): |
47 """ |
48 """ |
48 Public method to get the file name of the user agents file. |
49 Public method to get the file name of the user agents file. |
49 |
50 |
50 @return name of the user agents file (string) |
51 @return name of the user agents file (string) |
51 """ |
52 """ |
52 return os.path.join( |
53 return os.path.join( |
53 Utilities.getConfigDir(), "web_browser", "userAgentSettings.xml") |
54 Utilities.getConfigDir(), "web_browser", "userAgentSettings.xml" |
54 |
55 ) |
|
56 |
55 def save(self): |
57 def save(self): |
56 """ |
58 """ |
57 Public slot to save the user agent entries to disk. |
59 Public slot to save the user agent entries to disk. |
58 """ |
60 """ |
59 if not self.__loaded: |
61 if not self.__loaded: |
60 return |
62 return |
61 |
63 |
62 from .UserAgentWriter import UserAgentWriter |
64 from .UserAgentWriter import UserAgentWriter |
|
65 |
63 agentFile = self.getFileName() |
66 agentFile = self.getFileName() |
64 writer = UserAgentWriter() |
67 writer = UserAgentWriter() |
65 if not writer.write(agentFile, self.__agents): |
68 if not writer.write(agentFile, self.__agents): |
66 EricMessageBox.critical( |
69 EricMessageBox.critical( |
67 None, |
70 None, |
68 self.tr("Saving user agent data"), |
71 self.tr("Saving user agent data"), |
69 self.tr( |
72 self.tr( |
70 """<p>User agent data could not be saved to""" |
73 """<p>User agent data could not be saved to""" """ <b>{0}</b></p>""" |
71 """ <b>{0}</b></p>""").format(agentFile)) |
74 ).format(agentFile), |
|
75 ) |
72 else: |
76 else: |
73 self.userAgentSettingsSaved.emit() |
77 self.userAgentSettingsSaved.emit() |
74 |
78 |
75 def __load(self): |
79 def __load(self): |
76 """ |
80 """ |
77 Private method to load the saved user agent settings. |
81 Private method to load the saved user agent settings. |
78 """ |
82 """ |
79 agentFile = self.getFileName() |
83 agentFile = self.getFileName() |
80 from .UserAgentReader import UserAgentReader |
84 from .UserAgentReader import UserAgentReader |
|
85 |
81 reader = UserAgentReader() |
86 reader = UserAgentReader() |
82 self.__agents = reader.read(agentFile) |
87 self.__agents = reader.read(agentFile) |
83 if reader.error() != QXmlStreamReader.Error.NoError: |
88 if reader.error() != QXmlStreamReader.Error.NoError: |
84 EricMessageBox.warning( |
89 EricMessageBox.warning( |
85 None, |
90 None, |
86 self.tr("Loading user agent data"), |
91 self.tr("Loading user agent data"), |
87 self.tr("""Error when loading user agent data on""" |
92 self.tr( |
88 """ line {0}, column {1}:\n{2}""") |
93 """Error when loading user agent data on""" |
89 .format(reader.lineNumber(), |
94 """ line {0}, column {1}:\n{2}""" |
90 reader.columnNumber(), |
95 ).format( |
91 reader.errorString())) |
96 reader.lineNumber(), reader.columnNumber(), reader.errorString() |
92 |
97 ), |
|
98 ) |
|
99 |
93 self.__loaded = True |
100 self.__loaded = True |
94 |
101 |
95 def reload(self): |
102 def reload(self): |
96 """ |
103 """ |
97 Public method to reload the user agent settings. |
104 Public method to reload the user agent settings. |
98 """ |
105 """ |
99 if not self.__loaded: |
106 if not self.__loaded: |
100 return |
107 return |
101 |
108 |
102 self.__agents = {} |
109 self.__agents = {} |
103 self.__load() |
110 self.__load() |
104 |
111 |
105 def close(self): |
112 def close(self): |
106 """ |
113 """ |
107 Public method to close the user agents manager. |
114 Public method to close the user agents manager. |
108 """ |
115 """ |
109 self.__saveTimer.saveIfNeccessary() |
116 self.__saveTimer.saveIfNeccessary() |
110 |
117 |
111 def removeUserAgent(self, host): |
118 def removeUserAgent(self, host): |
112 """ |
119 """ |
113 Public method to remove a user agent entry. |
120 Public method to remove a user agent entry. |
114 |
121 |
115 @param host host name (string) |
122 @param host host name (string) |
116 """ |
123 """ |
117 if host in self.__agents: |
124 if host in self.__agents: |
118 del self.__agents[host] |
125 del self.__agents[host] |
119 self.changed.emit() |
126 self.changed.emit() |
120 |
127 |
121 def allHostNames(self): |
128 def allHostNames(self): |
122 """ |
129 """ |
123 Public method to get a list of all host names we a user agent setting |
130 Public method to get a list of all host names we a user agent setting |
124 for. |
131 for. |
125 |
132 |
126 @return sorted list of all host names (list of strings) |
133 @return sorted list of all host names (list of strings) |
127 """ |
134 """ |
128 if not self.__loaded: |
135 if not self.__loaded: |
129 self.__load() |
136 self.__load() |
130 |
137 |
131 return sorted(self.__agents.keys()) |
138 return sorted(self.__agents.keys()) |
132 |
139 |
133 def hostsCount(self): |
140 def hostsCount(self): |
134 """ |
141 """ |
135 Public method to get the number of available user agent settings. |
142 Public method to get the number of available user agent settings. |
136 |
143 |
137 @return number of user agent settings (integer) |
144 @return number of user agent settings (integer) |
138 """ |
145 """ |
139 if not self.__loaded: |
146 if not self.__loaded: |
140 self.__load() |
147 self.__load() |
141 |
148 |
142 return len(self.__agents) |
149 return len(self.__agents) |
143 |
150 |
144 def userAgent(self, host): |
151 def userAgent(self, host): |
145 """ |
152 """ |
146 Public method to get the user agent setting for a host. |
153 Public method to get the user agent setting for a host. |
147 |
154 |
148 @param host host name (string) |
155 @param host host name (string) |
149 @return user agent string (string) |
156 @return user agent string (string) |
150 """ |
157 """ |
151 if not self.__loaded: |
158 if not self.__loaded: |
152 self.__load() |
159 self.__load() |
153 |
160 |
154 for agentHost in self.__agents: |
161 for agentHost in self.__agents: |
155 if host.endswith(agentHost): |
162 if host.endswith(agentHost): |
156 return self.__agents[agentHost] |
163 return self.__agents[agentHost] |
157 |
164 |
158 return "" |
165 return "" |
159 |
166 |
160 def setUserAgent(self, host, agent): |
167 def setUserAgent(self, host, agent): |
161 """ |
168 """ |
162 Public method to set the user agent string for a host. |
169 Public method to set the user agent string for a host. |
163 |
170 |
164 @param host host name (string) |
171 @param host host name (string) |
165 @param agent user agent string (string) |
172 @param agent user agent string (string) |
166 """ |
173 """ |
167 if host != "" and agent != "": |
174 if host != "" and agent != "": |
168 self.__agents[host] = agent |
175 self.__agents[host] = agent |
169 self.changed.emit() |
176 self.changed.emit() |
170 |
177 |
171 def userAgentForUrl(self, url): |
178 def userAgentForUrl(self, url): |
172 """ |
179 """ |
173 Public method to determine the user agent for the given URL. |
180 Public method to determine the user agent for the given URL. |
174 |
181 |
175 @param url URL to determine user agent for (QUrl) |
182 @param url URL to determine user agent for (QUrl) |
176 @return user agent string (string) |
183 @return user agent string (string) |
177 """ |
184 """ |
178 if url.isValid(): |
185 if url.isValid(): |
179 host = url.host() |
186 host = url.host() |
180 return self.userAgent(host) |
187 return self.userAgent(host) |
181 |
188 |
182 return "" |
189 return "" |
183 |
190 |
184 def setUserAgentForUrl(self, url, agent): |
191 def setUserAgentForUrl(self, url, agent): |
185 """ |
192 """ |
186 Public method to set the user agent string for an URL. |
193 Public method to set the user agent string for an URL. |
187 |
194 |
188 @param url URL to register user agent setting for (QUrl) |
195 @param url URL to register user agent setting for (QUrl) |
189 @param agent new current user agent string (string) |
196 @param agent new current user agent string (string) |
190 """ |
197 """ |
191 if url.isValid(): |
198 if url.isValid(): |
192 host = url.host() |
199 host = url.host() |