Threads launching threads

pull/14/head
Sam Bosley 13 years ago
parent cb95621ddc
commit 02d6d30d83

@ -142,10 +142,13 @@ public final class ActFmSyncService {
taskPushThreads.incrementAndGet(); taskPushThreads.incrementAndGet();
waitUntilEmpty.close(); waitUntilEmpty.close();
// sleep so metadata associated with task is saved // sleep so metadata associated with task is saved
AndroidUtilities.sleepDeep(1000L); try {
pushTaskOnSave(model, setValues); AndroidUtilities.sleepDeep(1000L);
if (taskPushThreads.decrementAndGet() == 0) { pushTaskOnSave(model, setValues);
waitUntilEmpty.open(); } finally {
if (taskPushThreads.decrementAndGet() == 0) {
waitUntilEmpty.open();
}
} }
} }
}).start(); }).start();

@ -106,22 +106,26 @@ public class ActFmSyncV2Provider extends SyncV2Provider {
// --- synchronize active tasks // --- synchronize active tasks
@Override @Override
public void synchronizeActiveTasks(boolean manual, public void synchronizeActiveTasks(final boolean manual,
final SyncResultCallback callback) { final SyncResultCallback callback) {
callback.started(); new Thread(new Runnable() {
callback.incrementMax(100); 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(); actFmSyncService.waitUntilEmpty();
startTaskFetcher(manual, callback, finisher); startTaskFetcher(manual, callback, finisher);
callback.incrementProgress(50); callback.incrementProgress(50);
}
}).start();
} }
/** fetch changes to tags */ /** fetch changes to tags */
@ -239,29 +243,33 @@ public class ActFmSyncV2Provider extends SyncV2Provider {
// --- synchronize list // --- synchronize list
@Override @Override
public void synchronizeList(Object list, boolean manual, public void synchronizeList(Object list, final boolean manual,
final SyncResultCallback callback) { final SyncResultCallback callback) {
if(!(list instanceof TagData)) if(!(list instanceof TagData))
return; return;
TagData tagData = (TagData) list; final TagData tagData = (TagData) list;
final boolean noRemoteId = tagData.getValue(TagData.REMOTE_ID) == 0; final boolean noRemoteId = tagData.getValue(TagData.REMOTE_ID) == 0;
callback.started(); new Thread(new Runnable() {
callback.incrementMax(100); 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) { if(!noRemoteId) {
actFmSyncService.waitUntilEmpty(); actFmSyncService.waitUntilEmpty();
fetchTasksForTag(tagData, manual, callback, finisher); fetchTasksForTag(tagData, manual, callback, finisher);
fetchUpdatesForTag(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, private void fetchTagData(final TagData tagData, final boolean noRemoteId,

Loading…
Cancel
Save