From 02d6d30d834a2d81e7cf56953791adfca1da7386 Mon Sep 17 00:00:00 2001 From: Sam Bosley Date: Fri, 30 Mar 2012 11:35:54 -0700 Subject: [PATCH] Threads launching threads --- .../astrid/actfm/sync/ActFmSyncService.java | 11 ++-- .../actfm/sync/ActFmSyncV2Provider.java | 50 +++++++++++-------- 2 files changed, 36 insertions(+), 25 deletions(-) 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 9f6057068..890a9ccb7 100644 --- a/astrid/plugin-src/com/todoroo/astrid/actfm/sync/ActFmSyncService.java +++ b/astrid/plugin-src/com/todoroo/astrid/actfm/sync/ActFmSyncService.java @@ -142,10 +142,13 @@ public final class ActFmSyncService { taskPushThreads.incrementAndGet(); waitUntilEmpty.close(); // sleep so metadata associated with task is saved - AndroidUtilities.sleepDeep(1000L); - pushTaskOnSave(model, setValues); - if (taskPushThreads.decrementAndGet() == 0) { - waitUntilEmpty.open(); + try { + AndroidUtilities.sleepDeep(1000L); + pushTaskOnSave(model, setValues); + } finally { + if (taskPushThreads.decrementAndGet() == 0) { + waitUntilEmpty.open(); + } } } }).start(); 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 4633c1c39..dc7cac425 100644 --- a/astrid/plugin-src/com/todoroo/astrid/actfm/sync/ActFmSyncV2Provider.java +++ b/astrid/plugin-src/com/todoroo/astrid/actfm/sync/ActFmSyncV2Provider.java @@ -106,22 +106,26 @@ public class ActFmSyncV2Provider extends SyncV2Provider { // --- synchronize active tasks @Override - public void synchronizeActiveTasks(boolean manual, + public void synchronizeActiveTasks(final boolean manual, final SyncResultCallback callback) { - callback.started(); - callback.incrementMax(100); + new Thread(new Runnable() { + public void run() { + callback.started(); + callback.incrementMax(100); - final AtomicInteger finisher = new AtomicInteger(2); + final AtomicInteger finisher = new AtomicInteger(2); - actFmPreferenceService.recordSyncStart(); + actFmPreferenceService.recordSyncStart(); - startTagFetcher(callback, finisher); + startTagFetcher(callback, finisher); - actFmSyncService.waitUntilEmpty(); - startTaskFetcher(manual, callback, finisher); + actFmSyncService.waitUntilEmpty(); + startTaskFetcher(manual, callback, finisher); - callback.incrementProgress(50); + callback.incrementProgress(50); + } + }).start(); } /** fetch changes to tags */ @@ -239,29 +243,33 @@ public class ActFmSyncV2Provider extends SyncV2Provider { // --- synchronize list @Override - public void synchronizeList(Object list, boolean manual, + public void synchronizeList(Object list, final boolean manual, final SyncResultCallback callback) { if(!(list instanceof TagData)) return; - TagData tagData = (TagData) list; + final TagData tagData = (TagData) list; final boolean noRemoteId = tagData.getValue(TagData.REMOTE_ID) == 0; - callback.started(); - callback.incrementMax(100); + new Thread(new Runnable() { + public void run() { + callback.started(); + callback.incrementMax(100); - final AtomicInteger finisher = new AtomicInteger(3); + final AtomicInteger finisher = new AtomicInteger(3); - fetchTagData(tagData, noRemoteId, manual, callback, finisher); + fetchTagData(tagData, noRemoteId, manual, callback, finisher); - if(!noRemoteId) { - actFmSyncService.waitUntilEmpty(); - fetchTasksForTag(tagData, manual, callback, finisher); - fetchUpdatesForTag(tagData, manual, callback, finisher); - } + if(!noRemoteId) { + actFmSyncService.waitUntilEmpty(); + fetchTasksForTag(tagData, manual, callback, finisher); + fetchUpdatesForTag(tagData, manual, callback, finisher); + } - callback.incrementProgress(50); + callback.incrementProgress(50); + } + }).start(); } private void fetchTagData(final TagData tagData, final boolean noRemoteId,