E5XML/TasksReader.py

changeset 3990
5dd6edf8540a
parent 3178
f25fc1364c88
child 4021
195a471c327b
equal deleted inserted replaced
3987:57354896fd29 3990:5dd6edf8540a
23 23
24 class TasksReader(XMLStreamReaderBase): 24 class TasksReader(XMLStreamReaderBase):
25 """ 25 """
26 Class for reading an XML tasks file. 26 Class for reading an XML tasks file.
27 """ 27 """
28 supportedVersions = ["4.2", "5.0", "5.1"] 28 supportedVersions = ["4.2", "5.0", "5.1", "6.0"]
29 29
30 def __init__(self, device, forProject=False, viewer=None): 30 def __init__(self, device, forProject=False, viewer=None):
31 """ 31 """
32 Constructor 32 Constructor
33 33
44 self.viewer = viewer 44 self.viewer = viewer
45 else: 45 else:
46 self.viewer = e5App().getObject("TaskViewer") 46 self.viewer = e5App().getObject("TaskViewer")
47 47
48 self.version = "" 48 self.version = ""
49 self.tasks = []
49 50
50 def readXML(self): 51 def readXML(self):
51 """ 52 """
52 Public method to read and parse the XML document. 53 Public method to read and parse the XML document.
53 """ 54 """
54 while not self.atEnd(): 55 while not self.atEnd():
55 self.readNext() 56 self.readNext()
57 if self.isEndElement() and self.name() == "Tasks":
58 for task, expanded in self.tasks:
59 task.setExpanded(expanded)
60 break
61
56 if self.isStartElement(): 62 if self.isStartElement():
57 if self.name() == "Tasks": 63 if self.name() == "Tasks":
58 self.version = self.attribute( 64 self.version = self.attribute(
59 "version", tasksFileFormatVersion) 65 "version", tasksFileFormatVersion)
60 if self.version not in self.supportedVersions: 66 if self.version not in self.supportedVersions:
80 "created": 0, 86 "created": 0,
81 "filename": "", 87 "filename": "",
82 "linenumber": 0, 88 "linenumber": 0,
83 "type": Task.TypeTodo, 89 "type": Task.TypeTodo,
84 "description": "", 90 "description": "",
91 "uid": "",
85 } 92 }
86 task["priority"] = int(self.attribute("priority", "1")) 93 task["priority"] = int(self.attribute("priority", "1"))
87 task["completed"] = self.toBool(self.attribute("completed", "False")) 94 task["completed"] = self.toBool(self.attribute("completed", "False"))
88 if self.version in ["4.2", "5.0"]: 95 if self.version in ["4.2", "5.0"]:
89 isBugfix = self.toBool(self.attribute("bugfix", "False")) 96 isBugfix = self.toBool(self.attribute("bugfix", "False"))
90 if isBugfix: 97 if isBugfix:
91 task["type"] = Task.TypeFixme 98 task["type"] = Task.TypeFixme
92 else: 99 else:
93 task["type"] = int(self.attribute("type", str(Task.TypeTodo))) 100 task["type"] = int(self.attribute("type", str(Task.TypeTodo)))
101 uid = self.attribute("uid", "")
102 if uid:
103 task["uid"] = uid
104 else:
105 # upgrade from pre 6.0 format
106 from PyQt5.QtCore import QUuid
107 task["uid"] = QUuid.createUuid().toString()
108 parentUid = self.attribute("parent_uid", "")
109 expanded = self.toBool(self.attribute("expanded", "True"))
94 110
95 while not self.atEnd(): 111 while not self.atEnd():
96 self.readNext() 112 self.readNext()
97 if self.isEndElement() and self.name() == "Task": 113 if self.isEndElement() and self.name() == "Task":
98 self.viewer.addTask( 114 parentTask = self.viewer.findParentTask(parentUid)
115 addedTask = self.viewer.addTask(
99 task["summary"], priority=task["priority"], 116 task["summary"], priority=task["priority"],
100 filename=task["filename"], lineno=task["linenumber"], 117 filename=task["filename"], lineno=task["linenumber"],
101 completed=task["completed"], _time=task["created"], 118 completed=task["completed"], _time=task["created"],
102 isProjectTask=self.forProject, taskType=task["type"], 119 isProjectTask=self.forProject, taskType=task["type"],
103 description=task["description"]) 120 description=task["description"], uid=task["uid"],
121 parentTask=parentTask)
122 self.tasks.append((addedTask, expanded))
104 break 123 break
105 124
106 if self.isStartElement(): 125 if self.isStartElement():
107 if self.name() == "Summary": 126 if self.name() == "Summary":
108 task["summary"] = self.readElementText() 127 task["summary"] = self.readElementText()

eric ide

mercurial