Helpviewer/UserAgent/UserAgentManager.py

changeset 1687
5efcb0cea376
parent 1680
28e57079dab5
child 2302
f29e9405c851
diff -r bd756cb42d5b -r 5efcb0cea376 Helpviewer/UserAgent/UserAgentManager.py
--- a/Helpviewer/UserAgent/UserAgentManager.py	Sat Mar 03 18:37:19 2012 +0100
+++ b/Helpviewer/UserAgent/UserAgentManager.py	Sat Mar 03 18:40:25 2012 +0100
@@ -9,10 +9,13 @@
 
 import os
 
-from PyQt4.QtCore import pyqtSignal, QObject
+from PyQt4.QtCore import pyqtSignal, QObject, QXmlStreamReader
 
 from E5Gui import E5MessageBox
 
+from .UserAgentWriter import UserAgentWriter
+from .UserAgentReader import UserAgentReader
+
 from Utilities.AutoSaver import AutoSaver
 import Utilities
 
@@ -47,7 +50,7 @@
         
         @return name of the user agents file (string)
         """
-        return os.path.join(Utilities.getConfigDir(), "browser", "userAgentSettings")
+        return os.path.join(Utilities.getConfigDir(), "browser", "userAgentSettings.xml")
     
     def save(self):
         """
@@ -57,24 +60,45 @@
             return
         
         agentFile = self.getFileName()
-        try:
-            f = open(agentFile, "w", encoding="utf-8")
-            for host, agent in self.__agents.items():
-                f.write("{0}@@{1}\n".format(host, agent))
-            f.close()
-            self.userAgentSettingsSaved.emit()
-        except IOError as err:
+        writer = UserAgentWriter()
+        if not writer.write(agentFile, self.__agents):
             E5MessageBox.critical(None,
                 self.trUtf8("Saving user agent data"),
                 self.trUtf8("""<p>User agent data could not be saved to <b>{0}</b></p>"""
-                            """<p>Reason: {1}</p>""").format(agentFile, str(err)))
-            return
+                            ).format(agentFile))
+        else:
+            self.userAgentSettingsSaved.emit()
     
     def __load(self):
         """
         Private method to load the saved user agent settings.
         """
         agentFile = self.getFileName()
+        if not os.path.exists(agentFile):
+            self.__loadNonXml(os.path.splitext(agentFile)[0])
+        else:
+            reader = UserAgentReader()
+            self.__agents = reader.read(agentFile)
+            if reader.error() != QXmlStreamReader.NoError:
+                E5MessageBox.warning(None,
+                    self.trUtf8("Loading user agent data"),
+                    self.trUtf8("""Error when loading user agent data on"""
+                                """ line {0}, column {1}:\n{2}""")\
+                        .format(reader.lineNumber(),
+                                reader.columnNumber(),
+                                reader.errorString()))
+        
+        self.__loaded = True
+    
+    def __loadNonXml(self, agentFile):
+        """
+        Private method to load non-XML user agent files.
+        
+        This method is to convert from the old, non-XML format to the new
+        XML based format.
+        
+        @param agentFile name of the non-XML user agent file (string)
+        """
         if os.path.exists(agentFile):
             try:
                 f = open(agentFile, "r", encoding="utf-8")
@@ -97,8 +121,13 @@
                 
                 host, agent = line.split("@@", 1)
                 self.__agents[host] = agent
+            
+            os.remove(agentFile)
         
         self.__loaded = True
+        
+        # this does the conversion
+        self.save()
     
     def reload(self):
         """

eric ide

mercurial