From 90793095392b65e876935e1f5304f61f020c4909 Mon Sep 17 00:00:00 2001 From: Sam Bosley Date: Mon, 28 Jan 2013 19:40:09 -0800 Subject: [PATCH] Try reusing old remoteId property as the new uuid property by recasting it as a string --- .../com/todoroo/astrid/data/RemoteModel.java | 9 + .../astrid/actfm/CommentsFragment.java | 3 +- .../astrid/actfm/TagCommentsFragment.java | 9 +- .../astrid/actfm/TaskCommentsFragment.java | 9 +- .../astrid/actfm/sync/ActFmDataService.java | 35 +- .../astrid/actfm/sync/ActFmSyncService.java | 954 +++++++++--------- .../actfm/sync/ActFmSyncV2Provider.java | 224 ++-- .../actfm/sync/AstridNewSyncMigrator.java | 11 +- .../astrid/notes/EditNoteActivity.java | 16 +- .../astrid/people/PeopleFilterExposer.java | 2 +- .../astrid/people/PersonViewFragment.java | 2 +- .../astrid/subtasks/SubtasksHelper.java | 10 +- .../todoroo/astrid/tags/TagCaseMigrator.java | 8 +- .../com/todoroo/astrid/tags/TagService.java | 3 - .../src/com/todoroo/astrid/dao/Database.java | 8 +- .../astrid/service/StartupService.java | 4 +- .../astrid/subtasks/SubtasksHelperTest.java | 16 +- 17 files changed, 647 insertions(+), 676 deletions(-) diff --git a/api/src/com/todoroo/astrid/data/RemoteModel.java b/api/src/com/todoroo/astrid/data/RemoteModel.java index 2f1bf2c82..a61b956df 100644 --- a/api/src/com/todoroo/astrid/data/RemoteModel.java +++ b/api/src/com/todoroo/astrid/data/RemoteModel.java @@ -50,6 +50,15 @@ abstract public class RemoteModel extends AbstractModel { /** constant value for no uuid */ public static final String NO_UUID = "0"; //$NON-NLS-1$ + public static final boolean isValidUuid(String uuid) { + try { + long value = Long.parseLong(uuid); + return value > 0; + } catch (NumberFormatException e) { + return isUuidEmpty(uuid); + } + } + /** * Utility method to get the identifier of the model, if it exists. * diff --git a/astrid/plugin-src/com/todoroo/astrid/actfm/CommentsFragment.java b/astrid/plugin-src/com/todoroo/astrid/actfm/CommentsFragment.java index be209269f..74b450eac 100644 --- a/astrid/plugin-src/com/todoroo/astrid/actfm/CommentsFragment.java +++ b/astrid/plugin-src/com/todoroo/astrid/actfm/CommentsFragment.java @@ -278,7 +278,8 @@ public abstract class CommentsFragment extends ListFragment { if (hasModel()) { performFetch(manual, doneRunnable); } else { - actFmSyncService.fetchPersonalUpdates(manual, doneRunnable); +// actFmSyncService.fetchPersonalUpdates(manual, doneRunnable); + doneRunnable.run(); } callback.incrementProgress(50); } diff --git a/astrid/plugin-src/com/todoroo/astrid/actfm/TagCommentsFragment.java b/astrid/plugin-src/com/todoroo/astrid/actfm/TagCommentsFragment.java index e831cfac2..04c5590ed 100644 --- a/astrid/plugin-src/com/todoroo/astrid/actfm/TagCommentsFragment.java +++ b/astrid/plugin-src/com/todoroo/astrid/actfm/TagCommentsFragment.java @@ -110,7 +110,8 @@ public class TagCommentsFragment extends CommentsFragment { @Override protected void performFetch(boolean manual, Runnable done) { - actFmSyncService.fetchUpdatesForTag(tagData, manual, done); + done.run(); +// actFmSyncService.fetchUpdatesForTag(tagData, manual, done); } @Override @@ -120,7 +121,7 @@ public class TagCommentsFragment extends CommentsFragment { update.setValue(Update.MESSAGE, addCommentField.getText().toString()); update.setValue(Update.ACTION_CODE, "tag_comment"); update.setValue(Update.USER_ID, Task.USER_ID_SELF); - update.setValue(Update.TAGS, "," + tagData.getValue(TagData.REMOTE_ID) + ","); + update.setValue(Update.TAGS, "," + tagData.getValue(TagData.UUID) + ","); update.setValue(Update.TAGS_LOCAL, "," + tagData.getId() + ","); update.setValue(Update.CREATION_DATE, DateUtilities.now()); update.setValue(Update.TARGET_NAME, tagData.getValue(TagData.NAME)); @@ -134,8 +135,8 @@ public class TagCommentsFragment extends CommentsFragment { @Override protected void setLastViewed() { - if(tagData != null && tagData.getValue(TagData.REMOTE_ID) > 0) { - Preferences.setLong(UPDATES_LAST_VIEWED + tagData.getValue(TagData.REMOTE_ID), DateUtilities.now()); + if(tagData != null && RemoteModel.isValidUuid(tagData.getValue(TagData.UUID))) { + Preferences.setLong(UPDATES_LAST_VIEWED + tagData.getValue(TagData.UUID), DateUtilities.now()); Activity activity = getActivity(); if (activity instanceof TaskListActivity) ((TaskListActivity) activity).setCommentsCount(0); diff --git a/astrid/plugin-src/com/todoroo/astrid/actfm/TaskCommentsFragment.java b/astrid/plugin-src/com/todoroo/astrid/actfm/TaskCommentsFragment.java index a2ee6e3a5..2a94a4a31 100644 --- a/astrid/plugin-src/com/todoroo/astrid/actfm/TaskCommentsFragment.java +++ b/astrid/plugin-src/com/todoroo/astrid/actfm/TaskCommentsFragment.java @@ -55,11 +55,11 @@ public class TaskCommentsFragment extends CommentsFragment { @Override protected Cursor getCursor() { - if (!task.containsNonNullValue(Task.REMOTE_ID)) + if (!task.containsNonNullValue(Task.UUID)) return updateDao.query(Query.select(Update.PROPERTIES).where(Update.TASK_LOCAL.eq(task.getId())).orderBy(Order.desc(Update.CREATION_DATE))); else return updateDao.query(Query.select(Update.PROPERTIES).where(Criterion.or( - Update.TASK.eq(task.getValue(Task.REMOTE_ID)), Update.TASK_LOCAL.eq(task.getId()))).orderBy(Order.desc(Update.CREATION_DATE))); + Update.TASK.eq(task.getValue(Task.UUID)), Update.TASK_LOCAL.eq(task.getId()))).orderBy(Order.desc(Update.CREATION_DATE))); } @Override @@ -79,7 +79,8 @@ public class TaskCommentsFragment extends CommentsFragment { @Override protected void performFetch(boolean manual, Runnable done) { - actFmSyncService.fetchUpdatesForTask(task, manual, done); + done.run(); +// actFmSyncService.fetchUpdatesForTask(task, manual, done); } @Override @@ -88,7 +89,7 @@ public class TaskCommentsFragment extends CommentsFragment { update.setValue(Update.MESSAGE, addCommentField.getText().toString()); update.setValue(Update.ACTION_CODE, UpdateAdapter.UPDATE_TASK_COMMENT); update.setValue(Update.USER_ID, Task.USER_ID_SELF); - if (task.containsNonNullValue(Task.REMOTE_ID)) + if (task.containsNonNullValue(Task.UUID)) update.setValue(Update.TASK_UUID, task.getValue(Task.UUID)); update.setValue(Update.TASK_LOCAL, task.getId()); update.setValue(Update.CREATION_DATE, DateUtilities.now()); diff --git a/astrid/plugin-src/com/todoroo/astrid/actfm/sync/ActFmDataService.java b/astrid/plugin-src/com/todoroo/astrid/actfm/sync/ActFmDataService.java index 51fe30892..3b74034d3 100644 --- a/astrid/plugin-src/com/todoroo/astrid/actfm/sync/ActFmDataService.java +++ b/astrid/plugin-src/com/todoroo/astrid/actfm/sync/ActFmDataService.java @@ -10,7 +10,6 @@ import org.json.JSONObject; import android.content.Context; -import com.todoroo.andlib.data.Property; import com.todoroo.andlib.data.TodorooCursor; import com.todoroo.andlib.service.Autowired; import com.todoroo.andlib.service.ContextManager; @@ -20,9 +19,9 @@ import com.todoroo.andlib.sql.Functions; import com.todoroo.andlib.sql.Join; import com.todoroo.andlib.sql.Query; import com.todoroo.astrid.dao.TaskDao; -import com.todoroo.astrid.dao.TaskDao.TaskCriteria; import com.todoroo.astrid.dao.UserDao; import com.todoroo.astrid.data.Metadata; +import com.todoroo.astrid.data.RemoteModel; import com.todoroo.astrid.data.TagData; import com.todoroo.astrid.data.Task; import com.todoroo.astrid.service.MetadataService; @@ -57,32 +56,6 @@ public final class ActFmDataService { // --- task and metadata methods - /** - * Currently, this method does nothing, there is an alternate method to create tasks - * @param properties - * @return - */ - public TodorooCursor getLocallyCreated(Property[] properties) { - return taskDao.query(Query.select(properties).where(Criterion.and(TaskCriteria.isActive(), - Task.REMOTE_ID.isNull()))); - } - - /** - * Gets tasks that were modified since last sync - * @param properties - * @return null if never sync'd - */ - public TodorooCursor getLocallyUpdated(Property[] properties) { - long lastSyncDate = actFmPreferenceService.getLastSyncDate(); - if(lastSyncDate == 0) - return taskDao.query(Query.select(properties).where(Criterion.none)); - return - taskDao.query(Query.select(properties). - where(Criterion.and(Task.REMOTE_ID.isNotNull(), - Task.MODIFICATION_DATE.gt(lastSyncDate), - Task.MODIFICATION_DATE.gt(Task.LAST_SYNC))).groupBy(Task.ID)); - } - /** * Save / Merge JSON tagData * @param tagObject @@ -91,8 +64,8 @@ public final class ActFmDataService { @SuppressWarnings("nls") public void saveTagData(JSONObject tagObject) throws JSONException { TodorooCursor cursor = tagDataService.query(Query.select(TagData.PROPERTIES).where( - Criterion.or(TagData.REMOTE_ID.eq(tagObject.get("id")), - Criterion.and(TagData.REMOTE_ID.eq(0), + Criterion.or(TagData.UUID.eq(tagObject.get("id")), + Criterion.and(TagData.UUID.eq(RemoteModel.NO_UUID), TagData.NAME.eqCaseInsensitive(tagObject.getString("name")))))); try { cursor.moveToNext(); @@ -122,7 +95,7 @@ public final class ActFmDataService { @SuppressWarnings("nls") public void saveFeaturedList(JSONObject featObject) throws JSONException { TodorooCursor cursor = tagDataService.query(Query.select(TagData.PROPERTIES).where( - Criterion.and(Functions.bitwiseAnd(TagData.FLAGS, TagData.FLAG_FEATURED).gt(0), TagData.REMOTE_ID.eq(featObject.get("id"))))); + Criterion.and(Functions.bitwiseAnd(TagData.FLAGS, TagData.FLAG_FEATURED).gt(0), TagData.UUID.eq(featObject.get("id"))))); try { cursor.moveToNext(); TagData tagData = new TagData(); 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 5b06c0eb2..b34ec2bb7 100644 --- a/astrid/plugin-src/com/todoroo/astrid/actfm/sync/ActFmSyncService.java +++ b/astrid/plugin-src/com/todoroo/astrid/actfm/sync/ActFmSyncService.java @@ -33,7 +33,6 @@ import android.text.TextUtils; import android.util.Log; import com.timsu.astrid.GCMIntentService; -import com.timsu.astrid.R; import com.todoroo.andlib.data.AbstractModel; import com.todoroo.andlib.data.DatabaseDao; import com.todoroo.andlib.data.DatabaseDao.ModelUpdateListener; @@ -45,7 +44,6 @@ import com.todoroo.andlib.service.DependencyInjectionService; import com.todoroo.andlib.sql.Criterion; import com.todoroo.andlib.sql.Functions; import com.todoroo.andlib.sql.Join; -import com.todoroo.andlib.sql.Order; import com.todoroo.andlib.sql.Query; import com.todoroo.andlib.utility.AndroidUtilities; import com.todoroo.andlib.utility.DateUtilities; @@ -63,7 +61,6 @@ import com.todoroo.astrid.data.RemoteModel; import com.todoroo.astrid.data.SyncFlags; import com.todoroo.astrid.data.TagData; import com.todoroo.astrid.data.Task; -import com.todoroo.astrid.data.TaskApiDao; import com.todoroo.astrid.data.Update; import com.todoroo.astrid.data.User; import com.todoroo.astrid.files.FileMetadata; @@ -76,10 +73,8 @@ import com.todoroo.astrid.service.TaskService; import com.todoroo.astrid.service.abtesting.ABTestEventReportingService; import com.todoroo.astrid.subtasks.SubtasksHelper; import com.todoroo.astrid.sync.SyncV2Provider.SyncExceptionHandler; -import com.todoroo.astrid.tags.TagService; import com.todoroo.astrid.tags.TaskToTagMetadata; import com.todoroo.astrid.tags.reusable.FeaturedListFilterExposer; -import com.todoroo.astrid.utility.Flags; /** * Service for synchronizing data on Astrid.com server with local. @@ -152,7 +147,7 @@ public final class ActFmSyncService { return; final ContentValues setValues = model.getSetValues(); if(setValues == null || !checkForToken() || - setValues.containsKey(RemoteModel.REMOTE_ID_PROPERTY_NAME)) + setValues.containsKey(RemoteModel.UUID_PROPERTY_NAME)) return; if(completedRepeatingTask(model)) return; @@ -188,7 +183,7 @@ public final class ActFmSyncService { if (actFmPreferenceService.isOngoing()) return; final ContentValues setValues = model.getSetValues(); - if(setValues == null || !checkForToken() || model.getValue(Update.REMOTE_ID) > 0) + if(setValues == null || !checkForToken() || RemoteModel.isValidUuid(model.getValue(Update.UUID))) return; new Thread(new Runnable() { @@ -208,7 +203,7 @@ public final class ActFmSyncService { if (actFmPreferenceService.isOngoing()) return; final ContentValues setValues = model.getSetValues(); - if(setValues == null || !checkForToken() || setValues.containsKey(RemoteModel.REMOTE_ID_PROPERTY_NAME)) + if(setValues == null || !checkForToken() || setValues.containsKey(RemoteModel.UUID_PROPERTY_NAME)) return; new Thread(new Runnable() { @@ -276,7 +271,7 @@ public final class ActFmSyncService { Object id = pushOrderQueue.remove(0); if (id instanceof Long) { Long tagDataId = (Long) id; - TagData td = tagDataService.fetchById(tagDataId, TagData.ID, TagData.REMOTE_ID, TagData.TAG_ORDERING); + TagData td = tagDataService.fetchById(tagDataId, TagData.ID, TagData.UUID, TagData.TAG_ORDERING); if (td != null) { pushTagOrdering(td); } @@ -342,7 +337,7 @@ public final class ActFmSyncService { result = actFmInvoker.invoke("comment_add", params.toArray(new Object[params.size()])); else result = actFmInvoker.post("comment_add", picture, params.toArray(new Object[params.size()])); - update.setValue(Update.REMOTE_ID, result.optLong("id")); + update.setValue(Update.UUID, Long.toString(result.optLong("id"))); ImageDiskCache imageCache = ImageDiskCache.getInstance(); //TODO figure out a way to replace local image files with the url String commentPicture = result.optString("picture"); @@ -370,71 +365,71 @@ public final class ActFmSyncService { * Synchronize with server when data changes */ public void pushTaskOnSave(Task task, ContentValues values) { - Task taskForRemote = taskService.fetchById(task.getId(), Task.REMOTE_ID, Task.CREATION_DATE); - - long remoteId = 0; - if(task.containsNonNullValue(Task.REMOTE_ID)) { - remoteId = task.getValue(Task.REMOTE_ID); - } else { - if(taskForRemote == null) - return; - if(taskForRemote.containsNonNullValue(Task.REMOTE_ID)) - remoteId = taskForRemote.getValue(Task.REMOTE_ID); - } - - long creationDate; - if (task.containsValue(Task.CREATION_DATE)) { - creationDate = task.getValue(Task.CREATION_DATE) / 1000L; // In seconds - } else { - if (taskForRemote == null) - return; - creationDate = taskForRemote.getValue(Task.CREATION_DATE) / 1000L; // In seconds - } - - boolean newlyCreated = remoteId == 0; - - ArrayList params = new ArrayList(); - - // prevent creation of certain types of tasks - if(newlyCreated) { - if(task.getValue(Task.TITLE).length() == 0) - return; - if(TaskApiDao.insignificantChange(values)) - return; - values = task.getMergedValues(); - } - - if(values.containsKey(Task.TITLE.name)) { - params.add("title"); params.add(task.getValue(Task.TITLE)); - } - if(values.containsKey(Task.DUE_DATE.name)) { - params.add("due"); params.add(task.getValue(Task.DUE_DATE) / 1000L); - params.add("has_due_time"); params.add(task.hasDueTime() ? 1 : 0); - } - if(values.containsKey(Task.NOTES.name)) { - params.add("notes"); params.add(task.getValue(Task.NOTES)); - } - if(values.containsKey(Task.DELETION_DATE.name)) { - params.add("deleted_at"); params.add(task.getValue(Task.DELETION_DATE) / 1000L); - } - if(task.getTransitory(TaskService.TRANS_REPEAT_COMPLETE) != null) { - params.add("completed"); params.add(DateUtilities.now() / 1000L); - } else if(values.containsKey(Task.COMPLETION_DATE.name)) { - params.add("completed"); params.add(task.getValue(Task.COMPLETION_DATE) / 1000L); - } - if(values.containsKey(Task.IMPORTANCE.name)) { - params.add("importance"); params.add(task.getValue(Task.IMPORTANCE)); - } - if(values.containsKey(Task.RECURRENCE.name) || - (values.containsKey(Task.FLAGS.name) && task.containsNonNullValue(Task.RECURRENCE))) { - String recurrence = task.getValue(Task.RECURRENCE); - if(!TextUtils.isEmpty(recurrence) && task.getFlag(Task.FLAGS, Task.FLAG_REPEAT_AFTER_COMPLETION)) - recurrence = recurrence + ";FROM=COMPLETION"; - params.add("repeat"); params.add(recurrence); - } - - - boolean sharing = false; +// Task taskForRemote = taskService.fetchById(task.getId(), Task.UUID, Task.CREATION_DATE); +// +// long remoteId = 0; +// if(task.containsNonNullValue(Task.UUID)) { +// remoteId = task.getValue(Task.UUID); +// } else { +// if(taskForRemote == null) +// return; +// if(taskForRemote.containsNonNullValue(Task.UUID)) +// remoteId = taskForRemote.getValue(Task.UUID); +// } +// +// long creationDate; +// if (task.containsValue(Task.CREATION_DATE)) { +// creationDate = task.getValue(Task.CREATION_DATE) / 1000L; // In seconds +// } else { +// if (taskForRemote == null) +// return; +// creationDate = taskForRemote.getValue(Task.CREATION_DATE) / 1000L; // In seconds +// } +// +// boolean newlyCreated = remoteId == 0; +// +// ArrayList params = new ArrayList(); +// +// // prevent creation of certain types of tasks +// if(newlyCreated) { +// if(task.getValue(Task.TITLE).length() == 0) +// return; +// if(TaskApiDao.insignificantChange(values)) +// return; +// values = task.getMergedValues(); +// } +// +// if(values.containsKey(Task.TITLE.name)) { +// params.add("title"); params.add(task.getValue(Task.TITLE)); +// } +// if(values.containsKey(Task.DUE_DATE.name)) { +// params.add("due"); params.add(task.getValue(Task.DUE_DATE) / 1000L); +// params.add("has_due_time"); params.add(task.hasDueTime() ? 1 : 0); +// } +// if(values.containsKey(Task.NOTES.name)) { +// params.add("notes"); params.add(task.getValue(Task.NOTES)); +// } +// if(values.containsKey(Task.DELETION_DATE.name)) { +// params.add("deleted_at"); params.add(task.getValue(Task.DELETION_DATE) / 1000L); +// } +// if(task.getTransitory(TaskService.TRANS_REPEAT_COMPLETE) != null) { +// params.add("completed"); params.add(DateUtilities.now() / 1000L); +// } else if(values.containsKey(Task.COMPLETION_DATE.name)) { +// params.add("completed"); params.add(task.getValue(Task.COMPLETION_DATE) / 1000L); +// } +// if(values.containsKey(Task.IMPORTANCE.name)) { +// params.add("importance"); params.add(task.getValue(Task.IMPORTANCE)); +// } +// if(values.containsKey(Task.RECURRENCE.name) || +// (values.containsKey(Task.FLAGS.name) && task.containsNonNullValue(Task.RECURRENCE))) { +// String recurrence = task.getValue(Task.RECURRENCE); +// if(!TextUtils.isEmpty(recurrence) && task.getFlag(Task.FLAGS, Task.FLAG_REPEAT_AFTER_COMPLETION)) +// recurrence = recurrence + ";FROM=COMPLETION"; +// params.add("repeat"); params.add(recurrence); +// } +// +// +// boolean sharing = false; // if(values.containsKey(Task.USER_ID.name) && task.getTransitory(TaskService.TRANS_ASSIGNED) != null) { // if(task.getValue(Task.USER_ID) == Task.USER_ID_EMAIL) { // try { @@ -478,67 +473,67 @@ public final class ActFmSyncService { // } // sharing = true; // } - - if (sharing) { - addAbTestEventInfo(params); - } - - if(Flags.checkAndClear(Flags.TAGS_CHANGED) || newlyCreated) { - TodorooCursor cursor = TagService.getInstance().getTags(task.getId(), false); - try { - if(cursor.getCount() == 0) { - params.add("tags"); - params.add(""); - } else { - Metadata metadata = new Metadata(); - for(cursor.moveToFirst(); !cursor.isAfterLast(); cursor.moveToNext()) { - metadata.readFromCursor(cursor); - if(metadata.containsNonNullValue(TaskToTagMetadata.TAG_UUID) && - !RemoteModel.NO_UUID.equals(metadata.getValue(TaskToTagMetadata.TAG_UUID))) { - params.add("tag_ids[]"); - params.add(metadata.getValue(TaskToTagMetadata.TAG_UUID)); - } else { - params.add("tags[]"); - params.add(metadata.getValue(TaskToTagMetadata.TAG_NAME)); - } - } - } - } finally { - cursor.close(); - } - } - - if(params.size() == 0 || !checkForToken()) - return; - - - if(!newlyCreated) { - params.add("id"); params.add(remoteId); - } else if(!values.containsKey(Task.TITLE.name)) { - pushTask(task.getId()); - return; - } else { - params.add("created_at"); params.add(creationDate); - } - - try { - params.add("token"); params.add(token); - JSONObject result = actFmInvoker.invoke("task_save", params.toArray(new Object[params.size()])); - ArrayList metadata = new ArrayList(); - JsonHelper.taskFromJson(result, task, metadata); - } catch (JSONException e) { - handleException("task-save-json", e); - } catch (IOException e) { - if (notPermanentError(e)) { - addFailedPush(new FailedPush(PUSH_TYPE_TASK, task.getId())); - } else { - handleException("task-save-io", e); - task.setValue(Task.LAST_SYNC, DateUtilities.now() + 1000L); - } - } - - task.putTransitory(SyncFlags.ACTFM_SUPPRESS_SYNC, true); - taskDao.saveExistingWithSqlConstraintCheck(task); +// +// if (sharing) { +// addAbTestEventInfo(params); +// } +// +// if(Flags.checkAndClear(Flags.TAGS_CHANGED) || newlyCreated) { +// TodorooCursor cursor = TagService.getInstance().getTags(task.getId(), false); +// try { +// if(cursor.getCount() == 0) { +// params.add("tags"); +// params.add(""); +// } else { +// Metadata metadata = new Metadata(); +// for(cursor.moveToFirst(); !cursor.isAfterLast(); cursor.moveToNext()) { +// metadata.readFromCursor(cursor); +// if(metadata.containsNonNullValue(TaskToTagMetadata.TAG_UUID) && +// !RemoteModel.NO_UUID.equals(metadata.getValue(TaskToTagMetadata.TAG_UUID))) { +// params.add("tag_ids[]"); +// params.add(metadata.getValue(TaskToTagMetadata.TAG_UUID)); +// } else { +// params.add("tags[]"); +// params.add(metadata.getValue(TaskToTagMetadata.TAG_NAME)); +// } +// } +// } +// } finally { +// cursor.close(); +// } +// } +// +// if(params.size() == 0 || !checkForToken()) +// return; +// +// +// if(!newlyCreated) { +// params.add("id"); params.add(remoteId); +// } else if(!values.containsKey(Task.TITLE.name)) { +// pushTask(task.getId()); +// return; +// } else { +// params.add("created_at"); params.add(creationDate); +// } +// +// try { +// params.add("token"); params.add(token); +// JSONObject result = actFmInvoker.invoke("task_save", params.toArray(new Object[params.size()])); +// ArrayList metadata = new ArrayList(); +// JsonHelper.taskFromJson(result, task, metadata); +// } catch (JSONException e) { +// handleException("task-save-json", e); +// } catch (IOException e) { +// if (notPermanentError(e)) { +// addFailedPush(new FailedPush(PUSH_TYPE_TASK, task.getId())); +// } else { +// handleException("task-save-io", e); +// task.setValue(Task.LAST_SYNC, DateUtilities.now() + 1000L); +// } +// } +// +// task.putTransitory(SyncFlags.ACTFM_SUPPRESS_SYNC, true); +// taskDao.saveExistingWithSqlConstraintCheck(task); } private void addAbTestEventInfo(List params) { @@ -646,8 +641,8 @@ public final class ActFmSyncService { if (!checkForToken()) return; - Long remoteId = tagData.getValue(TagData.REMOTE_ID); - if (remoteId == null || remoteId <= 0) + String remoteId = tagData.getValue(TagData.UUID); + if (!RemoteModel.isValidUuid(remoteId)) return; // Make sure that all tasks are pushed before attempting to sync tag ordering @@ -717,11 +712,11 @@ public final class ActFmSyncService { if (!checkForToken()) return; - if (!(tagData.containsNonNullValue(TagData.REMOTE_ID) && tagData.getValue(TagData.REMOTE_ID) > 0)) + if (!RemoteModel.isValidUuid(tagData.getUuid())) return; try { - JSONObject result = actFmInvoker.invoke("list_order", "tag_id", tagData.getValue(TagData.REMOTE_ID), "token", token); + JSONObject result = actFmInvoker.invoke("list_order", "tag_id", tagData.getValue(TagData.UUID), "token", token); JSONArray ordering = result.optJSONArray("order"); if (ordering == null) return; @@ -748,97 +743,97 @@ public final class ActFmSyncService { * @param setValues */ public void pushTagDataOnSave(TagData tagData, ContentValues values) { - long remoteId; - if(tagData.containsNonNullValue(TagData.REMOTE_ID)) - remoteId = tagData.getValue(TagData.REMOTE_ID); - else { - TagData forRemote = tagDataService.fetchById(tagData.getId(), TagData.REMOTE_ID); - if(forRemote == null) - return; - remoteId = forRemote.getValue(TagData.REMOTE_ID); - } - boolean newlyCreated = remoteId == 0; - - ArrayList params = new ArrayList(); - - if(values.containsKey(TagData.NAME.name)) { - params.add("name"); params.add(tagData.getValue(TagData.NAME)); - } - - if(values.containsKey(TagData.DELETION_DATE.name)) { - params.add("deleted_at"); params.add(tagData.getValue(TagData.DELETION_DATE) / 1000L); - } - - if(values.containsKey(TagData.TAG_DESCRIPTION.name)) { - params.add("description"); params.add(tagData.getValue(TagData.TAG_DESCRIPTION)); - } - - if(values.containsKey(TagData.MEMBERS.name)) { - params.add("members"); - try { - JSONArray members = new JSONArray(tagData.getValue(TagData.MEMBERS)); - if(members.length() == 0) - params.add(""); - else { - ArrayList array = new ArrayList(members.length()); - for(int i = 0; i < members.length(); i++) { - JSONObject person = members.getJSONObject(i); - if(person.has("id")) - array.add(person.getLong("id")); - else { - if(person.has("name")) - array.add(person.getString("name") + " <" + - person.getString("email") + ">"); - else - array.add(person.getString("email")); - } - } - params.add(array); - if (members.length() > 0) - addAbTestEventInfo(params); - } - - - } catch (JSONException e) { - throw new RuntimeException(e); - } - } - - if(values.containsKey(TagData.FLAGS.name)) { - params.add("is_silent"); - boolean silenced = tagData.getFlag(TagData.FLAGS, TagData.FLAG_SILENT); - params.add(silenced ? "1" : "0"); - } - - if(params.size() == 0 || !checkForToken()) - return; - - if(!newlyCreated) { - params.add("id"); params.add(remoteId); - } - - try { - params.add("token"); params.add(token); - JSONObject result = actFmInvoker.invoke("tag_save", params.toArray(new Object[params.size()])); - if(newlyCreated) { - tagData.setValue(TagData.REMOTE_ID, result.optLong("id")); - tagData.putTransitory(SyncFlags.ACTFM_SUPPRESS_SYNC, true); - tagDataDao.saveExisting(tagData); - } - } catch (ActFmServiceException e) { - handleException("tag-save", e); - - try { - fetchTag(tagData); - } catch (IOException e1) { - handleException("refetch-error-tag", e); - } catch (JSONException e1) { - handleException("refetch-error-tag", e); - } - } catch (IOException e) { - addFailedPush(new FailedPush(PUSH_TYPE_TAG, tagData.getId())); - handleException("tag-save", e); - } +// long remoteId; +// if(tagData.containsNonNullValue(TagData.UUID)) +// remoteId = tagData.getValue(TagData.UUID); +// else { +// TagData forRemote = tagDataService.fetchById(tagData.getId(), TagData.UUID); +// if(forRemote == null) +// return; +// remoteId = forRemote.getValue(TagData.UUID); +// } +// boolean newlyCreated = remoteId == 0; +// +// ArrayList params = new ArrayList(); +// +// if(values.containsKey(TagData.NAME.name)) { +// params.add("name"); params.add(tagData.getValue(TagData.NAME)); +// } +// +// if(values.containsKey(TagData.DELETION_DATE.name)) { +// params.add("deleted_at"); params.add(tagData.getValue(TagData.DELETION_DATE) / 1000L); +// } +// +// if(values.containsKey(TagData.TAG_DESCRIPTION.name)) { +// params.add("description"); params.add(tagData.getValue(TagData.TAG_DESCRIPTION)); +// } +// +// if(values.containsKey(TagData.MEMBERS.name)) { +// params.add("members"); +// try { +// JSONArray members = new JSONArray(tagData.getValue(TagData.MEMBERS)); +// if(members.length() == 0) +// params.add(""); +// else { +// ArrayList array = new ArrayList(members.length()); +// for(int i = 0; i < members.length(); i++) { +// JSONObject person = members.getJSONObject(i); +// if(person.has("id")) +// array.add(person.getLong("id")); +// else { +// if(person.has("name")) +// array.add(person.getString("name") + " <" + +// person.getString("email") + ">"); +// else +// array.add(person.getString("email")); +// } +// } +// params.add(array); +// if (members.length() > 0) +// addAbTestEventInfo(params); +// } +// +// +// } catch (JSONException e) { +// throw new RuntimeException(e); +// } +// } +// +// if(values.containsKey(TagData.FLAGS.name)) { +// params.add("is_silent"); +// boolean silenced = tagData.getFlag(TagData.FLAGS, TagData.FLAG_SILENT); +// params.add(silenced ? "1" : "0"); +// } +// +// if(params.size() == 0 || !checkForToken()) +// return; +// +// if(!newlyCreated) { +// params.add("id"); params.add(remoteId); +// } +// +// try { +// params.add("token"); params.add(token); +// JSONObject result = actFmInvoker.invoke("tag_save", params.toArray(new Object[params.size()])); +// if(newlyCreated) { +// tagData.setValue(TagData.UUID, result.optLong("id")); +// tagData.putTransitory(SyncFlags.ACTFM_SUPPRESS_SYNC, true); +// tagDataDao.saveExisting(tagData); +// } +// } catch (ActFmServiceException e) { +// handleException("tag-save", e); +// +// try { +// fetchTag(tagData); +// } catch (IOException e1) { +// handleException("refetch-error-tag", e); +// } catch (JSONException e1) { +// handleException("refetch-error-tag", e); +// } +// } catch (IOException e) { +// addFailedPush(new FailedPush(PUSH_TYPE_TAG, tagData.getId())); +// handleException("tag-save", e); +// } } public void pushAttachmentInBackground(final Metadata fileMetadata) { @@ -850,13 +845,13 @@ public final class ActFmSyncService { waitUntilEmpty.close(); taskPushThreads.incrementAndGet(); try { - Task t = taskDao.fetch(fileMetadata.getValue(Metadata.TASK), Task.REMOTE_ID); - if (t == null || t.getValue(Task.REMOTE_ID) == null || t.getValue(Task.REMOTE_ID) <= 0) + Task t = taskDao.fetch(fileMetadata.getValue(Metadata.TASK), Task.UUID); + if (t == null || !RemoteModel.isValidUuid(t.getUuid())) return; if (fileMetadata.getValue(FileMetadata.DELETION_DATE) > 0) deleteAttachment(fileMetadata); else - pushAttachment(t.getValue(Task.REMOTE_ID), fileMetadata); + pushAttachment(t.getValue(Task.UUID), fileMetadata); } finally { if (taskPushThreads.decrementAndGet() == 0) { waitUntilEmpty.open(); @@ -871,11 +866,11 @@ public final class ActFmSyncService { * @param remoteTaskId * @param fileMetadata */ - public void pushAttachment(long remoteTaskId, Metadata fileMetadata) { + public void pushAttachment(String remoteTaskId, Metadata fileMetadata) { if (!ActFmPreferenceService.isPremiumUser()) return; - if (!fileMetadata.containsNonNullValue(FileMetadata.FILE_PATH) || remoteTaskId <= 0) + if (!fileMetadata.containsNonNullValue(FileMetadata.FILE_PATH) || !RemoteModel.isValidUuid(remoteTaskId)) return; File f = new File(fileMetadata.getValue(FileMetadata.FILE_PATH)); @@ -940,33 +935,33 @@ public final class ActFmSyncService { * Fetch tagData listing asynchronously */ public void fetchTagDataDashboard(boolean manual, final Runnable done) { - invokeFetchList("goal", manual, null, new ListItemProcessor() { - @Override - protected void mergeAndSave(JSONArray list, HashMap locals, long serverTime) throws JSONException { - TagData remote = new TagData(); - for(int i = 0; i < list.length(); i++) { - JSONObject item = list.getJSONObject(i); - readIds(locals, item, remote); - JsonHelper.tagFromJson(item, remote); - remote.putTransitory(SyncFlags.ACTFM_SUPPRESS_SYNC, true); - tagDataService.save(remote); - } - } - - @Override - protected HashMap getLocalModels() { - TodorooCursor cursor = tagDataService.query(Query.select(TagData.ID, - TagData.REMOTE_ID).where(TagData.REMOTE_ID.in(remoteIds)).orderBy( - Order.asc(TagData.REMOTE_ID))); - return cursorToMap(cursor, taskDao, TagData.REMOTE_ID, TagData.ID); - } - - @Override - protected Class typeClass() { - return TagData.class; - } - - }, done, "goals"); +// invokeFetchList("goal", manual, null, new ListItemProcessor() { +// @Override +// protected void mergeAndSave(JSONArray list, HashMap locals, long serverTime) throws JSONException { +// TagData remote = new TagData(); +// for(int i = 0; i < list.length(); i++) { +// JSONObject item = list.getJSONObject(i); +// readIds(locals, item, remote); +// JsonHelper.tagFromJson(item, remote); +// remote.putTransitory(SyncFlags.ACTFM_SUPPRESS_SYNC, true); +// tagDataService.save(remote); +// } +// } +// +// @Override +// protected HashMap getLocalModels() { +// TodorooCursor cursor = tagDataService.query(Query.select(TagData.ID, +// TagData.UUID).where(TagData.UUID.in(remoteIds)).orderBy( +// Order.asc(TagData.UUID))); +// return cursorToMap(cursor, taskDao, TagData.UUID, TagData.ID); +// } +// +// @Override +// protected Class typeClass() { +// return TagData.class; +// } +// +// }, done, "goals"); } /** @@ -976,22 +971,22 @@ public final class ActFmSyncService { * @throws JSONException */ public void fetchTag(final TagData tagData) throws IOException, JSONException { - JSONObject result; - if(!checkForToken()) - return; - - if(tagData.getValue(TagData.REMOTE_ID) == 0) { - if(TextUtils.isEmpty(tagData.getValue(TagData.NAME))) - return; - result = actFmInvoker.invoke("tag_show", "name", tagData.getValue(TagData.NAME), - "token", token); - } else - result = actFmInvoker.invoke("tag_show", "id", tagData.getValue(TagData.REMOTE_ID), - "token", token); - - JsonHelper.tagFromJson(result, tagData); - tagData.putTransitory(SyncFlags.ACTFM_SUPPRESS_SYNC, true); - tagDataService.save(tagData); +// JSONObject result; +// if(!checkForToken()) +// return; +// +// if(tagData.getValue(TagData.UUID) == 0) { +// if(TextUtils.isEmpty(tagData.getValue(TagData.NAME))) +// return; +// result = actFmInvoker.invoke("tag_show", "name", tagData.getValue(TagData.NAME), +// "token", token); +// } else +// result = actFmInvoker.invoke("tag_show", "id", tagData.getValue(TagData.UUID), +// "token", token); +// +// JsonHelper.tagFromJson(result, tagData); +// tagData.putTransitory(SyncFlags.ACTFM_SUPPRESS_SYNC, true); +// tagDataService.save(tagData); } /** @@ -1001,21 +996,21 @@ public final class ActFmSyncService { * @throws JSONException */ public void fetchTask(Task task) throws IOException, JSONException { - JSONObject result; - if(!checkForToken()) - return; - - if(task.getValue(TagData.REMOTE_ID) == 0) - return; - result = actFmInvoker.invoke("task_show", "id", task.getValue(Task.REMOTE_ID), - "token", token); - - ArrayList metadata = new ArrayList(); - JsonHelper.taskFromJson(result, task, metadata); - task.putTransitory(SyncFlags.ACTFM_SUPPRESS_SYNC, true); - taskService.save(task); - metadataService.synchronizeMetadata(task.getId(), metadata, Metadata.KEY.eq(TaskToTagMetadata.KEY), false); - synchronizeAttachments(result, task); +// JSONObject result; +// if(!checkForToken()) +// return; +// +// if(task.getValue(TagData.UUID) == 0) +// return; +// result = actFmInvoker.invoke("task_show", "id", task.getValue(Task.UUID), +// "token", token); +// +// ArrayList metadata = new ArrayList(); +// JsonHelper.taskFromJson(result, task, metadata); +// task.putTransitory(SyncFlags.ACTFM_SUPPRESS_SYNC, true); +// taskService.save(task); +// metadataService.synchronizeMetadata(task.getId(), metadata, Metadata.KEY.eq(TaskToTagMetadata.KEY), false); +// synchronizeAttachments(result, task); } /** @@ -1041,7 +1036,7 @@ public final class ActFmSyncService { Long[] remoteIdArray = remoteIds.toArray(new Long[remoteIds.size()]); tagDataService.deleteWhere(Criterion.and( Criterion.not(Functions.bitwiseAnd(TagData.FLAGS, TagData.FLAG_FEATURED).gt(0)), - Criterion.not(TagData.REMOTE_ID.in(remoteIdArray)))); + Criterion.not(TagData.UUID.in(remoteIdArray)))); } return result.optInt("time", 0); @@ -1072,57 +1067,57 @@ public final class ActFmSyncService { // } } - public int fetchUsers() throws JSONException, IOException { - if (!checkForToken()) - return 0; - - JSONObject result = actFmInvoker.invoke("user_list", - "token", token); - JSONObject suggestedResult = actFmInvoker.invoke("suggested_user_list", - "token", token); - JSONArray users = result.getJSONArray("list"); - JSONArray suggestedUsers = suggestedResult.getJSONArray("list"); - - HashSet ids = new HashSet(); - if (users.length() > 0 || suggestedUsers.length() > 0) - Preferences.setBoolean(R.string.p_show_friends_view, true); - - saveUsers(users, ids); - saveUsers(suggestedUsers, ids); - - Long[] idsArray = ids.toArray(new Long[ids.size()]); - actFmDataService.userDao.deleteWhere(Criterion.not(User.REMOTE_ID.in(idsArray))); - - return result.optInt("time", 0); - } - - public void pushUser(User model) { - if (TextUtils.isEmpty(model.getValue(User.PENDING_STATUS))) - return; - if (model.getValue(User.REMOTE_ID) == 0) - return; - if (!checkForToken()) - return; - - try { - ArrayList params = new ArrayList(); - params.add("token"); params.add(token); - params.add("id"); params.add(model.getValue(User.REMOTE_ID)); - params.add("status"); params.add(model.getValue(User.PENDING_STATUS)); - - JSONObject result = actFmInvoker.invoke("user_set_status", params.toArray(new Object[params.size()])); - if (result.optString("status").equals("success")) { - String newStatus = result.optString("friendship_status"); - if (!TextUtils.isEmpty(newStatus)) { - model.setValue(User.STATUS, newStatus); - model.setValue(User.PENDING_STATUS, ""); - userDao.saveExisting(model); - } - } - } catch (IOException e) { - handleException("user-status", e); - } - } +// public int fetchUsers() throws JSONException, IOException { +// if (!checkForToken()) +// return 0; +// +// JSONObject result = actFmInvoker.invoke("user_list", +// "token", token); +// JSONObject suggestedResult = actFmInvoker.invoke("suggested_user_list", +// "token", token); +// JSONArray users = result.getJSONArray("list"); +// JSONArray suggestedUsers = suggestedResult.getJSONArray("list"); +// +// HashSet ids = new HashSet(); +// if (users.length() > 0 || suggestedUsers.length() > 0) +// Preferences.setBoolean(R.string.p_show_friends_view, true); +// +// saveUsers(users, ids); +// saveUsers(suggestedUsers, ids); +// +// Long[] idsArray = ids.toArray(new Long[ids.size()]); +// actFmDataService.userDao.deleteWhere(Criterion.not(User.UUID.in(idsArray))); +// +// return result.optInt("time", 0); +// } + +// public void pushUser(User model) { +// if (TextUtils.isEmpty(model.getValue(User.PENDING_STATUS))) +// return; +// if (model.getValue(User.UUID) == 0) +// return; +// if (!checkForToken()) +// return; +// +// try { +// ArrayList params = new ArrayList(); +// params.add("token"); params.add(token); +// params.add("id"); params.add(model.getValue(User.UUID)); +// params.add("status"); params.add(model.getValue(User.PENDING_STATUS)); +// +// JSONObject result = actFmInvoker.invoke("user_set_status", params.toArray(new Object[params.size()])); +// if (result.optString("status").equals("success")) { +// String newStatus = result.optString("friendship_status"); +// if (!TextUtils.isEmpty(newStatus)) { +// model.setValue(User.STATUS, newStatus); +// model.setValue(User.PENDING_STATUS, ""); +// userDao.saveExisting(model); +// } +// } +// } catch (IOException e) { +// handleException("user-status", e); +// } +// } /** @@ -1146,56 +1141,56 @@ public final class ActFmSyncService { protected void deleteExtras(Long[] localIds) { // } - }, done, "tasks:" + tagData.getId(), "tag_id", tagData.getValue(TagData.REMOTE_ID)); + }, done, "tasks:" + tagData.getId(), "tag_id", tagData.getValue(TagData.UUID)); } public void fetchTasksForUser(final User user, final boolean manual, Runnable done) { invokeFetchList("task", manual, null, new TaskListItemProcessor(false), - done, "user_" + user.getId(), "user_id", user.getValue(User.REMOTE_ID)); + done, "user_" + user.getId(), "user_id", user.getValue(User.UUID)); } - /** - * Fetch updates for the given tagData asynchronously - * @param tagData - * @param manual - * @param done - */ - public void fetchUpdatesForTag(final TagData tagData, final boolean manual, Runnable done) { - if (tagData.getFlag(TagData.FLAGS, TagData.FLAG_FEATURED)) { - if (done != null) - done.run(); - return; - } - invokeFetchList("activity", manual, null, new UpdateListItemProcessor(), done, - "updates:" + tagData.getId(), "tag_id", tagData.getValue(TagData.REMOTE_ID)); - - pushQueuedUpdatesForTag(tagData); - } - - /** - * Fetch updates for the given task asynchronously - * @param task - * @param manual - * @param runnable - */ - public void fetchUpdatesForTask(final Task task, boolean manual, Runnable done) { - invokeFetchList("activity", manual, null, new UpdateListItemProcessor(), done, - "comments:" + task.getId(), "task_id", task.getValue(Task.REMOTE_ID)); - - pushQueuedUpdatesForTask(task); - } - - /** - * Fetch updates for the current user asynchronously - * @param manual - * @param done - */ - public void fetchPersonalUpdates(boolean manual, Runnable done) { - invokeFetchList("activity", manual, null, new UpdateListItemProcessor(), done, "personal"); - - pushAllQueuedUpdates(); - } +// /** +// * Fetch updates for the given tagData asynchronously +// * @param tagData +// * @param manual +// * @param done +// */ +// public void fetchUpdatesForTag(final TagData tagData, final boolean manual, Runnable done) { +// if (tagData.getFlag(TagData.FLAGS, TagData.FLAG_FEATURED)) { +// if (done != null) +// done.run(); +// return; +// } +// invokeFetchList("activity", manual, null, new UpdateListItemProcessor(), done, +// "updates:" + tagData.getId(), "tag_id", tagData.getValue(TagData.UUID)); +// +// pushQueuedUpdatesForTag(tagData); +// } +// +// /** +// * Fetch updates for the given task asynchronously +// * @param task +// * @param manual +// * @param runnable +// */ +// public void fetchUpdatesForTask(final Task task, boolean manual, Runnable done) { +// invokeFetchList("activity", manual, null, new UpdateListItemProcessor(), done, +// "comments:" + task.getId(), "task_id", task.getValue(Task.UUID)); +// +// pushQueuedUpdatesForTask(task); +// } +// +// /** +// * Fetch updates for the current user asynchronously +// * @param manual +// * @param done +// */ +// public void fetchPersonalUpdates(boolean manual, Runnable done) { +// invokeFetchList("activity", manual, null, new UpdateListItemProcessor(), done, "personal"); +// +// pushAllQueuedUpdates(); +// } public void updateUserSubscriptionStatus(Runnable onSuccess, Runnable onRecoverableError, Runnable onInvalidToken) { String purchaseToken = Preferences.getStringValue(BillingConstants.PREF_PURCHASE_TOKEN); @@ -1258,31 +1253,31 @@ public final class ActFmSyncService { } } - private void pushQueuedUpdatesForTag(TagData tagData) { - Criterion criterion = null; - if (tagData.getValue(TagData.REMOTE_ID) < 1) { - criterion = Criterion.and(Update.REMOTE_ID.eq(0), - Update.TAGS_LOCAL.like("%," + tagData.getId() + ",%")); - } - else { - criterion = Criterion.and(Update.REMOTE_ID.eq(0), - Criterion.or(Update.TAGS.like("%," + tagData.getValue(TagData.REMOTE_ID) + ",%"), - Update.TAGS_LOCAL.like("%," + tagData.getId() + ",%"))); - } - - - Update template = new Update(); - template.setValue(Update.TAGS, "," + tagData.getValue(TagData.REMOTE_ID) + ","); - updateDao.update(criterion, template); - - TodorooCursor cursor = updateDao.query(Query.select(Update.ID, Update.PICTURE).where(criterion)); - pushQueuedUpdates(cursor); - } +// private void pushQueuedUpdatesForTag(TagData tagData) { +// Criterion criterion = null; +// if (tagData.getValue(TagData.UUID) < 1) { +// criterion = Criterion.and(Update.UUID.eq(0), +// Update.TAGS_LOCAL.like("%," + tagData.getId() + ",%")); +// } +// else { +// criterion = Criterion.and(Update.UUID.eq(0), +// Criterion.or(Update.TAGS.like("%," + tagData.getValue(TagData.UUID) + ",%"), +// Update.TAGS_LOCAL.like("%," + tagData.getId() + ",%"))); +// } +// +// +// Update template = new Update(); +// template.setValue(Update.TAGS, "," + tagData.getValue(TagData.UUID) + ","); +// updateDao.update(criterion, template); +// +// TodorooCursor cursor = updateDao.query(Query.select(Update.ID, Update.PICTURE).where(criterion)); +// pushQueuedUpdates(cursor); +// } private void pushQueuedUpdatesForTask(Task task) { Criterion criterion = null; - if (task.containsNonNullValue(Task.REMOTE_ID)) { - criterion = Criterion.and(Update.REMOTE_ID.eq(0), + if (task.containsNonNullValue(Task.UUID)) { + criterion = Criterion.and(Update.UUID.eq(0), Criterion.or(Update.TASK_UUID.eq(task.getValue(Task.UUID)), Update.TASK_LOCAL.eq(task.getId()))); } else return; @@ -1296,7 +1291,7 @@ public final class ActFmSyncService { } private void pushAllQueuedUpdates() { - TodorooCursor cursor = updateDao.query(Query.select(Update.ID, Update.PICTURE).where(Update.REMOTE_ID.eq(0))); + TodorooCursor cursor = updateDao.query(Query.select(Update.ID, Update.PICTURE).where(Update.UUID.eq(0))); pushQueuedUpdates(cursor); } @@ -1326,37 +1321,37 @@ public final class ActFmSyncService { } } - private class UpdateListItemProcessor extends ListItemProcessor { - @Override - protected void mergeAndSave(JSONArray list, HashMap locals, long serverTime) throws JSONException { - Update remote = new Update(); - for(int i = 0; i < list.length(); i++) { - JSONObject item = list.getJSONObject(i); - readIds(locals, item, remote); - JsonHelper.updateFromJson(item, remote); - - remote.putTransitory(SyncFlags.ACTFM_SUPPRESS_SYNC, true); - if(remote.getId() == AbstractModel.NO_ID) - updateDao.createNew(remote); - else - updateDao.saveExisting(remote); - remote.clear(); - } - } - - @Override - protected HashMap getLocalModels() { - TodorooCursor cursor = updateDao.query(Query.select(Update.ID, - Update.REMOTE_ID).where(Update.REMOTE_ID.in(remoteIds)).orderBy( - Order.asc(Update.REMOTE_ID))); - return cursorToMap(cursor, updateDao, Update.REMOTE_ID, Update.ID); - } - - @Override - protected Class typeClass() { - return Update.class; - } - } +// private class UpdateListItemProcessor extends ListItemProcessor { +// @Override +// protected void mergeAndSave(JSONArray list, HashMap locals, long serverTime) throws JSONException { +// Update remote = new Update(); +// for(int i = 0; i < list.length(); i++) { +// JSONObject item = list.getJSONObject(i); +// readIds(locals, item, remote); +// JsonHelper.updateFromJson(item, remote); +// +// remote.putTransitory(SyncFlags.ACTFM_SUPPRESS_SYNC, true); +// if(remote.getId() == AbstractModel.NO_ID) +// updateDao.createNew(remote); +// else +// updateDao.saveExisting(remote); +// remote.clear(); +// } +// } +// +// @Override +// protected HashMap getLocalModels() { +// TodorooCursor cursor = updateDao.query(Query.select(Update.ID, +// Update.UUID).where(Update.UUID.in(remoteIds)).orderBy( +// Order.asc(Update.UUID))); +// return cursorToMap(cursor, updateDao, Update.UUID, Update.ID); +// } +// +// @Override +// protected Class typeClass() { +// return Update.class; +// } +// } /** * Update tag picture @@ -1433,13 +1428,13 @@ public final class ActFmSyncService { } protected void readIds(HashMap locals, JSONObject json, RemoteModel model) throws JSONException { - long remoteId = json.getLong("id"); - model.setValue(RemoteModel.REMOTE_ID_PROPERTY, remoteId); - if(locals.containsKey(remoteId)) { - model.setId(locals.remove(remoteId)); - } else { - model.clearValue(AbstractModel.ID_PROPERTY); - } +// long remoteId = json.getLong("id"); +// model.setValue(RemoteModel.UUID_PROPERTY, remoteId); +// if(locals.containsKey(remoteId)) { +// model.setId(locals.remove(remoteId)); +// } else { +// model.clearValue(AbstractModel.ID_PROPERTY); +// } } protected HashMap cursorToMap(TodorooCursor cursor, DatabaseDao dao, @@ -1539,7 +1534,7 @@ public final class ActFmSyncService { String title = remote.getValue(Task.TITLE); TodorooCursor match = taskService.query(Query.select(Task.ID) .join(Join.inner(Metadata.TABLE, Criterion.and(Metadata.KEY.eq(GtasksMetadata.METADATA_KEY), Metadata.TASK.eq(Task.ID)))) - .where(Criterion.and(Task.TITLE.eq(title), Task.REMOTE_ID.isNull()))); + .where(Criterion.and(Task.TITLE.eq(title), Task.UUID.isNull()))); try { if (match.getCount() > 0) { match.moveToFirst(); @@ -1552,22 +1547,23 @@ public final class ActFmSyncService { protected void deleteExtras(Long[] localIds) { taskService.deleteWhere(Criterion.and(TaskCriteria.activeVisibleMine(), - Task.REMOTE_ID.isNotNull(), + Task.UUID.isNotNull(), Criterion.not(Task.ID.in(localIds)))); } @Override protected HashMap getLocalModels() { - TodorooCursor cursor = taskService.query(Query.select(Task.ID, Task.MODIFICATION_DATE, - Task.REMOTE_ID).where(Task.REMOTE_ID.in(remoteIds)).orderBy( - Order.asc(Task.REMOTE_ID))); - Task task = new Task(); - for (cursor.moveToFirst(); !cursor.isAfterLast(); cursor.moveToNext()) { - task.readFromCursor(cursor); - modificationDates.put(task.getId(), task.getValue(Task.MODIFICATION_DATE)); - } - - return cursorToMap(cursor, taskDao, Task.REMOTE_ID, Task.ID); +// TodorooCursor cursor = taskService.query(Query.select(Task.ID, Task.MODIFICATION_DATE, +// Task.UUID).where(Task.UUID.in(remoteIds)).orderBy( +// Order.asc(Task.UUID))); +// Task task = new Task(); +// for (cursor.moveToFirst(); !cursor.isAfterLast(); cursor.moveToNext()) { +// task.readFromCursor(cursor); +// modificationDates.put(task.getId(), task.getValue(Task.MODIFICATION_DATE)); +// } +// +// return cursorToMap(cursor, taskDao, Task.UUID, Task.ID); + return null; } @Override @@ -1701,25 +1697,25 @@ public final class ActFmSyncService { json.put("picture", model.getPictureUrl(User.PICTURE, RemoteModel.PICTURE_THUMB)); } - public static void updateFromJson(JSONObject json, Update model) throws JSONException { - model.setValue(Update.REMOTE_ID, json.getLong("id")); +// public static void updateFromJson(JSONObject json, Update model) throws JSONException { +// model.setValue(Update.UUID, json.getLong("id")); // readUser(json.getJSONObject("user"), model, Update.USER_ID, Update.USER); // if (!json.isNull("other_user")) { // readUser(json.getJSONObject("other_user"), model, Update.OTHER_USER_ID, Update.OTHER_USER); // } - model.setValue(Update.ACTION, json.getString("action")); - model.setValue(Update.ACTION_CODE, json.getString("action_code")); - model.setValue(Update.TARGET_NAME, json.getString("target_name")); - if(json.isNull("message")) - model.setValue(Update.MESSAGE, ""); - else - model.setValue(Update.MESSAGE, json.getString("message")); - model.setValue(Update.PICTURE, json.optString("picture", "")); - model.setValue(Update.CREATION_DATE, readDate(json, "created_at")); - String tagIds = "," + json.optString("tag_ids", "") + ","; - model.setValue(Update.TAGS, tagIds); - model.setValue(Update.TASK_UUID, Long.toString(json.optLong("task_id", 0))); - } +// model.setValue(Update.ACTION, json.getString("action")); +// model.setValue(Update.ACTION_CODE, json.getString("action_code")); +// model.setValue(Update.TARGET_NAME, json.getString("target_name")); +// if(json.isNull("message")) +// model.setValue(Update.MESSAGE, ""); +// else +// model.setValue(Update.MESSAGE, json.getString("message")); +// model.setValue(Update.PICTURE, json.optString("picture", "")); +// model.setValue(Update.CREATION_DATE, readDate(json, "created_at")); +// String tagIds = "," + json.optString("tag_ids", "") + ","; +// model.setValue(Update.TAGS, tagIds); +// model.setValue(Update.TASK_UUID, Long.toString(json.optLong("task_id", 0))); +// } public static void readUser(JSONObject user, AbstractModel model, LongProperty idProperty, StringProperty userProperty) throws JSONException { @@ -1757,8 +1753,8 @@ public final class ActFmSyncService { } private static void parseTagDataFromJson(JSONObject json, TagData model, boolean featuredList) throws JSONException { - model.clearValue(TagData.REMOTE_ID); - model.setValue(TagData.REMOTE_ID, json.getLong("id")); + model.clearValue(TagData.UUID); + model.setValue(TagData.UUID, Long.toString(json.getLong("id"))); model.setValue(TagData.NAME, json.getString("name")); // if (!featuredList) 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 576522b8f..7b224800a 100644 --- a/astrid/plugin-src/com/todoroo/astrid/actfm/sync/ActFmSyncV2Provider.java +++ b/astrid/plugin-src/com/todoroo/astrid/actfm/sync/ActFmSyncV2Provider.java @@ -22,13 +22,11 @@ import com.todoroo.andlib.service.Autowired; import com.todoroo.andlib.service.ContextManager; import com.todoroo.andlib.sql.Criterion; import com.todoroo.andlib.sql.Functions; -import com.todoroo.andlib.sql.Join; import com.todoroo.andlib.sql.Query; import com.todoroo.andlib.utility.Preferences; import com.todoroo.astrid.billing.BillingConstants; import com.todoroo.astrid.dao.Database; import com.todoroo.astrid.dao.MetadataDao.MetadataCriteria; -import com.todoroo.astrid.dao.TaskDao.TaskCriteria; import com.todoroo.astrid.dao.UserDao; import com.todoroo.astrid.data.Metadata; import com.todoroo.astrid.data.TagData; @@ -42,8 +40,8 @@ import com.todoroo.astrid.service.TaskService; import com.todoroo.astrid.subtasks.SubtasksUpdater; import com.todoroo.astrid.sync.SyncResultCallback; import com.todoroo.astrid.sync.SyncV2Provider; -import com.todoroo.astrid.tags.TaskToTagMetadata; import com.todoroo.astrid.tags.TagService; +import com.todoroo.astrid.tags.TaskToTagMetadata; import com.todoroo.astrid.utility.Flags; /** @@ -107,7 +105,7 @@ public class ActFmSyncV2Provider extends SyncV2Provider { @Override public void pushRemoteModel(User model) { - actFmSyncService.pushUser(model); +// actFmSyncService.pushUser(model); } }; @@ -115,14 +113,14 @@ public class ActFmSyncV2Provider extends SyncV2Provider { @Override public void pushRemoteModel(Metadata model) { - long taskId = model.getValue(Metadata.TASK); - Task localTask = taskService.fetchById(taskId, Task.REMOTE_ID); - long remoteTaskId = localTask.getValue(Task.REMOTE_ID); - - if (model.getValue(FileMetadata.DELETION_DATE) > 0) - actFmSyncService.deleteAttachment(model); - else if (remoteTaskId > 0) - actFmSyncService.pushAttachment(remoteTaskId, model); +// long taskId = model.getValue(Metadata.TASK); +// Task localTask = taskService.fetchById(taskId, Task.REMOTE_ID); +// long remoteTaskId = localTask.getValue(Task.REMOTE_ID); +// +// if (model.getValue(FileMetadata.DELETION_DATE) > 0) +// actFmSyncService.deleteAttachment(model); +// else if (remoteTaskId > 0) +// actFmSyncService.pushAttachment(remoteTaskId, model); }; public Metadata getRemoteModelInstance(TodorooCursor cursor) { @@ -239,21 +237,21 @@ public class ActFmSyncV2Provider extends SyncV2Provider { new Thread(new Runnable() { @Override public void run() { - int time = Preferences.getInt(LAST_USERS_FETCH_TIME, 0); - try { - pushQueuedUsers(callback, finisher); - time = actFmSyncService.fetchUsers(); - Preferences.setInt(LAST_USERS_FETCH_TIME, time); - } catch (JSONException e) { - handler.handleException("actfm-sync", e, e.toString()); //$NON-NLS-1$ - } catch (IOException e) { - handler.handleException("actfm-sync", e, e.toString()); //$NON-NLS-1$ - } finally { - callback.incrementProgress(20); - if(finisher.decrementAndGet() == 0) { - finishSync(callback); - } - } +// int time = Preferences.getInt(LAST_USERS_FETCH_TIME, 0); +// try { +// pushQueuedUsers(callback, finisher); +// time = actFmSyncService.fetchUsers(); +// Preferences.setInt(LAST_USERS_FETCH_TIME, time); +// } catch (JSONException e) { +// handler.handleException("actfm-sync", e, e.toString()); //$NON-NLS-1$ +// } catch (IOException e) { +// handler.handleException("actfm-sync", e, e.toString()); //$NON-NLS-1$ +// } finally { +// callback.incrementProgress(20); +// if(finisher.decrementAndGet() == 0) { +// finishSync(callback); +// } +// } } }).start(); } @@ -286,15 +284,15 @@ public class ActFmSyncV2Provider extends SyncV2Provider { /** fetch changes to personal updates and push unpushed updates */ private void startUpdatesFetcher(final boolean manual, final SyncResultCallback callback, final AtomicInteger finisher) { - actFmSyncService.fetchPersonalUpdates(manual, new Runnable() { // Also pushes queued updates - @Override - public void run() { - callback.incrementProgress(20); - if (finisher.decrementAndGet() == 0) { - finishSync(callback); - } - } - }); +// actFmSyncService.fetchPersonalUpdates(manual, new Runnable() { // Also pushes queued updates +// @Override +// public void run() { +// callback.incrementProgress(20); +// if (finisher.decrementAndGet() == 0) { +// finishSync(callback); +// } +// } +// }); } /** fetch changes to tags */ @@ -392,48 +390,48 @@ public class ActFmSyncV2Provider extends SyncV2Provider { private void pushQueuedTasks(final SyncResultCallback callback, final AtomicInteger finisher) { - TodorooCursor taskCursor; - Query query = Query.select(Task.PROPERTIES). - where(Criterion.or( - Criterion.and(TaskCriteria.isActive(), - Task.REMOTE_ID.isNull()), - Criterion.and(Task.REMOTE_ID.isNotNull(), - Task.MODIFICATION_DATE.gt(Task.LAST_SYNC)))); - taskCursor = taskService.query(query); - - try { - pushQueued(callback, finisher, taskCursor, true, taskPusher); - } finally { - taskCursor.close(); - } - - if (ActFmPreferenceService.isPremiumUser()) { - TodorooCursor filesCursor = metadataService.query(Query.select(Metadata.PROPERTIES) - .where(Criterion.and( - MetadataCriteria.withKey(FileMetadata.METADATA_KEY), - Criterion.or(FileMetadata.REMOTE_ID.eq(0), FileMetadata.DELETION_DATE.gt(0))))); - try { - pushQueued(callback, finisher, filesCursor, false, filesPusher); - } finally { - filesCursor.close(); - } - } +// TodorooCursor taskCursor; +// Query query = Query.select(Task.PROPERTIES). +// where(Criterion.or( +// Criterion.and(TaskCriteria.isActive(), +// Task.REMOTE_ID.isNull()), +// Criterion.and(Task.REMOTE_ID.isNotNull(), +// Task.MODIFICATION_DATE.gt(Task.LAST_SYNC)))); +// taskCursor = taskService.query(query); +// +// try { +// pushQueued(callback, finisher, taskCursor, true, taskPusher); +// } finally { +// taskCursor.close(); +// } +// +// if (ActFmPreferenceService.isPremiumUser()) { +// TodorooCursor filesCursor = metadataService.query(Query.select(Metadata.PROPERTIES) +// .where(Criterion.and( +// MetadataCriteria.withKey(FileMetadata.METADATA_KEY), +// Criterion.or(FileMetadata.REMOTE_ID.eq(0), FileMetadata.DELETION_DATE.gt(0))))); +// try { +// pushQueued(callback, finisher, filesCursor, false, filesPusher); +// } finally { +// filesCursor.close(); +// } +// } } private void pushQueuedTags(final SyncResultCallback callback, final AtomicInteger finisher, int lastTagSyncTime) { - TodorooCursor tagDataCursor = tagDataService.query(Query.select(TagData.PROPERTIES) - .where(Criterion.and( - Functions.bitwiseAnd(TagData.FLAGS, TagData.FLAG_FEATURED).eq(0), - Criterion.or( - TagData.REMOTE_ID.eq(0), - Criterion.and(TagData.REMOTE_ID.gt(0), - TagData.MODIFICATION_DATE.gt(lastTagSyncTime)))))); - try { - pushQueued(callback, finisher, tagDataCursor, true, tagPusher); - } finally { - tagDataCursor.close(); - } +// TodorooCursor tagDataCursor = tagDataService.query(Query.select(TagData.PROPERTIES) +// .where(Criterion.and( +// Functions.bitwiseAnd(TagData.FLAGS, TagData.FLAG_FEATURED).eq(0), +// Criterion.or( +// TagData.REMOTE_ID.eq(0), +// Criterion.and(TagData.REMOTE_ID.gt(0), +// TagData.MODIFICATION_DATE.gt(lastTagSyncTime)))))); +// try { +// pushQueued(callback, finisher, tagDataCursor, true, tagPusher); +// } finally { +// tagDataCursor.close(); +// } } @@ -487,24 +485,24 @@ public class ActFmSyncV2Provider extends SyncV2Provider { } private void synchronizeUser(final User user, final boolean manual, final SyncResultCallback callback) { - if (user.getValue(User.REMOTE_ID) == 0) - return; - - new Thread(new Runnable() { - @Override - public void run() { - callback.started(); - callback.incrementMax(100); - - actFmSyncService.waitUntilEmpty(); - actFmSyncService.fetchTasksForUser(user, manual, new Runnable() { - public void run() { - callback.finished(); - } - }); - callback.incrementProgress(50); - } - }).start(); +// if (user.getValue(User.REMOTE_ID) == 0) +// return; +// +// new Thread(new Runnable() { +// @Override +// public void run() { +// callback.started(); +// callback.incrementMax(100); +// +// actFmSyncService.waitUntilEmpty(); +// actFmSyncService.fetchTasksForUser(user, manual, new Runnable() { +// public void run() { +// callback.finished(); +// } +// }); +// callback.incrementProgress(50); +// } +// }).start(); } private void fetchTagData(final TagData tagData, final boolean noRemoteId, @@ -541,14 +539,14 @@ public class ActFmSyncV2Provider extends SyncV2Provider { private void fetchUpdatesForTag(final TagData tagData, boolean manual, final SyncResultCallback callback, final AtomicInteger finisher) { - actFmSyncService.fetchUpdatesForTag(tagData, manual, new Runnable() { - @Override - public void run() { - callback.incrementProgress(20); - if(finisher.decrementAndGet() == 0) - callback.finished(); - } - }); +// actFmSyncService.fetchUpdatesForTag(tagData, manual, new Runnable() { +// @Override +// public void run() { +// callback.incrementProgress(20); +// if(finisher.decrementAndGet() == 0) +// callback.finished(); +// } +// }); } private void fetchTasksForTag(final TagData tagData, boolean manual, final boolean pushOrder, final SyncResultCallback callback, @@ -587,19 +585,19 @@ public class ActFmSyncV2Provider extends SyncV2Provider { allTagged.close(); } - TodorooCursor taskCursor = taskService.query(Query.select(Task.PROPERTIES) - .join(Join.inner(Metadata.TABLE, Criterion.and(Metadata.KEY.eq(TaskToTagMetadata.KEY), Metadata.TASK.eq(Task.ID), - TaskToTagMetadata.TAG_NAME.eqCaseInsensitive(tagData.getValue(TagData.NAME))))) - .where(Criterion.or( - Criterion.and(TaskCriteria.isActive(), - Task.REMOTE_ID.isNull()), - Criterion.and(Task.REMOTE_ID.isNotNull(), - Task.MODIFICATION_DATE.gt(Task.LAST_SYNC))))); - try { - pushQueued(callback, finisher, taskCursor, true, taskPusher); - } finally { - taskCursor.close(); - } +// TodorooCursor taskCursor = taskService.query(Query.select(Task.PROPERTIES) +// .join(Join.inner(Metadata.TABLE, Criterion.and(Metadata.KEY.eq(TaskToTagMetadata.KEY), Metadata.TASK.eq(Task.ID), +// TaskToTagMetadata.TAG_NAME.eqCaseInsensitive(tagData.getValue(TagData.NAME))))) +// .where(Criterion.or( +// Criterion.and(TaskCriteria.isActive(), +// Task.REMOTE_ID.isNull()), +// Criterion.and(Task.REMOTE_ID.isNotNull(), +// Task.MODIFICATION_DATE.gt(Task.LAST_SYNC))))); +// try { +// pushQueued(callback, finisher, taskCursor, true, taskPusher); +// } finally { +// taskCursor.close(); +// } TodorooCursor filesCursor = metadataService.query(Query.select(Metadata.PROPERTIES) .where(Criterion.and( diff --git a/astrid/plugin-src/com/todoroo/astrid/actfm/sync/AstridNewSyncMigrator.java b/astrid/plugin-src/com/todoroo/astrid/actfm/sync/AstridNewSyncMigrator.java index 185b0c249..4c3fe3a39 100644 --- a/astrid/plugin-src/com/todoroo/astrid/actfm/sync/AstridNewSyncMigrator.java +++ b/astrid/plugin-src/com/todoroo/astrid/actfm/sync/AstridNewSyncMigrator.java @@ -79,10 +79,10 @@ public class AstridNewSyncMigrator { // -------------- // Then ensure that every remote model has a remote id, by generating one using the uuid generator for all those without one // -------------- - Query tagsQuery = Query.select(TagData.ID, TagData.REMOTE_ID).where(Criterion.all); + Query tagsQuery = Query.select(TagData.ID, TagData.UUID).where(Criterion.or(TagData.UUID.eq(RemoteModel.NO_UUID), TagData.UUID.isNull())); assertUUIDsExist(tagsQuery, new TagData(), tagDataDao, null); - Query tasksQuery = Query.select(Task.ID, Task.REMOTE_ID, Task.RECURRENCE, Task.FLAGS).where(Criterion.all); + Query tasksQuery = Query.select(Task.ID, Task.UUID, Task.RECURRENCE, Task.FLAGS).where(Criterion.all); assertUUIDsExist(tasksQuery, new Task(), taskDao, new UUIDAssertionExtras() { @Override public void beforeSave(Task instance) { @@ -109,7 +109,7 @@ public class AstridNewSyncMigrator { } }); - Query updatesWithoutUUIDQuery = Query.select(Update.ID, Update.REMOTE_ID, Update.TASK).where(Criterion.all); + Query updatesWithoutUUIDQuery = Query.select(Update.ID, Update.UUID, Update.TASK).where(Criterion.all); assertUUIDsExist(updatesWithoutUUIDQuery, new Update(), updateDao, new UUIDAssertionExtras() { @Override public void beforeSave(Update instance) { @@ -173,12 +173,9 @@ public class AstridNewSyncMigrator { try { for (cursor.moveToFirst(); !cursor.isAfterLast(); cursor.moveToNext()) { instance.readPropertiesFromCursor(cursor); - if (!instance.containsNonNullValue(RemoteModel.REMOTE_ID_PROPERTY) || instance.getValue(RemoteModel.REMOTE_ID_PROPERTY) == 0) { + if (!instance.containsNonNullValue(RemoteModel.UUID_PROPERTY) || RemoteModel.NO_UUID.equals(instance.getValue(RemoteModel.UUID_PROPERTY))) { // No remote id exists, just create a UUID instance.setValue(RemoteModel.UUID_PROPERTY, UUIDHelper.newUUID()); - } else { - // Migrate remote id to uuid field - instance.setValue(RemoteModel.UUID_PROPERTY, Long.toString(instance.getValue(RemoteModel.REMOTE_ID_PROPERTY))); } if (extras != null) extras.beforeSave(instance); diff --git a/astrid/plugin-src/com/todoroo/astrid/notes/EditNoteActivity.java b/astrid/plugin-src/com/todoroo/astrid/notes/EditNoteActivity.java index da591d62c..aa4f76593 100644 --- a/astrid/plugin-src/com/todoroo/astrid/notes/EditNoteActivity.java +++ b/astrid/plugin-src/com/todoroo/astrid/notes/EditNoteActivity.java @@ -416,13 +416,15 @@ public class EditNoteActivity extends LinearLayout implements TimerActionListene } - actFmSyncService.fetchUpdatesForTask(task, manual, new Runnable() { - @Override - public void run() { - callback.incrementProgress(50); - callback.finished(); - } - }); +// actFmSyncService.fetchUpdatesForTask(task, manual, new Runnable() { +// @Override +// public void run() { +// callback.incrementProgress(50); +// callback.finished(); +// } +// }); + callback.incrementProgress(50); + callback.finished(); callback.incrementProgress(50); } diff --git a/astrid/plugin-src/com/todoroo/astrid/people/PeopleFilterExposer.java b/astrid/plugin-src/com/todoroo/astrid/people/PeopleFilterExposer.java index c380819e3..dd3f05781 100644 --- a/astrid/plugin-src/com/todoroo/astrid/people/PeopleFilterExposer.java +++ b/astrid/plugin-src/com/todoroo/astrid/people/PeopleFilterExposer.java @@ -86,7 +86,7 @@ public class PeopleFilterExposer extends BroadcastReceiver { String email = user.getValue(User.EMAIL); Criterion criterion; if (TextUtils.isEmpty(email) || "null".equals(email)) - criterion = Task.USER_ID.eq(user.getValue(User.REMOTE_ID)); + criterion = Task.USER_ID.eq(user.getValue(User.UUID)); else criterion = Criterion.or(Task.USER_ID.eq(user.getValue(User.UUID)), Task.USER.like("%" + email + "%")); // Deprecated field OK for backwards compatibility diff --git a/astrid/plugin-src/com/todoroo/astrid/people/PersonViewFragment.java b/astrid/plugin-src/com/todoroo/astrid/people/PersonViewFragment.java index ad4ccd983..4c0bfa89d 100644 --- a/astrid/plugin-src/com/todoroo/astrid/people/PersonViewFragment.java +++ b/astrid/plugin-src/com/todoroo/astrid/people/PersonViewFragment.java @@ -203,7 +203,7 @@ public class PersonViewFragment extends TaskListFragment { public void run() { // TODO: Fix friend status logic for new sync scheme if (!TextUtils.isEmpty(user.getValue(User.PENDING_STATUS))) { - actFmSyncService.pushUser(user); +// actFmSyncService.pushUser(user); user = userDao.fetch(user.getId(), User.PROPERTIES); } // SyncResultCallback callback; diff --git a/astrid/plugin-src/com/todoroo/astrid/subtasks/SubtasksHelper.java b/astrid/plugin-src/com/todoroo/astrid/subtasks/SubtasksHelper.java index dc7ac4d87..0ec81003c 100644 --- a/astrid/plugin-src/com/todoroo/astrid/subtasks/SubtasksHelper.java +++ b/astrid/plugin-src/com/todoroo/astrid/subtasks/SubtasksHelper.java @@ -147,23 +147,23 @@ public class SubtasksHelper { if (localToRemote) criterion = Task.ID.in(localIds); else - criterion = Task.REMOTE_ID.in(localIds); + criterion = Task.UUID.in(localIds); - TodorooCursor tasks = PluginServices.getTaskService().query(Query.select(Task.ID, Task.REMOTE_ID).where(criterion)); + TodorooCursor tasks = PluginServices.getTaskService().query(Query.select(Task.ID, Task.UUID).where(criterion)); try { Task t = new Task(); for (tasks.moveToFirst(); !tasks.isAfterLast(); tasks.moveToNext()) { t.clear(); t.readFromCursor(tasks); - if (t.containsNonNullValue(Task.REMOTE_ID)) { + if (t.containsNonNullValue(Task.UUID)) { Long key; Long value; if (localToRemote) { key = t.getId(); - value = t.getValue(Task.REMOTE_ID); + value = Long.parseLong(t.getValue(Task.UUID)); } else { - key = t.getValue(Task.REMOTE_ID); + key = Long.parseLong(t.getValue(Task.UUID)); value = t.getId(); } diff --git a/astrid/plugin-src/com/todoroo/astrid/tags/TagCaseMigrator.java b/astrid/plugin-src/com/todoroo/astrid/tags/TagCaseMigrator.java index 2bd4541f2..29089b4b0 100644 --- a/astrid/plugin-src/com/todoroo/astrid/tags/TagCaseMigrator.java +++ b/astrid/plugin-src/com/todoroo/astrid/tags/TagCaseMigrator.java @@ -53,8 +53,8 @@ public class TagCaseMigrator { if (first.tag.equalsIgnoreCase(second.tag)) { shouldShowDialog = true; - markForRenaming(first.tag, first.remoteId); - markForRenaming(second.tag, second.remoteId); + markForRenaming(first.tag, Long.parseLong(first.uuid)); + markForRenaming(second.tag, Long.parseLong(second.uuid)); } } @@ -92,9 +92,9 @@ public class TagCaseMigrator { private void updateTagData(String tag) { long remoteId = nameToRemoteId.get(tag); - TodorooCursor tagData = tagDataService.query(Query.select(TagData.NAME, TagData.REMOTE_ID) + TodorooCursor tagData = tagDataService.query(Query.select(TagData.NAME, TagData.UUID) .where(Criterion.and( - TagData.NAME.eq(tag), TagData.REMOTE_ID.eq(remoteId)))); + TagData.NAME.eq(tag), TagData.UUID.eq(remoteId)))); try { for (tagData.moveToFirst(); !tagData.isAfterLast(); tagData.moveToNext()) { TagData curr = new TagData(tagData); diff --git a/astrid/plugin-src/com/todoroo/astrid/tags/TagService.java b/astrid/plugin-src/com/todoroo/astrid/tags/TagService.java index 3797ea1fb..5eb277d08 100644 --- a/astrid/plugin-src/com/todoroo/astrid/tags/TagService.java +++ b/astrid/plugin-src/com/todoroo/astrid/tags/TagService.java @@ -111,8 +111,6 @@ public final class TagService { public String userId; public long memberCount; - @Deprecated public long remoteId; - public static Tag tagFromUUID(String uuid) { TodorooCursor tagData = PluginServices.getTagDataService().query(Query.select(TagData.PROPERTIES).where(TagData.UUID.eq(uuid))); try { @@ -132,7 +130,6 @@ public final class TagService { id = tagData.getId(); tag = tagData.getValue(TagData.NAME); count = tagData.getValue(TagData.TASK_COUNT); - remoteId = tagData.getValue(TagData.REMOTE_ID); uuid = tagData.getValue(TagData.UUID); image = tagData.getPictureUrl(TagData.PICTURE, RemoteModel.PICTURE_THUMB); userId = tagData.getValue(TagData.USER_ID); diff --git a/astrid/src/com/todoroo/astrid/dao/Database.java b/astrid/src/com/todoroo/astrid/dao/Database.java index 85644c15a..acfa9bf0b 100644 --- a/astrid/src/com/todoroo/astrid/dao/Database.java +++ b/astrid/src/com/todoroo/astrid/dao/Database.java @@ -207,7 +207,7 @@ public class Database extends AbstractDatabase { database.execSQL(createTableSql(visitor, Update.TABLE.name, Update.PROPERTIES)); onCreateTables(); - Property[] properties = new Property[] { Task.REMOTE_ID, + Property[] properties = new Property[] { Task.UUID, Task.USER_ID }; for(Property property : properties) { @@ -291,7 +291,7 @@ public class Database extends AbstractDatabase { case 20: try { String tasks = Task.TABLE.name; String id = Task.ID.name; - String remoteId = Task.REMOTE_ID.name; + String remoteId = Task.UUID.name; // Delete any items that have duplicate remote ids String deleteDuplicates = String.format("DELETE FROM %s WHERE %s IN (SELECT %s.%s FROM %s, %s AS t2 WHERE %s.%s < t2.%s AND %s.%s = t2.%s AND %s.%s > 0 GROUP BY %s.%s)", @@ -363,18 +363,14 @@ public class Database extends AbstractDatabase { database.execSQL(createTableSql(visitor, TagMetadata.TABLE.name, TagMetadata.PROPERTIES)); database.execSQL(addColumnSql(Task.TABLE, Task.PUSHED_AT, visitor, null)); - database.execSQL(addColumnSql(Task.TABLE, Task.UUID, visitor, null)); database.execSQL(addColumnSql(Task.TABLE, Task.IS_PUBLIC, visitor, "0")); database.execSQL(addColumnSql(Task.TABLE, Task.IS_READONLY, visitor, "0")); database.execSQL(addColumnSql(Task.TABLE, Task.CLASSIFICATION, visitor, null)); database.execSQL(addColumnSql(TagData.TABLE, TagData.PUSHED_AT, visitor, null)); - database.execSQL(addColumnSql(TagData.TABLE, TagData.UUID, visitor, null)); database.execSQL(addColumnSql(Update.TABLE, Update.PUSHED_AT, visitor, null)); - database.execSQL(addColumnSql(Update.TABLE, Update.UUID, visitor, null)); database.execSQL(addColumnSql(Update.TABLE, Update.TASK_UUID, visitor, null)); database.execSQL(addColumnSql(Metadata.TABLE, Metadata.DELETION_DATE, visitor, "0")); database.execSQL(addColumnSql(User.TABLE, User.PUSHED_AT, visitor, null)); - database.execSQL(addColumnSql(User.TABLE, User.UUID, visitor, null)); database.execSQL(addColumnSql(User.TABLE, User.FIRST_NAME, visitor, null)); database.execSQL(addColumnSql(User.TABLE, User.LAST_NAME, visitor, null)); } catch (SQLiteException e) { diff --git a/astrid/src/com/todoroo/astrid/service/StartupService.java b/astrid/src/com/todoroo/astrid/service/StartupService.java index aff17b290..4b661019c 100644 --- a/astrid/src/com/todoroo/astrid/service/StartupService.java +++ b/astrid/src/com/todoroo/astrid/service/StartupService.java @@ -300,14 +300,14 @@ public class StartupService { // For some reason these properties are missing for some users. // Make them exist! try { - TodorooCursor tasks = taskService.query(Query.select(Task.REMOTE_ID, Task.USER_ID, Task.USER).limit(1)); + TodorooCursor tasks = taskService.query(Query.select(Task.UUID, Task.USER_ID, Task.USER).limit(1)); try { System.err.println(tasks.getCount()); } finally { tasks.close(); } } catch (SQLiteException e) { - database.tryAddColumn(Task.TABLE, Task.REMOTE_ID, "0"); //$NON-NLS-1$ + database.tryAddColumn(Task.TABLE, Task.UUID, "'0'"); //$NON-NLS-1$ database.tryAddColumn(Task.TABLE, Task.USER_ID, "0"); //$NON-NLS-1$ database.tryAddColumn(Task.TABLE, Task.USER, null); } diff --git a/tests/src/com/todoroo/astrid/subtasks/SubtasksHelperTest.java b/tests/src/com/todoroo/astrid/subtasks/SubtasksHelperTest.java index bb951abdb..3b93bba51 100644 --- a/tests/src/com/todoroo/astrid/subtasks/SubtasksHelperTest.java +++ b/tests/src/com/todoroo/astrid/subtasks/SubtasksHelperTest.java @@ -14,21 +14,21 @@ public class SubtasksHelperTest extends SubtasksTestCase { updater.initializeFromSerializedTree(SubtasksUpdater.ACTIVE_TASKS_ORDER, filter, DEFAULT_SERIALIZED_TREE); } - private Task createTask(String title, long remoteId) { + private Task createTask(String title, String uuid) { Task t = new Task(); t.setValue(Task.TITLE, title); - t.setValue(Task.REMOTE_ID, remoteId); + t.setValue(Task.UUID, uuid); PluginServices.getTaskService().save(t); return t; } private void createTasks() { - A = createTask("A", 6); // Local id 1 - B = createTask("B", 4); // Local id 2 - C = createTask("C", 3); // Local id 3 - D = createTask("D", 1); // Local id 4 - E = createTask("E", 2); // Local id 5 - F = createTask("F", 5); // Local id 6 + A = createTask("A", "6"); // Local id 1 + B = createTask("B", "4"); // Local id 2 + C = createTask("C", "3"); // Local id 3 + D = createTask("D", "1"); // Local id 4 + E = createTask("E", "2"); // Local id 5 + F = createTask("F", "5"); // Local id 6 } private static final Long[] EXPECTED_ORDER = {-1L, 1L, 2L, 3L, 4L, 5L, 6L };