--- a/eric6/Tasks/TaskViewer.py Sat Sep 04 11:35:19 2021 +0200 +++ b/eric6/Tasks/TaskViewer.py Sat Oct 30 10:41:14 2021 +0200 @@ -229,6 +229,26 @@ return parentTask + def containsTask(self, taskToTest): + """ + Public method to test, if a task is already in the tasks list. + + @param taskToTest task to look for + @type Task + @return flag indicating the existence of the task + @rtype bool + """ + if taskToTest is None: + # play it safe + return False + + return any( + (task.summary == taskToTest.summary) and + (task.filename == taskToTest.filename) and + (task.lineno == taskToTest.lineno) + for task in self.tasks + ) + def __refreshDisplay(self): """ Private method to refresh the display. @@ -369,24 +389,27 @@ task = Task(summary, priority, filename, lineno, completed, _time, isProjectTask, taskType, self.project, description, uid, parentUid) - self.tasks.append(task) - if parentTask: - parentTask.addChild(task) - parentTask.setExpanded(True) - elif filename: - self.__extractedItem.addChild(task) + if not self.containsTask(task): + self.tasks.append(task) + if parentTask: + parentTask.addChild(task) + parentTask.setExpanded(True) + elif filename: + self.__extractedItem.addChild(task) + else: + self.__manualItem.addChild(task) + task.setHidden(not self.taskFilter.showTask(task)) + + self.__checkTopLevelItems() + self.__resort() + self.__resizeColumns() + + if isProjectTask: + self.__projectTasksSaveTimer.changeOccurred() + + return task else: - self.__manualItem.addChild(task) - task.setHidden(not self.taskFilter.showTask(task)) - - self.__checkTopLevelItems() - self.__resort() - self.__resizeColumns() - - if isProjectTask: - self.__projectTasksSaveTimer.changeOccurred() - - return task + return None def addFileTask(self, summary, filename, lineno, taskType=TaskType.TODO, description=""):