Fri, 10 Sep 2010 12:41:55 +0200
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