diff --git a/astrid/plugin-src/com/todoroo/astrid/tags/TagService.java b/astrid/plugin-src/com/todoroo/astrid/tags/TagService.java index 3aa5e77e2..615521e2c 100644 --- a/astrid/plugin-src/com/todoroo/astrid/tags/TagService.java +++ b/astrid/plugin-src/com/todoroo/astrid/tags/TagService.java @@ -307,6 +307,7 @@ public final class TagService { if (suppressOutstanding) deleteTemplate.putTransitory(SyncFlags.ACTFM_SUPPRESS_OUTSTANDING_ENTRIES, true); deleteTemplate.setValue(Metadata.TASK, taskId); // Need this for recording changes in outstanding table + deleteTemplate.setValue(TagMetadata.TAG_UUID, tagUuid); // Need this for recording changes in outstanding table deleteTemplate.setValue(Metadata.DELETION_DATE, DateUtilities.now()); metadataDao.update(Criterion.and(MetadataCriteria.withKey(TagMetadata.KEY), Metadata.DELETION_DATE.eq(0), TagMetadata.TASK_UUID.eq(taskUuid), TagMetadata.TAG_UUID.eq(tagUuid)), deleteTemplate); @@ -319,13 +320,18 @@ public final class TagService { */ public void deleteLinks(long taskId, String taskUuid, String[] tagUuids, boolean suppressOutstanding) { Metadata deleteTemplate = new Metadata(); - if (suppressOutstanding) - deleteTemplate.putTransitory(SyncFlags.ACTFM_SUPPRESS_OUTSTANDING_ENTRIES, true); deleteTemplate.setValue(Metadata.TASK, taskId); // Need this for recording changes in outstanding table deleteTemplate.setValue(Metadata.DELETION_DATE, DateUtilities.now()); if (tagUuids != null) { - metadataDao.update(Criterion.and(MetadataCriteria.withKey(TagMetadata.KEY), Metadata.DELETION_DATE.eq(0), - TagMetadata.TASK_UUID.eq(taskUuid), TagMetadata.TAG_UUID.in(tagUuids)), deleteTemplate); + for (String uuid : tagUuids) { + // TODO: Right now this is in a loop because each deleteTemplate needs the individual tagUuid in order to record + // the outstanding entry correctly. If possible, this should be improved to a single query + deleteTemplate.setValue(TagMetadata.TAG_UUID, uuid); // Need this for recording changes in outstanding table + if (suppressOutstanding) + deleteTemplate.putTransitory(SyncFlags.ACTFM_SUPPRESS_OUTSTANDING_ENTRIES, true); + metadataDao.update(Criterion.and(MetadataCriteria.withKey(TagMetadata.KEY), Metadata.DELETION_DATE.eq(0), + TagMetadata.TASK_UUID.eq(taskUuid), TagMetadata.TAG_UUID.eq(uuid)), deleteTemplate); + } } } @@ -512,8 +518,6 @@ public final class TagService { } // Mark as deleted links that don't exist anymore - Metadata deletedLinkTemplate = new Metadata(); - deletedLinkTemplate.setValue(Metadata.DELETION_DATE, DateUtilities.now()); deleteLinks(taskId, taskUuid, existingLinks.toArray(new String[existingLinks.size()]), false); return true; diff --git a/astrid/src/com/todoroo/astrid/dao/MetadataDao.java b/astrid/src/com/todoroo/astrid/dao/MetadataDao.java index 18a01cd95..dfea19ea5 100644 --- a/astrid/src/com/todoroo/astrid/dao/MetadataDao.java +++ b/astrid/src/com/todoroo/astrid/dao/MetadataDao.java @@ -88,7 +88,7 @@ public class MetadataDao extends DatabaseDao { Long taskId = modelSetValues.getAsLong(Metadata.TASK.name); String tagUuid = modelSetValues.getAsString(TagMetadata.TAG_UUID.name); Long deletionDate = modelSetValues.getAsLong(Metadata.DELETION_DATE.name); - if (taskId == null || taskId == AbstractModel.NO_ID || deletionDate == null || RemoteModel.isUuidEmpty(tagUuid)) + if (taskId == null || taskId == AbstractModel.NO_ID || RemoteModel.isUuidEmpty(tagUuid)) return false; TaskOutstanding m = new TaskOutstanding(); @@ -96,7 +96,7 @@ public class MetadataDao extends DatabaseDao { m.setValue(OutstandingEntry.CREATED_AT_PROPERTY, DateUtilities.now()); String addedOrRemoved = NameMaps.TAG_ADDED_COLUMN; - if (deletionDate > 0) + if (deletionDate != null && deletionDate > 0) addedOrRemoved = NameMaps.TAG_REMOVED_COLUMN; m.setValue(OutstandingEntry.COLUMN_STRING_PROPERTY, addedOrRemoved);