From 12d1292442cf77355ff6bcb08a5bbe74ec171439 Mon Sep 17 00:00:00 2001 From: Tim Su Date: Wed, 22 Feb 2012 17:52:51 -0800 Subject: [PATCH] Actively prevent duplicate tasks from showing up in subtasks --- .../com/todoroo/astrid/subtasks/SubtasksUpdater.java | 8 ++++++++ .../src/com/todoroo/astrid/service/MetadataService.java | 8 ++++++++ astrid/src/com/todoroo/astrid/service/TaskService.java | 4 ++-- 3 files changed, 18 insertions(+), 2 deletions(-) diff --git a/astrid/plugin-src/com/todoroo/astrid/subtasks/SubtasksUpdater.java b/astrid/plugin-src/com/todoroo/astrid/subtasks/SubtasksUpdater.java index c901b4c68..4adaeb2ff 100644 --- a/astrid/plugin-src/com/todoroo/astrid/subtasks/SubtasksUpdater.java +++ b/astrid/plugin-src/com/todoroo/astrid/subtasks/SubtasksUpdater.java @@ -1,5 +1,6 @@ package com.todoroo.astrid.subtasks; +import java.util.HashSet; import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicLong; @@ -109,6 +110,7 @@ public class SubtasksUpdater extends OrderedListUpdater { public void sanitizeTaskList(Filter filter, String list) { final AtomicInteger previousIndent = new AtomicInteger(-1); final AtomicLong previousOrder = new AtomicLong(-1); + final HashSet taskIds = new HashSet(); iterateThroughList(filter, list, new OrderedListIterator() { @Override @@ -116,6 +118,11 @@ public class SubtasksUpdater extends OrderedListUpdater { if(!metadata.isSaved()) return; + if(taskIds.contains(taskId)) { + metadataService.delete(metadata); + return; + } + long order = metadata.getValue(SubtasksMetadata.ORDER); if(order <= previousOrder.get()) // bad order = previousOrder.get() + 1; @@ -130,6 +137,7 @@ public class SubtasksUpdater extends OrderedListUpdater { previousIndent.set(indent); previousOrder.set(order); + taskIds.add(taskId); } }); } diff --git a/astrid/src/com/todoroo/astrid/service/MetadataService.java b/astrid/src/com/todoroo/astrid/service/MetadataService.java index c6c3252c8..5d07b563d 100644 --- a/astrid/src/com/todoroo/astrid/service/MetadataService.java +++ b/astrid/src/com/todoroo/astrid/service/MetadataService.java @@ -166,4 +166,12 @@ public class MetadataService { cursor.close(); } } + + /** + * Deletes the given metadata + * @param metadata + */ + public void delete(Metadata metadata) { + metadataDao.delete(metadata.getId()); + } } diff --git a/astrid/src/com/todoroo/astrid/service/TaskService.java b/astrid/src/com/todoroo/astrid/service/TaskService.java index d77eee3b5..2e52576c6 100644 --- a/astrid/src/com/todoroo/astrid/service/TaskService.java +++ b/astrid/src/com/todoroo/astrid/service/TaskService.java @@ -219,9 +219,9 @@ public class TaskService { if(queryTemplate == null) { if(whereConstraint == null) - return taskDao.query(Query.select(properties)); + return taskDao.query(Query.selectDistinct(properties)); else - return taskDao.query(Query.select(properties).where(whereConstraint)); + return taskDao.query(Query.selectDistinct(properties).where(whereConstraint)); } String sql;