src/eric7/EricXML/TasksReader.py

branch
eric7
changeset 9221
bf71ee032bb4
parent 9209
b99e7fd55fd3
child 9278
36448ca469c2
equal deleted inserted replaced
9220:e9e7eca7efee 9221:bf71ee032bb4
22 22
23 class TasksReader(XMLStreamReaderBase): 23 class TasksReader(XMLStreamReaderBase):
24 """ 24 """
25 Class for reading an XML tasks file. 25 Class for reading an XML tasks file.
26 """ 26 """
27
27 supportedVersions = ["4.2", "5.0", "5.1", "6.0"] 28 supportedVersions = ["4.2", "5.0", "5.1", "6.0"]
28 29
29 def __init__(self, device, forProject=False, viewer=None): 30 def __init__(self, device, forProject=False, viewer=None):
30 """ 31 """
31 Constructor 32 Constructor
32 33
33 @param device reference to the I/O device to read from (QIODevice) 34 @param device reference to the I/O device to read from (QIODevice)
34 @param forProject flag indicating project related mode (boolean) 35 @param forProject flag indicating project related mode (boolean)
35 @param viewer reference to the task viewer (TaskViewer) 36 @param viewer reference to the task viewer (TaskViewer)
36 """ 37 """
37 XMLStreamReaderBase.__init__(self, device) 38 XMLStreamReaderBase.__init__(self, device)
38 39
39 self.viewer = viewer 40 self.viewer = viewer
40 41
41 self.forProject = forProject 42 self.forProject = forProject
42 if viewer: 43 if viewer:
43 self.viewer = viewer 44 self.viewer = viewer
44 else: 45 else:
45 self.viewer = ericApp().getObject("TaskViewer") 46 self.viewer = ericApp().getObject("TaskViewer")
46 47
47 self.version = "" 48 self.version = ""
48 self.tasks = [] 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()
56 if self.isEndElement() and self.name() == "Tasks": 57 if self.isEndElement() and self.name() == "Tasks":
57 for task, expanded in self.tasks: 58 for task, expanded in self.tasks:
58 task.setExpanded(expanded) 59 task.setExpanded(expanded)
59 break 60 break
60 61
61 if self.isStartElement(): 62 if self.isStartElement():
62 if self.name() == "Tasks": 63 if self.name() == "Tasks":
63 self.version = self.attribute( 64 self.version = self.attribute("version", tasksFileFormatVersion)
64 "version", tasksFileFormatVersion)
65 if self.version not in self.supportedVersions: 65 if self.version not in self.supportedVersions:
66 self.raiseUnsupportedFormatVersion(self.version) 66 self.raiseUnsupportedFormatVersion(self.version)
67 elif self.name() == "Task": 67 elif self.name() == "Task":
68 self.__readTask() 68 self.__readTask()
69 elif self.name() == "ProjectScanFilter": 69 elif self.name() == "ProjectScanFilter":
70 scanFilter = self.readElementText() 70 scanFilter = self.readElementText()
71 if self.forProject: 71 if self.forProject:
72 self.viewer.setTasksScanFilter(scanFilter) 72 self.viewer.setTasksScanFilter(scanFilter)
73 else: 73 else:
74 self.raiseUnexpectedStartTag(self.name()) 74 self.raiseUnexpectedStartTag(self.name())
75 75
76 self.showErrorMessage() 76 self.showErrorMessage()
77 77
78 def __readTask(self): 78 def __readTask(self):
79 """ 79 """
80 Private method to read the task info. 80 Private method to read the task info.
81 """ 81 """
82 task = {"summary": "", 82 task = {
83 "priority": TaskPriority.NORMAL, 83 "summary": "",
84 "completed": False, 84 "priority": TaskPriority.NORMAL,
85 "created": 0, 85 "completed": False,
86 "filename": "", 86 "created": 0,
87 "linenumber": 0, 87 "filename": "",
88 "type": TaskType.TODO, 88 "linenumber": 0,
89 "description": "", 89 "type": TaskType.TODO,
90 "uid": "", 90 "description": "",
91 } 91 "uid": "",
92 }
92 task["priority"] = TaskPriority( 93 task["priority"] = TaskPriority(
93 int(self.attribute("priority", str(TaskPriority.NORMAL.value))) 94 int(self.attribute("priority", str(TaskPriority.NORMAL.value)))
94 ) 95 )
95 task["completed"] = self.toBool(self.attribute("completed", "False")) 96 task["completed"] = self.toBool(self.attribute("completed", "False"))
96 if self.version in ["4.2", "5.0"]: 97 if self.version in ["4.2", "5.0"]:
105 if uid: 106 if uid:
106 task["uid"] = uid 107 task["uid"] = uid
107 else: 108 else:
108 # upgrade from pre 6.0 format 109 # upgrade from pre 6.0 format
109 from PyQt6.QtCore import QUuid 110 from PyQt6.QtCore import QUuid
111
110 task["uid"] = QUuid.createUuid().toString() 112 task["uid"] = QUuid.createUuid().toString()
111 parentUid = self.attribute("parent_uid", "") 113 parentUid = self.attribute("parent_uid", "")
112 expanded = self.toBool(self.attribute("expanded", "True")) 114 expanded = self.toBool(self.attribute("expanded", "True"))
113 115
114 while not self.atEnd(): 116 while not self.atEnd():
115 self.readNext() 117 self.readNext()
116 if self.isEndElement() and self.name() == "Task": 118 if self.isEndElement() and self.name() == "Task":
117 parentTask = self.viewer.findParentTask(parentUid) 119 parentTask = self.viewer.findParentTask(parentUid)
118 addedTask = self.viewer.addTask( 120 addedTask = self.viewer.addTask(
119 task["summary"], priority=task["priority"], 121 task["summary"],
120 filename=task["filename"], lineno=task["linenumber"], 122 priority=task["priority"],
121 completed=task["completed"], _time=task["created"], 123 filename=task["filename"],
122 isProjectTask=self.forProject, taskType=task["type"], 124 lineno=task["linenumber"],
123 description=task["description"], uid=task["uid"], 125 completed=task["completed"],
124 parentTask=parentTask) 126 _time=task["created"],
127 isProjectTask=self.forProject,
128 taskType=task["type"],
129 description=task["description"],
130 uid=task["uid"],
131 parentTask=parentTask,
132 )
125 if addedTask: 133 if addedTask:
126 self.tasks.append((addedTask, expanded)) 134 self.tasks.append((addedTask, expanded))
127 break 135 break
128 136
129 if self.isStartElement(): 137 if self.isStartElement():
130 if self.name() == "Summary": 138 if self.name() == "Summary":
131 task["summary"] = self.readElementText() 139 task["summary"] = self.readElementText()
132 elif self.name() == "Description": 140 elif self.name() == "Description":
133 task["description"] = self.readElementText() 141 task["description"] = self.readElementText()
134 elif self.name() == "Created": 142 elif self.name() == "Created":
135 task["created"] = time.mktime(time.strptime( 143 task["created"] = time.mktime(
136 self.readElementText(), "%Y-%m-%d, %H:%M:%S")) 144 time.strptime(self.readElementText(), "%Y-%m-%d, %H:%M:%S")
145 )
137 elif self.name() == "Resource": 146 elif self.name() == "Resource":
138 continue # handle but ignore this tag 147 continue # handle but ignore this tag
139 elif self.name() == "Filename": 148 elif self.name() == "Filename":
140 task["filename"] = Utilities.toNativeSeparators( 149 task["filename"] = Utilities.toNativeSeparators(
141 self.readElementText() 150 self.readElementText()
142 ) 151 )
143 elif self.name() == "Linenumber": 152 elif self.name() == "Linenumber":

eric ide

mercurial