eric6/Tasks/TaskViewer.py

changeset 8665
1600bcd3a378
parent 8280
17d03699f151
child 8731
c6264a513aa4
--- a/eric6/Tasks/TaskViewer.py	Sun Oct 03 13:04:53 2021 +0200
+++ b/eric6/Tasks/TaskViewer.py	Sun Oct 03 18:41:02 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=""):

eric ide

mercurial