WebBrowser/UserAgent/UserAgentManager.py

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

eric ide

mercurial