E5XML/TasksReader.py

changeset 585
f40889943c0a
child 587
3078a9781573
diff -r b5d4c116952a -r f40889943c0a E5XML/TasksReader.py
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/E5XML/TasksReader.py	Sat Sep 11 17:33:02 2010 +0200
@@ -0,0 +1,112 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2010 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing a class for reading an XML tasks file.
+"""
+
+import time
+
+from E5Gui.E5Application import e5App
+
+from .Config import tasksFileFormatVersion
+from .XMLStreamReaderBase import XMLStreamReaderBase
+
+import Utilities
+
+class TasksReader(XMLStreamReaderBase):
+    """
+    Class for reading an XML tasks file.
+    """
+    def __init__(self, device, forProject = False, viewer = None):
+        """
+        Constructor
+        
+        @param device reference to the I/O device to read from (QIODevice)
+        @param forProject flag indicating project related mode (boolean)
+        @param viewer reference to the task viewer (TaskViewer)
+        """
+        XMLStreamReaderBase.__init__(self, device)
+        
+        self.viewer = viewer
+        
+        self.forProject = forProject
+        if viewer:
+            self.viewer = viewer
+        else:
+            self.viewer = e5App().getObject("TaskViewer")
+        
+        self.version = ""
+    
+    def readXML(self):
+        """
+        Public method to read and parse the XML document.
+        """
+        while not self.atEnd():
+            self.readNext()
+            if self.isStartElement():
+                if self.name() == "Tasks":
+                    self.version = self.attribute("version", 
+                        tasksFileFormatVersion)
+                elif self.name() == "Task":
+                    self.__readTask()
+        
+        self.showErrorMessage()
+    
+    def __readTask(self):
+        """
+        Private method to read the task info.
+        """
+        task = {"summary"     : "",
+                "priority"    : 1,
+                "completed"   : False,
+                "created"     : 0,
+                "filename"    : "",
+                "linenumber"  : 0,
+                "bugfix"      : False,
+                "description" : "",
+               }
+        task["priority"] = int(self.attribute("priority", "1"))
+        
+        val = self.attribute("completed", "False")
+        if val in ["True", "False"]:
+            val = (val == "True")
+        else:
+            val = bool(int(val))
+        task["completed"] = val
+        
+        val = self.attribute("bugfix", "False")
+        if val in ["True", "False"]:
+            val = (val == "True")
+        else:
+            val = bool(int(val))
+        task["bugfix"] = val
+        
+        while not self.atEnd():
+            self.readNext()
+            if self.isEndElement() and self.name() == "Task":
+                self.viewer.addTask(task["summary"], priority = task["priority"],
+                    filename = task["filename"], lineno = task["linenumber"], 
+                    completed = task["completed"], _time = task["created"], 
+                    isProjectTask = self.forProject, isBugfixTask = task["bugfix"], 
+                    longtext = task["description"])
+                break
+            
+            if self.isStartElement():
+                if self.name() == "Summary":
+                    task["summary"] = self.readElementText()
+                elif self.name() == "Description":
+                    task["description"] = self.readElementText()
+                elif self.name() == "Created":
+                    task["created"] = time.mktime(
+                        time.strptime(self.readElementText(), "%Y-%m-%d, %H:%M:%S"))
+                elif self.name() == "Filename":
+                    task["filename"] = \
+                        Utilities.toNativeSeparators(self.readElementText())
+                elif self.name() == "Linenumber":
+                    try:
+                        task["linenumber"] = int(self.readElementText())
+                    except ValueError:
+                        pass

eric ide

mercurial