From 113e671550e060a5d82d354ad309670b40f934b0 Mon Sep 17 00:00:00 2001 From: Sam Bosley Date: Wed, 31 Oct 2012 17:01:42 -0700 Subject: [PATCH] Verify tree model by checking for missing tasks on initialization --- .../subtasks/NewOrderedListUpdater.java | 26 +++++++++++++++++++ .../astrid/subtasks/SubtasksUpdater.java | 1 + 2 files changed, 27 insertions(+) diff --git a/astrid/plugin-src/com/todoroo/astrid/subtasks/NewOrderedListUpdater.java b/astrid/plugin-src/com/todoroo/astrid/subtasks/NewOrderedListUpdater.java index 083aca54e..665c34352 100644 --- a/astrid/plugin-src/com/todoroo/astrid/subtasks/NewOrderedListUpdater.java +++ b/astrid/plugin-src/com/todoroo/astrid/subtasks/NewOrderedListUpdater.java @@ -61,6 +61,7 @@ public abstract class NewOrderedListUpdater { protected void initialize(LIST list, Filter filter) { treeRoot = buildTreeModel(getSerializedTree(list, filter)); + verifyTreeModel(list, filter); } protected String serializedTreeFromFilter(Filter filter) { @@ -82,6 +83,27 @@ public abstract class NewOrderedListUpdater { return array.toString(); } + private void verifyTreeModel(LIST list, Filter filter) { + boolean addedThings = false; + TodorooCursor tasks = taskService.fetchFiltered(filter.getSqlQuery(), null, Task.ID); + try { + for (tasks.moveToFirst(); !tasks.isAfterLast(); tasks.moveToNext()) { + Long id = tasks.getLong(0); + if (idToNode.containsKey(id)) + continue; + + addedThings = true; + Node newNode = new Node(id, treeRoot, 0); + treeRoot.children.add(newNode); + idToNode.put(id, newNode); + } + } finally { + tasks.close(); + } + if (addedThings) + writeSerialization(list, serializeTree()); + } + public Long[] getOrderedIds() { ArrayList ids = new ArrayList(); orderedIdHelper(treeRoot, ids); @@ -240,8 +262,12 @@ public abstract class NewOrderedListUpdater { } public void onAddTask(LIST list, Filter filter, long taskId) { + if (idToNode.containsKey(taskId)) + return; + Node newNode = new Node(taskId, treeRoot, 0); treeRoot.children.add(newNode); + idToNode.put(taskId, newNode); writeSerialization(list, serializeTree()); applyToFilter(filter); } diff --git a/astrid/plugin-src/com/todoroo/astrid/subtasks/SubtasksUpdater.java b/astrid/plugin-src/com/todoroo/astrid/subtasks/SubtasksUpdater.java index 9a38f814e..41a86a89f 100644 --- a/astrid/plugin-src/com/todoroo/astrid/subtasks/SubtasksUpdater.java +++ b/astrid/plugin-src/com/todoroo/astrid/subtasks/SubtasksUpdater.java @@ -53,6 +53,7 @@ public class SubtasksUpdater extends NewOrderedListUpdater { } else { order = list.getValue(TagData.TAG_ORDERING); } + if (order == null || "[]".equals(order)) { //$NON-NLS-1$ order = serializedTreeFromFilter(filter); writeSerialization(list, order);