9 |
9 |
10 import time |
10 import time |
11 |
11 |
12 from E5Gui.E5Application import e5App |
12 from E5Gui.E5Application import e5App |
13 |
13 |
14 from .XMLWriterBase import XMLWriterBase |
14 from .XMLStreamWriterBase import XMLStreamWriterBase |
15 from .Config import tasksFileFormatVersion |
15 from .Config import tasksFileFormatVersion |
16 |
16 |
17 import Preferences |
17 import Preferences |
18 import Utilities |
18 import Utilities |
19 |
19 |
20 class TasksWriter(XMLWriterBase): |
20 class TasksWriter(XMLStreamWriterBase): |
21 """ |
21 """ |
22 Class implementing the writer class for writing an XML tasks file. |
22 Class implementing the writer class for writing an XML tasks file. |
23 """ |
23 """ |
24 def __init__(self, file, forProject = False, projectName=""): |
24 def __init__(self, device, forProject = False, projectName = ""): |
25 """ |
25 """ |
26 Constructor |
26 Constructor |
27 |
27 |
28 @param file open file (like) object for writing |
28 @param device reference to the I/O device to write to (QIODevice) |
29 @param forProject flag indicating project related mode (boolean) |
29 @param forProject flag indicating project related mode (boolean) |
30 @param projectName name of the project (string) |
30 @param projectName name of the project (string) |
31 """ |
31 """ |
32 XMLWriterBase.__init__(self, file) |
32 XMLStreamWriterBase.__init__(self, device) |
33 |
33 |
34 self.name = projectName |
34 self.name = projectName |
35 self.forProject = forProject |
35 self.forProject = forProject |
36 |
36 |
37 def writeXML(self): |
37 def writeXML(self): |
38 """ |
38 """ |
39 Public method to write the XML to the file. |
39 Public method to write the XML to the file. |
40 """ |
40 """ |
41 XMLWriterBase.writeXML(self) |
41 XMLStreamWriterBase.writeXML(self) |
42 |
42 |
43 self._write('<!DOCTYPE Tasks SYSTEM "Tasks-{0}.dtd">'.format( |
43 self.writeDTD('<!DOCTYPE Tasks SYSTEM "Tasks-{0}.dtd">'.format( |
44 tasksFileFormatVersion)) |
44 tasksFileFormatVersion)) |
45 |
45 |
46 # add some generation comments |
46 # add some generation comments |
47 if self.forProject: |
47 if self.forProject: |
48 self._write("<!-- eric5 tasks file for project {0} -->".format(self.name)) |
48 self.writeComment(" eric5 tasks file for project {0} ".format(self.name)) |
49 if Preferences.getProject("XMLTimestamp"): |
49 if Preferences.getProject("XMLTimestamp"): |
50 self._write("<!-- Saved: {0} -->".format( |
50 self.writeComment(" Saved: {0} ".format( |
51 time.strftime('%Y-%m-%d, %H:%M:%S'))) |
51 time.strftime('%Y-%m-%d, %H:%M:%S'))) |
52 else: |
52 else: |
53 self._write("<!-- eric5 tasks file -->") |
53 self.writeComment(" eric5 tasks file ") |
54 self._write("<!-- Saved: {0} -->".format(time.strftime('%Y-%m-%d, %H:%M:%S'))) |
54 self.writeComment(" Saved: {0} ".format(time.strftime('%Y-%m-%d, %H:%M:%S'))) |
55 |
55 |
56 # add the main tag |
56 # add the main tag |
57 self._write('<Tasks version="{0}">'.format(tasksFileFormatVersion)) |
57 self.writeStartElement("Tasks") |
|
58 self.writeAttribute("version", tasksFileFormatVersion) |
58 |
59 |
59 # do the tasks |
60 # do the tasks |
60 if self.forProject: |
61 if self.forProject: |
61 tasks = e5App().getObject("TaskViewer").getProjectTasks() |
62 tasks = e5App().getObject("TaskViewer").getProjectTasks() |
62 else: |
63 else: |
63 tasks = e5App().getObject("TaskViewer").getGlobalTasks() |
64 tasks = e5App().getObject("TaskViewer").getGlobalTasks() |
64 for task in tasks: |
65 for task in tasks: |
65 self._write(' <Task priority="{0:d}" completed="{1}" bugfix="{2}">'\ |
66 self.writeStartElement("Task") |
66 .format(task.priority, task.completed, task.isBugfixTask)) |
67 self.writeAttribute("priority", str(task.priority)) |
67 self._write(' <Summary>{0}</Summary>'.format( |
68 self.writeAttribute("completed", str(task.completed)) |
68 self.escape("{0}".format(task.description.strip())))) |
69 self.writeAttribute("bugfix", str(task.isBugfixTask)) |
69 self._write(' <Description>{0}</Description>'.format( |
70 self.writeTextElement("Summary", task.description.strip()) |
70 self.escape(self.encodedNewLines(task.longtext.strip())))) |
71 self.writeTextElement("Description", task.longtext.strip()) |
71 self._write(' <Created>{0}</Created>'.format( |
72 self.writeTextElement("Created", |
72 time.strftime("%Y-%m-%d, %H:%M:%S", time.localtime(task.created)))) |
73 time.strftime("%Y-%m-%d, %H:%M:%S", time.localtime(task.created))) |
73 if task.filename: |
74 if task.filename: |
74 self._write(' <Resource>') |
75 self.writeStartElement("Resource") |
75 self._write(' <Filename>{0}</Filename>'.format( |
76 self.writeTextElement("Filename", |
76 Utilities.fromNativeSeparators(task.filename))) |
77 Utilities.fromNativeSeparators(task.filename)) |
77 self._write(' <Linenumber>{0:d}</Linenumber>'.format(task.lineno)) |
78 self.writeTextElement("Linenumber", str(task.lineno)) |
78 self._write(' </Resource>') |
79 self.writeEndElement() |
79 self._write(' </Task>') |
80 self.writeEndElement() |
80 |
81 |
81 self._write('</Tasks>', newline = False) |
82 self.writeEndElement() |
|
83 self.writeEndDocument() |