Fix for astrid.com sync - in a manual sync, if your item is not in the list, it is now deleted.

pull/14/head
Tim Su 14 years ago
parent 2291b50041
commit f9e7b53960

@ -47,6 +47,7 @@ import com.todoroo.andlib.utility.Preferences;
import com.todoroo.astrid.dao.MetadataDao; import com.todoroo.astrid.dao.MetadataDao;
import com.todoroo.astrid.dao.TagDataDao; import com.todoroo.astrid.dao.TagDataDao;
import com.todoroo.astrid.dao.TaskDao; import com.todoroo.astrid.dao.TaskDao;
import com.todoroo.astrid.dao.TaskDao.TaskCriteria;
import com.todoroo.astrid.dao.UpdateDao; import com.todoroo.astrid.dao.UpdateDao;
import com.todoroo.astrid.data.Metadata; import com.todoroo.astrid.data.Metadata;
import com.todoroo.astrid.data.MetadataApiDao.MetadataCriteria; import com.todoroo.astrid.data.MetadataApiDao.MetadataCriteria;
@ -724,6 +725,7 @@ public final class ActFmSyncService {
Task remote = new Task(); Task remote = new Task();
ArrayList<Metadata> metadata = new ArrayList<Metadata>(); ArrayList<Metadata> metadata = new ArrayList<Metadata>();
HashSet<Long> ids = new HashSet<Long>(list.length());
for(int i = 0; i < list.length(); i++) { for(int i = 0; i < list.length(); i++) {
JSONObject item = list.getJSONObject(i); JSONObject item = list.getJSONObject(i);
readIds(locals, item, remote); readIds(locals, item, remote);
@ -742,9 +744,16 @@ public final class ActFmSyncService {
Flags.set(Flags.ACTFM_SUPPRESS_SYNC); Flags.set(Flags.ACTFM_SUPPRESS_SYNC);
taskService.save(remote); taskService.save(remote);
ids.add(remote.getId());
metadataService.synchronizeMetadata(remote.getId(), metadata, MetadataCriteria.withKey(TagService.KEY)); metadataService.synchronizeMetadata(remote.getId(), metadata, MetadataCriteria.withKey(TagService.KEY));
remote.clear(); 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 @Override
@ -775,6 +784,7 @@ public final class ActFmSyncService {
Task remote = new Task(); Task remote = new Task();
ArrayList<Metadata> metadata = new ArrayList<Metadata>(); ArrayList<Metadata> metadata = new ArrayList<Metadata>();
HashSet<Long> ids = new HashSet<Long>(list.length());
for(int i = 0; i < list.length(); i++) { for(int i = 0; i < list.length(); i++) {
JSONObject item = list.getJSONObject(i); JSONObject item = list.getJSONObject(i);
@ -788,16 +798,19 @@ public final class ActFmSyncService {
StatisticsService.reportEvent(StatisticsConstants.ACTFM_TASK_COMPLETED); StatisticsService.reportEvent(StatisticsConstants.ACTFM_TASK_COMPLETED);
} }
Flags.set(Flags.ACTFM_SUPPRESS_SYNC); Flags.set(Flags.ACTFM_SUPPRESS_SYNC);
taskService.save(remote); taskService.save(remote);
ids.add(remote.getId());
metadataService.synchronizeMetadata(remote.getId(), metadata, MetadataCriteria.withKey(TagService.KEY)); metadataService.synchronizeMetadata(remote.getId(), metadata, MetadataCriteria.withKey(TagService.KEY));
remote.clear(); remote.clear();
} }
if(manual) { if(manual) {
for(Long localId : locals.values()) Long[] localIds = ids.toArray(new Long[ids.size()]);
taskDao.delete(localId); 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) { private void pushQueuedUpdates(TagData tagData) {
Criterion criterion = null; Criterion criterion = null;

@ -11,8 +11,6 @@ import java.util.concurrent.atomic.AtomicInteger;
import org.json.JSONException; import org.json.JSONException;
import android.graphics.Bitmap;
import com.timsu.astrid.C2DMReceiver; import com.timsu.astrid.C2DMReceiver;
import com.timsu.astrid.R; import com.timsu.astrid.R;
import com.todoroo.andlib.data.TodorooCursor; 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.RemoteModel;
import com.todoroo.astrid.data.TagData; import com.todoroo.astrid.data.TagData;
import com.todoroo.astrid.data.Task; 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.AstridDependencyInjector;
import com.todoroo.astrid.service.TagDataService; import com.todoroo.astrid.service.TagDataService;
import com.todoroo.astrid.service.TaskService; import com.todoroo.astrid.service.TaskService;

@ -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) { public static Criterion tagEq(String tag, Criterion additionalCriterion) {
return Criterion.and( return Criterion.and(
MetadataCriteria.withKey(KEY), TAG.eq(tag), MetadataCriteria.withKey(KEY), TAG.eq(tag),

Loading…
Cancel
Save