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.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> metadata = new ArrayList<Metadata>();
HashSet<Long> ids = new HashSet<Long>(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> metadata = new ArrayList<Metadata>();
HashSet<Long> ids = new HashSet<Long>(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;

@ -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;

@ -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),

Loading…
Cancel
Save