Helpviewer/UserAgent/UserAgentManager.py

changeset 1687
5efcb0cea376
parent 1680
28e57079dab5
child 2302
f29e9405c851
equal deleted inserted replaced
1686:bd756cb42d5b 1687:5efcb0cea376
7 Module implementing a user agent manager. 7 Module implementing a user agent manager.
8 """ 8 """
9 9
10 import os 10 import os
11 11
12 from PyQt4.QtCore import pyqtSignal, QObject 12 from PyQt4.QtCore import pyqtSignal, QObject, QXmlStreamReader
13 13
14 from E5Gui import E5MessageBox 14 from E5Gui import E5MessageBox
15
16 from .UserAgentWriter import UserAgentWriter
17 from .UserAgentReader import UserAgentReader
15 18
16 from Utilities.AutoSaver import AutoSaver 19 from Utilities.AutoSaver import AutoSaver
17 import Utilities 20 import Utilities
18 21
19 22
45 """ 48 """
46 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.
47 50
48 @return name of the user agents file (string) 51 @return name of the user agents file (string)
49 """ 52 """
50 return os.path.join(Utilities.getConfigDir(), "browser", "userAgentSettings") 53 return os.path.join(Utilities.getConfigDir(), "browser", "userAgentSettings.xml")
51 54
52 def save(self): 55 def save(self):
53 """ 56 """
54 Public slot to save the user agent entries to disk. 57 Public slot to save the user agent entries to disk.
55 """ 58 """
56 if not self.__loaded: 59 if not self.__loaded:
57 return 60 return
58 61
59 agentFile = self.getFileName() 62 agentFile = self.getFileName()
60 try: 63 writer = UserAgentWriter()
61 f = open(agentFile, "w", encoding="utf-8") 64 if not writer.write(agentFile, self.__agents):
62 for host, agent in self.__agents.items():
63 f.write("{0}@@{1}\n".format(host, agent))
64 f.close()
65 self.userAgentSettingsSaved.emit()
66 except IOError as err:
67 E5MessageBox.critical(None, 65 E5MessageBox.critical(None,
68 self.trUtf8("Saving user agent data"), 66 self.trUtf8("Saving user agent data"),
69 self.trUtf8("""<p>User agent data could not be saved to <b>{0}</b></p>""" 67 self.trUtf8("""<p>User agent data could not be saved to <b>{0}</b></p>"""
70 """<p>Reason: {1}</p>""").format(agentFile, str(err))) 68 ).format(agentFile))
71 return 69 else:
70 self.userAgentSettingsSaved.emit()
72 71
73 def __load(self): 72 def __load(self):
74 """ 73 """
75 Private method to load the saved user agent settings. 74 Private method to load the saved user agent settings.
76 """ 75 """
77 agentFile = self.getFileName() 76 agentFile = self.getFileName()
77 if not os.path.exists(agentFile):
78 self.__loadNonXml(os.path.splitext(agentFile)[0])
79 else:
80 reader = UserAgentReader()
81 self.__agents = reader.read(agentFile)
82 if reader.error() != QXmlStreamReader.NoError:
83 E5MessageBox.warning(None,
84 self.trUtf8("Loading user agent data"),
85 self.trUtf8("""Error when loading user agent data on"""
86 """ line {0}, column {1}:\n{2}""")\
87 .format(reader.lineNumber(),
88 reader.columnNumber(),
89 reader.errorString()))
90
91 self.__loaded = True
92
93 def __loadNonXml(self, agentFile):
94 """
95 Private method to load non-XML user agent files.
96
97 This method is to convert from the old, non-XML format to the new
98 XML based format.
99
100 @param agentFile name of the non-XML user agent file (string)
101 """
78 if os.path.exists(agentFile): 102 if os.path.exists(agentFile):
79 try: 103 try:
80 f = open(agentFile, "r", encoding="utf-8") 104 f = open(agentFile, "r", encoding="utf-8")
81 lines = f.read() 105 lines = f.read()
82 f.close() 106 f.close()
95 "@@" not in line: 119 "@@" not in line:
96 continue 120 continue
97 121
98 host, agent = line.split("@@", 1) 122 host, agent = line.split("@@", 1)
99 self.__agents[host] = agent 123 self.__agents[host] = agent
124
125 os.remove(agentFile)
100 126
101 self.__loaded = True 127 self.__loaded = True
128
129 # this does the conversion
130 self.save()
102 131
103 def reload(self): 132 def reload(self):
104 """ 133 """
105 Public method to reload the user agent settings. 134 Public method to reload the user agent settings.
106 """ 135 """

eric ide

mercurial