src/eric7/WebBrowser/UserAgent/UserAgentManager.py

branch
eric7
changeset 9221
bf71ee032bb4
parent 9209
b99e7fd55fd3
child 9413
80c06d472826
equal deleted inserted replaced
9220:e9e7eca7efee 9221:bf71ee032bb4
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()

eric ide

mercurial