41 from E5XML.XMLErrorHandler import XMLErrorHandler, XMLFatalParseError |
41 from E5XML.XMLErrorHandler import XMLErrorHandler, XMLFatalParseError |
42 from E5XML.XMLEntityResolver import XMLEntityResolver |
42 from E5XML.XMLEntityResolver import XMLEntityResolver |
43 |
43 |
44 from E5XML.ProjectHandler import ProjectHandler |
44 from E5XML.ProjectHandler import ProjectHandler |
45 from E5XML.ProjectWriter import ProjectWriter |
45 from E5XML.ProjectWriter import ProjectWriter |
46 from E5XML.UserProjectHandler import UserProjectHandler |
46 from E5XML.UserProjectReader import UserProjectReader |
47 from E5XML.UserProjectWriter import UserProjectWriter |
47 from E5XML.UserProjectWriter import UserProjectWriter |
48 from E5XML.SessionReader import SessionReader |
48 from E5XML.SessionReader import SessionReader |
49 from E5XML.SessionWriter import SessionWriter |
49 from E5XML.SessionWriter import SessionWriter |
50 from E5XML.TasksReader import TasksReader |
50 from E5XML.TasksReader import TasksReader |
51 from E5XML.TasksWriter import TasksWriter |
51 from E5XML.TasksWriter import TasksWriter |
821 """ |
821 """ |
822 if self.pfile is None: |
822 if self.pfile is None: |
823 return |
823 return |
824 |
824 |
825 fn, ext = os.path.splitext(os.path.basename(self.pfile)) |
825 fn, ext = os.path.splitext(os.path.basename(self.pfile)) |
826 |
|
827 fn = os.path.join(self.getProjectManagementDir(), '{0}.e4q'.format(fn)) |
826 fn = os.path.join(self.getProjectManagementDir(), '{0}.e4q'.format(fn)) |
828 if os.path.exists(fn): |
827 if os.path.exists(fn): |
829 try: |
828 f = QFile(fn) |
830 f = open(fn, "r", encoding = "utf-8") |
829 if f.open(QIODevice.ReadOnly): |
831 |
830 reader = UserProjectReader(f, self) |
832 parser = make_parser(True) |
831 reader.readXML() |
833 handler = UserProjectHandler(self) |
832 f.close() |
834 er = XMLEntityResolver() |
833 else: |
835 eh = XMLErrorHandler() |
|
836 |
|
837 parser.setContentHandler(handler) |
|
838 parser.setEntityResolver(er) |
|
839 parser.setErrorHandler(eh) |
|
840 |
|
841 try: |
|
842 try: |
|
843 parser.parse(f) |
|
844 except UnicodeEncodeError: |
|
845 f.seek(0) |
|
846 buf = io.StringIO(f.read()) |
|
847 parser.parse(buf) |
|
848 finally: |
|
849 f.close() |
|
850 except IOError: |
|
851 E5MessageBox.critical(self.ui, |
834 E5MessageBox.critical(self.ui, |
852 self.trUtf8("Read user project properties"), |
835 self.trUtf8("Read user project properties"), |
853 self.trUtf8("<p>The user specific project properties file <b>{0}</b>" |
836 self.trUtf8("<p>The user specific project properties file <b>{0}</b>" |
854 " could not be read.</p>").format(fn)) |
837 " could not be read.</p>").format(fn)) |
855 return |
|
856 except XMLFatalParseError: |
|
857 pass |
|
858 |
|
859 eh.showParseMessages() |
|
860 |
838 |
861 def __writeUserProperties(self): |
839 def __writeUserProperties(self): |
862 """ |
840 """ |
863 Private method to write the project data to an XML file. |
841 Private method to write the project data to an XML file. |
864 """ |
842 """ |
865 if self.pfile is None: |
843 if self.pfile is None: |
866 return |
844 return |
867 |
845 |
868 fn, ext = os.path.splitext(os.path.basename(self.pfile)) |
846 fn, ext = os.path.splitext(os.path.basename(self.pfile)) |
869 |
|
870 fn = os.path.join(self.getProjectManagementDir(), '{0}.e4q'.format(fn)) |
847 fn = os.path.join(self.getProjectManagementDir(), '{0}.e4q'.format(fn)) |
871 |
848 |
872 try: |
849 f = QFile(fn) |
873 f = open(fn, "w", encoding = "utf-8") |
850 if f.open(QIODevice.WriteOnly): |
874 |
|
875 UserProjectWriter(f, os.path.splitext(os.path.basename(fn))[0]).writeXML() |
851 UserProjectWriter(f, os.path.splitext(os.path.basename(fn))[0]).writeXML() |
876 |
|
877 f.close() |
852 f.close() |
878 except IOError: |
853 else: |
879 E5MessageBox.critical(self.ui, |
854 E5MessageBox.critical(self.ui, |
880 self.trUtf8("Save user project properties"), |
855 self.trUtf8("Save user project properties"), |
881 self.trUtf8("<p>The user specific project properties file <b>{0}</b>" |
856 self.trUtf8("<p>The user specific project properties file <b>{0}</b>" |
882 " could not be written.</p>").format(fn)) |
857 " could not be written.</p>").format(fn)) |
883 |
858 |