Merge remote-tracking branch 'sbosley/120329_sb_astrid_sync_fixes'

pull/14/head
Tim Su 12 years ago
commit 1576702202

@ -12,6 +12,7 @@ import java.util.HashSet;
import java.util.LinkedList;
import java.util.List;
import java.util.Queue;
import java.util.concurrent.atomic.AtomicInteger;
import org.apache.http.entity.mime.MultipartEntity;
import org.apache.http.entity.mime.content.ByteArrayBody;
@ -22,6 +23,7 @@ import org.json.JSONObject;
import android.content.ContentValues;
import android.content.Context;
import android.graphics.Bitmap;
import android.os.ConditionVariable;
import android.os.Handler;
import android.os.Looper;
import android.text.TextUtils;
@ -112,8 +114,10 @@ public final class ActFmSyncService {
}
private final List<FailedPush> failedPushes = Collections.synchronizedList(new LinkedList<FailedPush>());
Thread pushRetryThread = null;
Runnable pushRetryRunnable;
private Thread pushRetryThread = null;
private Runnable pushRetryRunnable;
private final AtomicInteger taskPushThreads = new AtomicInteger(0);
private final ConditionVariable waitUntilEmpty = new ConditionVariable();
public void initialize() {
initializeRetryRunnable();
@ -135,9 +139,17 @@ public final class ActFmSyncService {
new Thread(new Runnable() {
@Override
public void run() {
waitUntilEmpty.close();
taskPushThreads.incrementAndGet();
// sleep so metadata associated with task is saved
AndroidUtilities.sleepDeep(1000L);
pushTaskOnSave(model, setValues);
try {
AndroidUtilities.sleepDeep(1000L);
pushTaskOnSave(model, setValues);
} finally {
if (taskPushThreads.decrementAndGet() == 0) {
waitUntilEmpty.open();
}
}
}
}).start();
}
@ -235,6 +247,10 @@ public final class ActFmSyncService {
}
}
public void waitUntilEmpty() {
waitUntilEmpty.block();
}
// --- data push methods
/**

@ -106,21 +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);
startTaskFetcher(manual, callback, finisher);
actFmSyncService.waitUntilEmpty();
startTaskFetcher(manual, callback, finisher);
callback.incrementProgress(50);
callback.incrementProgress(50);
}
}).start();
}
/** fetch changes to tags */
@ -238,28 +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) {
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,

Loading…
Cancel
Save