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 217ac6d01..70dad4072 100644 --- a/astrid/plugin-src/com/todoroo/astrid/actfm/sync/ActFmSyncService.java +++ b/astrid/plugin-src/com/todoroo/astrid/actfm/sync/ActFmSyncService.java @@ -272,10 +272,14 @@ public final class ActFmSyncService { } if (tagOrderQueue.size() > 0) { AndroidUtilities.sleepDeep(WAIT_BEFORE_PUSH_ORDER); - Long tagDataId = tagOrderQueue.remove(0); - TagData td = tagDataService.fetchById(tagDataId, TagData.ID, TagData.REMOTE_ID, TagData.TAG_ORDERING); - if (td != null) { - pushTagOrdering(td); + try { + Long tagDataId = tagOrderQueue.remove(0); + TagData td = tagDataService.fetchById(tagDataId, TagData.ID, TagData.REMOTE_ID, TagData.TAG_ORDERING); + if (td != null) { + pushTagOrdering(td); + } + } catch (IndexOutOfBoundsException e) { + // In case element was removed } } } @@ -593,6 +597,13 @@ public final class ActFmSyncService { } } + public void pushTagOrderingImmediately(TagData tagData) { + if (tagOrderQueue.contains(tagData.getId())) { + tagOrderQueue.remove(tagData.getId()); + pushTagOrdering(tagData); + } + } + private void pushTagOrdering(TagData tagData) { if (!checkForToken()) return; 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 b66ca6a77..c0f230539 100644 --- a/astrid/plugin-src/com/todoroo/astrid/actfm/sync/ActFmSyncV2Provider.java +++ b/astrid/plugin-src/com/todoroo/astrid/actfm/sync/ActFmSyncV2Provider.java @@ -452,6 +452,7 @@ public class ActFmSyncV2Provider extends SyncV2Provider { if(!noRemoteId) { actFmSyncService.waitUntilEmpty(); + actFmSyncService.pushTagOrderingImmediately(tagData); fetchTasksForTag(tagData, manual, callback, finisher); fetchUpdatesForTag(tagData, manual, callback, finisher); }