From 0e42f0c61f1d030482b7bc87645dba91279b23cb Mon Sep 17 00:00:00 2001 From: Sam Bosley Date: Fri, 22 Feb 2013 12:45:53 -0800 Subject: [PATCH] Tombstone tag metadata when list deleted during sync --- .../actfm/sync/messages/MakeChanges.java | 23 +++++++++++++++++-- .../astrid/actfm/sync/messages/NameMaps.java | 7 +++++- 2 files changed, 27 insertions(+), 3 deletions(-) diff --git a/astrid/plugin-src/com/todoroo/astrid/actfm/sync/messages/MakeChanges.java b/astrid/plugin-src/com/todoroo/astrid/actfm/sync/messages/MakeChanges.java index e350e8d74..6c2f32172 100644 --- a/astrid/plugin-src/com/todoroo/astrid/actfm/sync/messages/MakeChanges.java +++ b/astrid/plugin-src/com/todoroo/astrid/actfm/sync/messages/MakeChanges.java @@ -15,6 +15,7 @@ import com.todoroo.andlib.data.AbstractModel; import com.todoroo.andlib.data.Property; import com.todoroo.andlib.data.Property.StringProperty; import com.todoroo.andlib.sql.Criterion; +import com.todoroo.andlib.utility.DateUtilities; import com.todoroo.andlib.utility.Preferences; import com.todoroo.astrid.actfm.sync.ActFmInvoker; import com.todoroo.astrid.core.PluginServices; @@ -297,9 +298,27 @@ public class MakeChanges extends ServerToClientMessage uuidChanged(oldUuid, uuid); } - if (changes.has("name")) { + String nameCol = NameMaps.localPropertyToServerColumnName(NameMaps.TABLE_ID_TAGS, TagData.NAME); + String deletedCol = NameMaps.localPropertyToServerColumnName(NameMaps.TABLE_ID_TAGS, TagData.DELETION_DATE); + if (changes.has(nameCol)) { Metadata template = new Metadata(); - template.setValue(TaskToTagMetadata.TAG_NAME, changes.optString("name")); + template.setValue(TaskToTagMetadata.TAG_NAME, changes.optString(nameCol)); + PluginServices.getMetadataService().update( + Criterion.and(MetadataCriteria.withKey(TaskToTagMetadata.KEY), + TaskToTagMetadata.TAG_UUID.eq(uuid)), template); + } else if (changes.has(deletedCol)) { + Metadata template = new Metadata(); + String valueString = changes.optString(deletedCol); + long deletedValue = 0; + if (!TextUtils.isEmpty(valueString)) { + try { + deletedValue = DateUtilities.parseIso8601(valueString); + } catch (Exception e){ + // + } + } + template.setValue(Metadata.DELETION_DATE, deletedValue); + template.putTransitory(SyncFlags.ACTFM_SUPPRESS_OUTSTANDING_ENTRIES, true); PluginServices.getMetadataService().update( Criterion.and(MetadataCriteria.withKey(TaskToTagMetadata.KEY), TaskToTagMetadata.TAG_UUID.eq(uuid)), template); diff --git a/astrid/plugin-src/com/todoroo/astrid/actfm/sync/messages/NameMaps.java b/astrid/plugin-src/com/todoroo/astrid/actfm/sync/messages/NameMaps.java index d63ad62f9..37db77f67 100644 --- a/astrid/plugin-src/com/todoroo/astrid/actfm/sync/messages/NameMaps.java +++ b/astrid/plugin-src/com/todoroo/astrid/actfm/sync/messages/NameMaps.java @@ -328,7 +328,7 @@ public class NameMaps { // Mapping helpers // ---------- - private static B mapColumnName(String table, String col, Map taskMap, Map tagMap, Map userMap, + private static B mapColumnName(String table, A col, Map taskMap, Map tagMap, Map userMap, Map userActivityMap, Map taskAttachmentMap, Map taskListMetadataMap) { Map map = null; if (TABLE_ID_TASKS.equals(table)) @@ -373,6 +373,11 @@ public class NameMaps { return false; } + public static String localPropertyToServerColumnName(String table, Property localProperty) { + return mapColumnName(table, localProperty, TASK_PROPERTIES_LOCAL_TO_SERVER, TAG_DATA_PROPERTIES_LOCAL_TO_SERVER, USER_PROPERTIES_LOCAL_TO_SERVER, + USER_ACTIVITY_PROPERTIES_LOCAL_TO_SERVER, TASK_ATTACHMENT_PROPERTIES_LOCAL_TO_SERVER, TASK_LIST_METADATA_PROPERTIES_LOCAL_TO_SERVER); + } + public static String localColumnNameToServerColumnName(String table, String localColumn) { return mapColumnName(table, localColumn, TASK_COLUMNS_LOCAL_TO_SERVER, TAG_DATA_COLUMNS_LOCAL_TO_SERVER, USER_COLUMNS_LOCAL_TO_SERVER, USER_ACTIVITY_COLUMNS_LOCAL_TO_SERVER, TASK_ATTACHMENT_COLUMNS_LOCAL_TO_SERVER, TASK_LIST_METADATA_COLUMNS_LOCAL_TO_SERVER);