diff --git a/astrid/plugin-src/com/todoroo/astrid/gtasks/GtasksListActivity.java b/astrid/plugin-src/com/todoroo/astrid/gtasks/GtasksListActivity.java index 59d3012f5..db600db9b 100644 --- a/astrid/plugin-src/com/todoroo/astrid/gtasks/GtasksListActivity.java +++ b/astrid/plugin-src/com/todoroo/astrid/gtasks/GtasksListActivity.java @@ -55,6 +55,7 @@ public class GtasksListActivity extends DraggableTaskListActivity { public void drop(int from, int to) { long targetTaskId = taskAdapter.getItemId(from); long destinationTaskId = taskAdapter.getItemId(to); + System.err.format("%d -> %d ::: %d -> %d\n", from, to, targetTaskId, destinationTaskId); gtasksTaskListUpdater.moveTo(listId, targetTaskId, destinationTaskId); loadTaskListContent(true); } diff --git a/astrid/plugin-src/com/todoroo/astrid/gtasks/GtasksTaskListUpdater.java b/astrid/plugin-src/com/todoroo/astrid/gtasks/GtasksTaskListUpdater.java index fabc0cb4d..bd127718f 100644 --- a/astrid/plugin-src/com/todoroo/astrid/gtasks/GtasksTaskListUpdater.java +++ b/astrid/plugin-src/com/todoroo/astrid/gtasks/GtasksTaskListUpdater.java @@ -52,7 +52,6 @@ public class GtasksTaskListUpdater { final AtomicInteger targetTaskIndent = new AtomicInteger(-1); final AtomicInteger previousIndent = new AtomicInteger(-1); final AtomicLong previousTask = new AtomicLong(-1); - final Task taskContainer = new Task(); iterateThroughList(list, new ListIterator() { @Override @@ -71,8 +70,7 @@ public class GtasksTaskListUpdater { parents.get(parents.get(taskId))); else metadata.setValue(GtasksMetadata.PARENT_TASK, Task.NO_ID); - if(PluginServices.getMetadataService().save(metadata)) - updateModifiedDate(taskContainer, taskId); + saveAndUpdateModifiedDate(metadata, taskId); } } else if(targetTaskIndent.get() > -1) { // found first task that is not beneath target @@ -80,8 +78,7 @@ public class GtasksTaskListUpdater { targetTaskIndent.set(-1); else { metadata.setValue(GtasksMetadata.INDENT, indent + delta); - PluginServices.getMetadataService().save(metadata); - updateModifiedDate(taskContainer, taskId); + saveAndUpdateModifiedDate(metadata, taskId); } } else { previousIndent.set(indent); @@ -129,20 +126,21 @@ public class GtasksTaskListUpdater { sibling.parent.children.add(index, sibling); } - traverseTreeAndWriteValues(root, new AtomicInteger(0), 0, new Task()); + traverseTreeAndWriteValues(root, new AtomicInteger(0), -1); } - private void traverseTreeAndWriteValues(Node node, AtomicInteger order, int indent, Task taskContainer) { + private void traverseTreeAndWriteValues(Node node, AtomicInteger order, int indent) { if(node.taskId != -1) { Metadata metadata = gtasksMetadataService.getTaskMetadata(node.taskId); + System.err.println("task id " + node.taskId + ", order " + order.get()); metadata.setValue(GtasksMetadata.ORDER, order.getAndIncrement()); metadata.setValue(GtasksMetadata.INDENT, indent); - if(PluginServices.getMetadataService().save(metadata)) - updateModifiedDate(taskContainer, node.taskId); + metadata.setValue(GtasksMetadata.PARENT_TASK, node.parent.taskId); + saveAndUpdateModifiedDate(metadata, node.taskId); } for(Node child : node.children) { - traverseTreeAndWriteValues(child, order, indent + 1, taskContainer); + traverseTreeAndWriteValues(child, order, indent + 1); } } @@ -159,7 +157,7 @@ public class GtasksTaskListUpdater { private Node buildTreeModel(StoreObject list) { final Node root = new Node(-1, null); - final AtomicInteger previoustIndent = new AtomicInteger(0); + final AtomicInteger previoustIndent = new AtomicInteger(-1); final AtomicReference currentNode = new AtomicReference(root); iterateThroughList(list, new ListIterator() { @@ -183,6 +181,8 @@ public class GtasksTaskListUpdater { currentNode.set(new Node(taskId, node)); node.children.add(currentNode.get()); } + + previoustIndent.set(indent); } }); return root; @@ -197,7 +197,7 @@ public class GtasksTaskListUpdater { iterateThroughList(list, new ListIterator() { public void processTask(long taskId, Metadata metadata) { - System.err.format("%d: %d, indent:%d, parent:%d\n", taskId, //$NON-NLS-1$ + System.err.format("id %d: order %d, indent:%d, parent:%d\n", taskId, //$NON-NLS-1$ metadata.getValue(GtasksMetadata.ORDER), metadata.getValue(GtasksMetadata.INDENT), metadata.getValue(GtasksMetadata.PARENT_TASK)); @@ -205,7 +205,12 @@ public class GtasksTaskListUpdater { }); } - private void updateModifiedDate(Task taskContainer, long taskId) { + private final Task taskContainer = new Task(); + + private void saveAndUpdateModifiedDate(Metadata metadata, long taskId) { + if(metadata.getSetValues().size() == 0) + return; + PluginServices.getMetadataService().save(metadata); taskContainer.setId(taskId); taskContainer.setValue(Task.DETAILS_DATE, DateUtilities.now()); PluginServices.getTaskService().save(taskContainer); diff --git a/tests/src/com/todoroo/astrid/gtasks/GtasksTaskMovingTest.java b/tests/src/com/todoroo/astrid/gtasks/GtasksTaskMovingTest.java index fd21a58b6..32c4447bb 100644 --- a/tests/src/com/todoroo/astrid/gtasks/GtasksTaskMovingTest.java +++ b/tests/src/com/todoroo/astrid/gtasks/GtasksTaskMovingTest.java @@ -30,17 +30,17 @@ public class GtasksTaskMovingTest extends DatabaseTestCase { whenTriggerMove(F, null); - thenExpectMetadataIndentAndOrder(E, 4, 0); - thenExpectMetadataIndentAndOrder(F, 5, 0); + thenExpectMetadataOrderAndIndent(E, 4, 0); + thenExpectMetadataOrderAndIndent(F, 5, 0); } - public void testMoveDownToListbottom() { + public void testMoveDownToListBottom() { givenTasksABCDEF(); whenTriggerMove(E, null); - thenExpectMetadataIndentAndOrder(E, 5, 0); - thenExpectMetadataIndentAndOrder(F, 4, 00); + thenExpectMetadataOrderAndIndent(E, 5, 0); + thenExpectMetadataOrderAndIndent(F, 4, 0); } public void testMoveUpSimple() { @@ -48,11 +48,11 @@ public class GtasksTaskMovingTest extends DatabaseTestCase { whenTriggerMove(F, E); - thenExpectMetadataIndentAndOrder(E, 5, 0); - thenExpectMetadataIndentAndOrder(F, 4, 00); + thenExpectMetadataOrderAndIndent(E, 5, 0); + thenExpectMetadataOrderAndIndent(F, 4, 0); } - public void testMoveWithSubtasks() { + public void testMoveUpWithSubtasks() { givenTasksABCDEF(); whenTriggerMove(C, B); @@ -64,13 +64,13 @@ public class GtasksTaskMovingTest extends DatabaseTestCase { * B */ - thenExpectMetadataIndentAndOrder(A, 0, 0); - thenExpectMetadataIndentAndOrder(B, 3, 1); - thenExpectMetadataIndentAndOrder(C, 1, 1); - thenExpectMetadataIndentAndOrder(D, 2, 2); + thenExpectMetadataOrderAndIndent(A, 0, 0); + thenExpectMetadataOrderAndIndent(B, 3, 1); + thenExpectMetadataOrderAndIndent(C, 1, 1); + thenExpectMetadataOrderAndIndent(D, 2, 2); } - public void testMoveThroughSubtasks() { + public void testMoveDownThroughSubtasks() { givenTasksABCDEF(); whenTriggerMove(B, E); @@ -83,10 +83,10 @@ public class GtasksTaskMovingTest extends DatabaseTestCase { * E */ - thenExpectMetadataIndentAndOrder(A, 0, 0); - thenExpectMetadataIndentAndOrder(B, 3, 0); - thenExpectMetadataIndentAndOrder(C, 1, 1); - thenExpectMetadataIndentAndOrder(D, 2, 2); + thenExpectMetadataOrderAndIndent(A, 0, 0); + thenExpectMetadataOrderAndIndent(B, 3, 0); + thenExpectMetadataOrderAndIndent(C, 1, 1); + thenExpectMetadataOrderAndIndent(D, 2, 2); } public void testMoveUpAboveParent() { @@ -103,9 +103,9 @@ public class GtasksTaskMovingTest extends DatabaseTestCase { * F */ - thenExpectMetadataIndentAndOrder(A, 1, 0); - thenExpectMetadataIndentAndOrder(B, 0, 0); - thenExpectMetadataIndentAndOrder(C, 2, 1); + thenExpectMetadataOrderAndIndent(A, 1, 0); + thenExpectMetadataOrderAndIndent(B, 0, 0); + thenExpectMetadataOrderAndIndent(C, 2, 1); } public void testMoveDownWithChildren() { @@ -122,11 +122,11 @@ public class GtasksTaskMovingTest extends DatabaseTestCase { * F */ - thenExpectMetadataIndentAndOrder(A, 0, 0); - thenExpectMetadataIndentAndOrder(B, 1, 1); - thenExpectMetadataIndentAndOrder(C, 3, 0); - thenExpectMetadataIndentAndOrder(D, 4, 1); - thenExpectMetadataIndentAndOrder(E, 2, 0); + thenExpectMetadataOrderAndIndent(A, 0, 0); + thenExpectMetadataOrderAndIndent(B, 1, 1); + thenExpectMetadataOrderAndIndent(C, 3, 0); + thenExpectMetadataOrderAndIndent(D, 4, 1); + thenExpectMetadataOrderAndIndent(E, 2, 0); } public void testMoveDownIndentingTwice() { @@ -142,11 +142,11 @@ public class GtasksTaskMovingTest extends DatabaseTestCase { * D */ - thenExpectMetadataIndentAndOrder(A, 0, 0); - thenExpectMetadataIndentAndOrder(B, 1, 1); - thenExpectMetadataIndentAndOrder(C, 2, 1); - thenExpectMetadataIndentAndOrder(D, 4, 0); - thenExpectMetadataIndentAndOrder(E, 3, 0); + thenExpectMetadataOrderAndIndent(A, 0, 0); + thenExpectMetadataOrderAndIndent(B, 1, 1); + thenExpectMetadataOrderAndIndent(C, 2, 1); + thenExpectMetadataOrderAndIndent(D, 4, 0); + thenExpectMetadataOrderAndIndent(E, 3, 0); } public void testMoveUpMultiple() { @@ -161,10 +161,10 @@ public class GtasksTaskMovingTest extends DatabaseTestCase { * B */ - thenExpectMetadataIndentAndOrder(A, 2, 0); - thenExpectMetadataIndentAndOrder(B, 3, 1); - thenExpectMetadataIndentAndOrder(C, 0, 0); - thenExpectMetadataIndentAndOrder(D, 1, 1); + thenExpectMetadataOrderAndIndent(A, 2, 0); + thenExpectMetadataOrderAndIndent(B, 3, 1); + thenExpectMetadataOrderAndIndent(C, 0, 0); + thenExpectMetadataOrderAndIndent(D, 1, 1); } public void testMoveUpIntoSublist() { @@ -180,12 +180,12 @@ public class GtasksTaskMovingTest extends DatabaseTestCase { * D */ - thenExpectMetadataIndentAndOrder(A, 0, 0); - thenExpectMetadataIndentAndOrder(B, 1, 1); - thenExpectMetadataIndentAndOrder(C, 2, 1); - thenExpectMetadataIndentAndOrder(D, 4, 2); - thenExpectMetadataIndentAndOrder(E, 5, 0); - thenExpectMetadataIndentAndOrder(F, 3, 2); + thenExpectMetadataOrderAndIndent(A, 0, 0); + thenExpectMetadataOrderAndIndent(B, 1, 1); + thenExpectMetadataOrderAndIndent(C, 2, 1); + thenExpectMetadataOrderAndIndent(D, 4, 2); + thenExpectMetadataOrderAndIndent(E, 5, 0); + thenExpectMetadataOrderAndIndent(F, 3, 2); } public void testMoveDownMultiple() { @@ -201,12 +201,12 @@ public class GtasksTaskMovingTest extends DatabaseTestCase { * B */ - thenExpectMetadataIndentAndOrder(A, 0, 0); - thenExpectMetadataIndentAndOrder(B, 4, 0); - thenExpectMetadataIndentAndOrder(C, 1, 1); - thenExpectMetadataIndentAndOrder(D, 2, 2); - thenExpectMetadataIndentAndOrder(E, 3, 0); - thenExpectMetadataIndentAndOrder(F, 5, 0); + thenExpectMetadataOrderAndIndent(A, 0, 0); + thenExpectMetadataOrderAndIndent(B, 4, 0); + thenExpectMetadataOrderAndIndent(C, 1, 1); + thenExpectMetadataOrderAndIndent(D, 2, 2); + thenExpectMetadataOrderAndIndent(E, 3, 0); + thenExpectMetadataOrderAndIndent(F, 5, 0); } @@ -215,9 +215,10 @@ public class GtasksTaskMovingTest extends DatabaseTestCase { /** moveTo = null => move to end */ private void whenTriggerMove(Task target, Task moveTo) { gtasksTaskListUpdater.moveTo("1", target.getId(), moveTo == null ? -1 : moveTo.getId()); + gtasksTaskListUpdater.debugPrint("1"); } - private void thenExpectMetadataIndentAndOrder(Task task, int order, int indent) { + private void thenExpectMetadataOrderAndIndent(Task task, int order, int indent) { Metadata metadata = gtasksMetadataService.getTaskMetadata(task.getId()); assertNotNull("metadata was found", metadata); assertEquals("order", order, (int)metadata.getValue(GtasksMetadata.ORDER)); @@ -243,7 +244,7 @@ public class GtasksTaskMovingTest extends DatabaseTestCase { * F */ private Task[] givenTasksABCDEF() { - return new Task[] { + Task[] tasks = new Task[] { A = createTask("A", 0, 0), B = createTask("B", 1, 1), C = createTask("C", 2, 1), @@ -251,6 +252,8 @@ public class GtasksTaskMovingTest extends DatabaseTestCase { E = createTask("E", 4, 0), F = createTask("F", 5, 0), }; + gtasksTaskListUpdater.correctMetadataForList("1"); + return tasks; } private Task createTask(String title, int order, int indent) {