Migrated the tasks writer.

Fri, 10 Sep 2010 12:41:55 +0200

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Fri, 10 Sep 2010 12:41:55 +0200
changeset 583
08bc660d6a15
parent 582
6b19bd357000
child 584
b5d4c116952a

Migrated the tasks writer.

DTDs/Tasks-4.1.dtd file | annotate | diff | comparison | revisions
DTDs/Tasks-4.2.dtd file | annotate | diff | comparison | revisions
E5XML/TasksWriter.py file | annotate | diff | comparison | revisions
Project/Project.py file | annotate | diff | comparison | revisions
UI/UserInterface.py file | annotate | diff | comparison | revisions
--- a/DTDs/Tasks-4.1.dtd	Fri Sep 10 12:41:22 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,29 +0,0 @@
-<!-- This is the DTD for eric4's tasks file version 4.1 -->
-
-<!ELEMENT   Summary             (#PCDATA)>
-
-<!ELEMENT   Description         (#PCDATA)>
-
-<!ELEMENT   Created             (#PCDATA)>
-
-<!ELEMENT   Dir                 (#PCDATA)>
-<!ELEMENT   Name                (#PCDATA)>
-
-<!ELEMENT   Filename            (Dir*, Name)>
-
-<!ELEMENT   Linenumber          (#PCDATA)>
-
-<!ELEMENT   Resource            (Filename, Linenumber)>
-
-<!ELEMENT   Task                (Summary,
-                                 Description,
-                                 Created,
-                                 Resource?)>
-<!ATTLIST   Task
-    priority    CDATA   #REQUIRED
-    completed   CDATA   #REQUIRED
-    bugfix      CDATA   #IMPLIED>
-
-<!ELEMENT   Tasks               (Task*)>
-<!ATTLIST   Tasks
-    version     CDATA   #REQUIRED>
--- a/DTDs/Tasks-4.2.dtd	Fri Sep 10 12:41:22 2010 +0200
+++ b/DTDs/Tasks-4.2.dtd	Fri Sep 10 12:41:55 2010 +0200
@@ -1,4 +1,4 @@
-<!-- This is the DTD for eric4's tasks file version 4.1 -->
+<!-- This is the DTD for eric5's tasks file version 4.2 -->
 
 <!ELEMENT   Summary             (#PCDATA)>
 
--- a/E5XML/TasksWriter.py	Fri Sep 10 12:41:22 2010 +0200
+++ b/E5XML/TasksWriter.py	Fri Sep 10 12:41:55 2010 +0200
@@ -11,25 +11,25 @@
 
 from E5Gui.E5Application import e5App
 
-from .XMLWriterBase import XMLWriterBase
+from .XMLStreamWriterBase import XMLStreamWriterBase
 from .Config import tasksFileFormatVersion
 
 import Preferences
 import Utilities
 
-class TasksWriter(XMLWriterBase):
+class TasksWriter(XMLStreamWriterBase):
     """
     Class implementing the writer class for writing an XML tasks file.
     """
-    def __init__(self, file, forProject = False, projectName=""):
+    def __init__(self, device, forProject = False, projectName = ""):
         """
         Constructor
         
-        @param file open file (like) object for writing
+        @param device reference to the I/O device to write to (QIODevice)
         @param forProject flag indicating project related mode (boolean)
         @param projectName name of the project (string)
         """
-        XMLWriterBase.__init__(self, file)
+        XMLStreamWriterBase.__init__(self, device)
         
         self.name = projectName
         self.forProject = forProject
@@ -38,23 +38,24 @@
         """
         Public method to write the XML to the file.
         """
-        XMLWriterBase.writeXML(self)
+        XMLStreamWriterBase.writeXML(self)
         
-        self._write('<!DOCTYPE Tasks SYSTEM "Tasks-{0}.dtd">'.format(
+        self.writeDTD('<!DOCTYPE Tasks SYSTEM "Tasks-{0}.dtd">'.format(
             tasksFileFormatVersion))
         
         # add some generation comments
         if self.forProject:
-            self._write("<!-- eric5 tasks file for project {0} -->".format(self.name))
+            self.writeComment(" eric5 tasks file for project {0} ".format(self.name))
             if Preferences.getProject("XMLTimestamp"):
-                self._write("<!-- Saved: {0} -->".format(
+                self.writeComment(" Saved: {0} ".format(
                     time.strftime('%Y-%m-%d, %H:%M:%S')))
         else:
-            self._write("<!-- eric5 tasks file -->")
-            self._write("<!-- Saved: {0} -->".format(time.strftime('%Y-%m-%d, %H:%M:%S')))
+            self.writeComment(" eric5 tasks file ")
+            self.writeComment(" Saved: {0} ".format(time.strftime('%Y-%m-%d, %H:%M:%S')))
         
         # add the main tag
-        self._write('<Tasks version="{0}">'.format(tasksFileFormatVersion))
+        self.writeStartElement("Tasks")
+        self.writeAttribute("version", tasksFileFormatVersion)
         
         # do the tasks
         if self.forProject:
@@ -62,20 +63,21 @@
         else:
             tasks = e5App().getObject("TaskViewer").getGlobalTasks()
         for task in tasks:
-            self._write('  <Task priority="{0:d}" completed="{1}" bugfix="{2}">'\
-                .format(task.priority, task.completed, task.isBugfixTask))
-            self._write('    <Summary>{0}</Summary>'.format(
-                self.escape("{0}".format(task.description.strip()))))
-            self._write('    <Description>{0}</Description>'.format(
-                self.escape(self.encodedNewLines(task.longtext.strip()))))
-            self._write('    <Created>{0}</Created>'.format(
-                time.strftime("%Y-%m-%d, %H:%M:%S", time.localtime(task.created))))
+            self.writeStartElement("Task")
+            self.writeAttribute("priority", str(task.priority))
+            self.writeAttribute("completed", str(task.completed))
+            self.writeAttribute("bugfix", str(task.isBugfixTask))
+            self.writeTextElement("Summary", task.description.strip())
+            self.writeTextElement("Description", task.longtext.strip())
+            self.writeTextElement("Created", 
+                time.strftime("%Y-%m-%d, %H:%M:%S", time.localtime(task.created)))
             if task.filename:
-                self._write('    <Resource>')
-                self._write('      <Filename>{0}</Filename>'.format(
-                    Utilities.fromNativeSeparators(task.filename)))
-                self._write('      <Linenumber>{0:d}</Linenumber>'.format(task.lineno))
-                self._write('    </Resource>')
-            self._write('  </Task>')
+                self.writeStartElement("Resource")
+                self.writeTextElement("Filename", 
+                    Utilities.fromNativeSeparators(task.filename))
+                self.writeTextElement("Linenumber", str(task.lineno))
+                self.writeEndElement()
+            self.writeEndElement()
         
-        self._write('</Tasks>', newline = False)
+        self.writeEndElement()
+        self.writeEndDocument()
--- a/Project/Project.py	Fri Sep 10 12:41:22 2010 +0200
+++ b/Project/Project.py	Fri Sep 10 12:41:55 2010 +0200
@@ -1218,35 +1218,18 @@
             
         fn, ext = os.path.splitext(os.path.basename(self.pfile))
         
-        try:
-            if ext.lower() == ".e4pz":
-                fn = os.path.join(self.getProjectManagementDir(), '{0}.e4tz'.format(fn))
-                try:
-                    import gzip
-                except ImportError:
-                    E5MessageBox.critical(self.ui,
-                        self.trUtf8("Save tasks"),
-                        self.trUtf8("""Compressed tasks files not supported."""
-                            """ The compression library is missing."""))
-                    return
-                f = io.StringIO()
-            else:
-                fn = os.path.join(self.getProjectManagementDir(), '{0}.e4t'.format(fn))
-                f = open(fn, "w", encoding = "utf-8")
-            
-            TasksWriter(f, True, os.path.splitext(os.path.basename(fn))[0]).writeXML()
-            
-            if fn.lower().endswith("e4tz"):
-                g = gzip.open(fn, "wb")
-                g.write(f.getvalue().encode("utf-8"))
-                g.close()
-            f.close()
-            
-        except IOError:
+        fn = os.path.join(self.getProjectManagementDir(), '{0}.e4t'.format(fn))
+        f = QFile(fn)
+        ok = f.open(QIODevice.WriteOnly)
+        if not ok:
             E5MessageBox.critical(self.ui,
                 self.trUtf8("Save tasks"),
                 self.trUtf8("<p>The tasks file <b>{0}</b> could not be written.</p>")
                     .format(fn))
+            return
+        
+        TasksWriter(f, True, os.path.splitext(os.path.basename(fn))[0]).writeXML()
+        f.close()
         
     def __readDebugProperties(self, quiet = False):
         """
--- a/UI/UserInterface.py	Fri Sep 10 12:41:22 2010 +0200
+++ b/UI/UserInterface.py	Fri Sep 10 12:41:55 2010 +0200
@@ -5029,19 +5029,18 @@
         """
         Private slot to write the tasks data to an XML file (.e4t).
         """
-        try:
-            fn = os.path.join(Utilities.getConfigDir(), "eric5tasks.e4t")
-            f = open(fn, "w", encoding = "utf-8")
-            
-            TasksWriter(f, False).writeXML()
-            
-            f.close()
-            
-        except IOError:
+        fn = os.path.join(Utilities.getConfigDir(), "eric5tasks.e4t")
+        f = QFile(fn)
+        ok = f.open(QIODevice.WriteOnly)
+        if not ok:
             E5MessageBox.critical(self,
                 self.trUtf8("Save tasks"),
                 self.trUtf8("<p>The tasks file <b>{0}</b> could not be written.</p>")
                     .format(fn))
+            return
+        
+        TasksWriter(f, False).writeXML()
+        f.close()
         
     def __readTasks(self):
         """
@@ -5685,4 +5684,4 @@
         if self.__startup:
             if Preferences.getGeometry("MainMaximized"):
                 self.setWindowState(Qt.WindowStates(Qt.WindowMaximized))
-            self.__startup = False
\ No newline at end of file
+            self.__startup = False

eric ide

mercurial