--- a/eric6/Project/Project.py Wed Jan 27 15:11:03 2021 +0100 +++ b/eric6/Project/Project.py Wed Jan 27 18:27:52 2021 +0100 @@ -47,6 +47,8 @@ from Sessions.SessionFile import SessionFile +from Tasks.TasksFile import TasksFile + class Project(QObject): """ @@ -194,6 +196,7 @@ self.__userProjectFile = UserProjectFile(self) self.__debuggerPropertiesFile = DebuggerPropertiesFile(self) self.__sessionFile = SessionFile(False) + self.__tasksFile = TasksFile(False) self.recent = [] self.__loadRecent() @@ -1063,7 +1066,6 @@ If this flag is true, no errors are reported. @param indicator indicator string (string) """ - # TODO: write project session if self.pfile is None: if not quiet: E5MessageBox.critical( @@ -1107,7 +1109,7 @@ def __readTasks(self): """ - Private method to read in the project tasks file (.e6t). + Private method to read in the project tasks file (.etj or .e6t). """ if self.pfile is None: E5MessageBox.critical( @@ -1116,57 +1118,45 @@ self.tr("Please save the project first.")) return - # TODO: read project tasks base, ext = os.path.splitext(os.path.basename(self.pfile)) fn = os.path.join(self.getProjectManagementDir(), - '{0}.e6t'.format(base)) - if not os.path.exists(fn): - # try again with the old extension + '{0}.etj'.format(base)) + if os.path.exists(fn): + # try new style JSON file first + self.__tasksFile.readFile(fn) + else: + # try old style XML file second fn = os.path.join(self.getProjectManagementDir(), - '{0}.e4t'.format(base)) - if not os.path.exists(fn): - return - f = QFile(fn) - if f.open(QIODevice.ReadOnly): - from E5XML.TasksReader import TasksReader - reader = TasksReader(f, True) - reader.readXML() - f.close() - else: - E5MessageBox.critical( - self.ui, - self.tr("Read Tasks"), - self.tr( - "<p>The tasks file <b>{0}</b> could not be read.</p>") - .format(fn)) + '{0}.e6t'.format(base)) + if os.path.exists(fn): + f = QFile(fn) + if f.open(QIODevice.ReadOnly): + from E5XML.TasksReader import TasksReader + reader = TasksReader(f, True) + reader.readXML() + f.close() + else: + E5MessageBox.critical( + self.ui, + self.tr("Read Tasks"), + self.tr( + "<p>The tasks file <b>{0}</b> could not be read." + "</p>") + .format(fn)) def writeTasks(self): """ - Public method to write the tasks data to an XML file (.e6t). + Public method to write the tasks data to an JSON file (.etj). """ if self.pfile is None: return fn, ext = os.path.splitext(os.path.basename(self.pfile)) - # TODO: write project tasks - fn = os.path.join(self.getProjectManagementDir(), '{0}.e6t'.format(fn)) - f = QFile(fn) - ok = f.open(QIODevice.WriteOnly) - if not ok: - E5MessageBox.critical( - self.ui, - self.tr("Save Tasks"), - self.tr( - "<p>The tasks file <b>{0}</b> could not be written.</p>") - .format(fn)) - return - - from E5XML.TasksWriter import TasksWriter - TasksWriter( - f, True, os.path.splitext(os.path.basename(fn))[0]).writeXML() - f.close() - + fn = os.path.join(self.getProjectManagementDir(), + '{0}.etj'.format(fn)) + self.__tasksFile.writeFile(fn) + def __showContextMenuDebugger(self): """ Private slot called before the Debugger menu is shown.