From 0ed4e6a72a6dc7bc6c9fe512972d501e9a3c7652 Mon Sep 17 00:00:00 2001 From: Sam Bosley Date: Mon, 19 Mar 2012 16:39:18 -0700 Subject: [PATCH] Apply last modified check to syncing tags --- .../astrid/actfm/sync/ActFmSyncService.java | 116 +++--------------- 1 file changed, 14 insertions(+), 102 deletions(-) diff --git a/astrid/plugin-src/com/todoroo/astrid/actfm/sync/ActFmSyncService.java b/astrid/plugin-src/com/todoroo/astrid/actfm/sync/ActFmSyncService.java index 364ea0102..467ba8f4f 100644 --- a/astrid/plugin-src/com/todoroo/astrid/actfm/sync/ActFmSyncService.java +++ b/astrid/plugin-src/com/todoroo/astrid/actfm/sync/ActFmSyncService.java @@ -718,57 +718,6 @@ public final class ActFmSyncService { */ public void fetchActiveTasks(final boolean manual, SyncExceptionHandler handler, Runnable done) { invokeFetchList("task", manual, handler, new TaskListItemProcessor(manual), done, "active_tasks"); -// invokeFetchList("task", manual, handler, new ListItemProcessor() { -// @Override -// protected void mergeAndSave(JSONArray list, HashMap locals) throws JSONException { -// Task remote = new Task(); -// -// ArrayList metadata = new ArrayList(); -// HashSet ids = new HashSet(list.length()); -// for(int i = 0; i < list.length(); i++) { -// JSONObject item = list.getJSONObject(i); -// readIds(locals, item, remote); -// JsonHelper.taskFromJson(item, remote, metadata); -// -// if(remote.getValue(Task.USER_ID) == 0) { -// if(!remote.isSaved()) -// StatisticsService.reportEvent(StatisticsConstants.ACTFM_TASK_CREATED); -// else if(remote.isCompleted()) -// StatisticsService.reportEvent(StatisticsConstants.ACTFM_TASK_COMPLETED); -// } -// -// if(!remote.isSaved() && remote.hasDueDate() && -// remote.getValue(Task.DUE_DATE) < DateUtilities.now()) -// remote.setFlag(Task.REMINDER_FLAGS, Task.NOTIFY_AFTER_DEADLINE, false); -// -// remote.putTransitory(SyncFlags.ACTFM_SUPPRESS_SYNC, true); -// taskService.save(remote); -// ids.add(remote.getId()); -// metadataService.synchronizeMetadata(remote.getId(), metadata, MetadataCriteria.withKey(TagService.KEY)); -// remote.clear(); -// } -// -// if(manual) { -// Long[] localIds = ids.toArray(new Long[ids.size()]); -// taskService.deleteWhere(Criterion.and(TaskCriteria.activeAndVisible(), -// Task.REMOTE_ID.isNotNull(), -// Criterion.not(Task.ID.in(localIds)))); -// } -// } -// -// @Override -// protected HashMap getLocalModels() { -// TodorooCursor cursor = taskService.query(Query.select(Task.ID, -// Task.REMOTE_ID).where(Task.REMOTE_ID.in(remoteIds)).orderBy( -// Order.asc(Task.REMOTE_ID))); -// return cursorToMap(cursor, taskDao, Task.REMOTE_ID, Task.ID); -// } -// -// @Override -// protected Class typeClass() { -// return Task.class; -// } -// }, done, "active_tasks"); } /** @@ -778,54 +727,14 @@ public final class ActFmSyncService { * @param done */ public void fetchTasksForTag(final TagData tagData, final boolean manual, Runnable done) { - invokeFetchList("task", manual, null, new ListItemProcessor() { + invokeFetchList("task", manual, null, new TaskListItemProcessor(manual) { @Override - protected void mergeAndSave(JSONArray list, HashMap locals) throws JSONException { - Task remote = new Task(); - - ArrayList metadata = new ArrayList(); - HashSet ids = new HashSet(list.length()); - for(int i = 0; i < list.length(); i++) { - - JSONObject item = list.getJSONObject(i); - readIds(locals, item, remote); - JsonHelper.taskFromJson(item, remote, metadata); - - if(remote.getValue(Task.USER_ID) == 0) { - if(!remote.isSaved()) - StatisticsService.reportEvent(StatisticsConstants.ACTFM_TASK_CREATED); - else if(remote.isCompleted()) - StatisticsService.reportEvent(StatisticsConstants.ACTFM_TASK_COMPLETED); - } - - remote.putTransitory(SyncFlags.ACTFM_SUPPRESS_SYNC, true); - taskService.save(remote); - ids.add(remote.getId()); - metadataService.synchronizeMetadata(remote.getId(), metadata, MetadataCriteria.withKey(TagService.KEY)); - remote.clear(); - } - - if(manual) { - Long[] localIds = ids.toArray(new Long[ids.size()]); - taskService.deleteWhere(Criterion.and( - TagService.memberOfTagData(tagData.getValue(TagData.REMOTE_ID)), - TaskCriteria.activeAndVisible(), - Task.REMOTE_ID.isNotNull(), - Criterion.not(Task.ID.in(localIds)))); - } - } - - @Override - protected HashMap getLocalModels() { - TodorooCursor cursor = taskService.query(Query.select(Task.ID, - Task.REMOTE_ID).where(Task.REMOTE_ID.in(remoteIds)).orderBy( - Order.asc(Task.REMOTE_ID))); - return cursorToMap(cursor, taskDao, Task.REMOTE_ID, Task.ID); - } - - @Override - protected Class typeClass() { - return Task.class; + protected void deleteExtras(Long[] localIds) { + taskService.deleteWhere(Criterion.and( + TagService.memberOfTagData(tagData.getValue(TagData.REMOTE_ID)), + TaskCriteria.activeAndVisible(), + Task.REMOTE_ID.isNotNull(), + Criterion.not(Task.ID.in(localIds)))); } }, done, "tasks:" + tagData.getId(), "tag_id", tagData.getValue(TagData.REMOTE_ID)); } @@ -1085,7 +994,6 @@ public final class ActFmSyncService { readIds(locals, item, remote); long serverModificationDate = item.optLong("updated_at") * 1000; - System.err.println("Server mod: " + serverModificationDate + ", local mod: " + modificationDates.get(remote.getId())); if (serverModificationDate > 0 && modificationDates.containsKey(remote.getId()) && serverModificationDate < modificationDates.get(remote.getId())) { ids.add(remote.getId()); continue; // Modified locally more recently than remotely -- don't overwrite changes @@ -1113,12 +1021,16 @@ public final class ActFmSyncService { if(deleteExtras) { Long[] localIds = ids.toArray(new Long[ids.size()]); - taskService.deleteWhere(Criterion.and(TaskCriteria.activeAndVisible(), - Task.REMOTE_ID.isNotNull(), - Criterion.not(Task.ID.in(localIds)))); + deleteExtras(localIds); } } + protected void deleteExtras(Long[] localIds) { + taskService.deleteWhere(Criterion.and(TaskCriteria.activeAndVisible(), + Task.REMOTE_ID.isNotNull(), + Criterion.not(Task.ID.in(localIds)))); + } + @Override protected HashMap getLocalModels() { TodorooCursor cursor = taskService.query(Query.select(Task.ID, Task.MODIFICATION_DATE,