From f9e7b5396028dc88e0cad0c0f01077fb498d63ca Mon Sep 17 00:00:00 2001 From: Tim Su Date: Wed, 22 Feb 2012 19:07:22 -0800 Subject: [PATCH] Fix for astrid.com sync - in a manual sync, if your item is not in the list, it is now deleted. --- .../astrid/actfm/sync/ActFmSyncService.java | 22 ++++++++++++++----- .../actfm/sync/ActFmSyncV2Provider.java | 4 ---- .../com/todoroo/astrid/tags/TagService.java | 5 +++++ 3 files changed, 21 insertions(+), 10 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 424439b0e..ff94cd2f9 100644 --- a/astrid/plugin-src/com/todoroo/astrid/actfm/sync/ActFmSyncService.java +++ b/astrid/plugin-src/com/todoroo/astrid/actfm/sync/ActFmSyncService.java @@ -47,6 +47,7 @@ import com.todoroo.andlib.utility.Preferences; import com.todoroo.astrid.dao.MetadataDao; import com.todoroo.astrid.dao.TagDataDao; import com.todoroo.astrid.dao.TaskDao; +import com.todoroo.astrid.dao.TaskDao.TaskCriteria; import com.todoroo.astrid.dao.UpdateDao; import com.todoroo.astrid.data.Metadata; import com.todoroo.astrid.data.MetadataApiDao.MetadataCriteria; @@ -724,6 +725,7 @@ public final class ActFmSyncService { 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); @@ -742,9 +744,16 @@ public final class ActFmSyncService { Flags.set(Flags.ACTFM_SUPPRESS_SYNC); 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(), + Criterion.not(Task.ID.in(localIds)))); + } } @Override @@ -775,6 +784,7 @@ public final class ActFmSyncService { 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); @@ -788,16 +798,19 @@ public final class ActFmSyncService { StatisticsService.reportEvent(StatisticsConstants.ACTFM_TASK_COMPLETED); } - Flags.set(Flags.ACTFM_SUPPRESS_SYNC); taskService.save(remote); + ids.add(remote.getId()); metadataService.synchronizeMetadata(remote.getId(), metadata, MetadataCriteria.withKey(TagService.KEY)); remote.clear(); } if(manual) { - for(Long localId : locals.values()) - taskDao.delete(localId); + Long[] localIds = ids.toArray(new Long[ids.size()]); + taskService.deleteWhere(Criterion.and( + TagService.memberOfTagData(tagData.getValue(TagData.REMOTE_ID)), + TaskCriteria.activeAndVisible(), + Criterion.not(Task.ID.in(localIds)))); } } @@ -854,9 +867,6 @@ public final class ActFmSyncService { } - - - private void pushQueuedUpdates(TagData tagData) { Criterion criterion = null; diff --git a/astrid/plugin-src/com/todoroo/astrid/actfm/sync/ActFmSyncV2Provider.java b/astrid/plugin-src/com/todoroo/astrid/actfm/sync/ActFmSyncV2Provider.java index bfdf1776e..225a008d7 100644 --- a/astrid/plugin-src/com/todoroo/astrid/actfm/sync/ActFmSyncV2Provider.java +++ b/astrid/plugin-src/com/todoroo/astrid/actfm/sync/ActFmSyncV2Provider.java @@ -11,8 +11,6 @@ import java.util.concurrent.atomic.AtomicInteger; import org.json.JSONException; -import android.graphics.Bitmap; - import com.timsu.astrid.C2DMReceiver; import com.timsu.astrid.R; import com.todoroo.andlib.data.TodorooCursor; @@ -25,8 +23,6 @@ import com.todoroo.astrid.dao.TaskDao.TaskCriteria; import com.todoroo.astrid.data.RemoteModel; import com.todoroo.astrid.data.TagData; import com.todoroo.astrid.data.Task; -import com.todoroo.astrid.data.Update; -import com.todoroo.astrid.helper.ImageDiskCache; import com.todoroo.astrid.service.AstridDependencyInjector; import com.todoroo.astrid.service.TagDataService; import com.todoroo.astrid.service.TaskService; diff --git a/astrid/plugin-src/com/todoroo/astrid/tags/TagService.java b/astrid/plugin-src/com/todoroo/astrid/tags/TagService.java index ae277b7b5..a332d381a 100644 --- a/astrid/plugin-src/com/todoroo/astrid/tags/TagService.java +++ b/astrid/plugin-src/com/todoroo/astrid/tags/TagService.java @@ -140,6 +140,11 @@ public final class TagService { } + public static Criterion memberOfTagData(long tagDataRemoteId) { + return Task.ID.in(Query.select(Metadata.TASK).from(Metadata.TABLE).where( + Criterion.and(Metadata.KEY.eq(KEY), REMOTE_ID.eq(tagDataRemoteId)))); + } + public static Criterion tagEq(String tag, Criterion additionalCriterion) { return Criterion.and( MetadataCriteria.withKey(KEY), TAG.eq(tag),