|
|
@ -11,7 +11,6 @@ import java.io.IOException;
|
|
|
|
import java.util.HashSet;
|
|
|
|
import java.util.HashSet;
|
|
|
|
import java.util.Set;
|
|
|
|
import java.util.Set;
|
|
|
|
|
|
|
|
|
|
|
|
import net.fortuna.ical4j.data.ParserException;
|
|
|
|
|
|
|
|
import net.fortuna.ical4j.model.ValidationException;
|
|
|
|
import net.fortuna.ical4j.model.ValidationException;
|
|
|
|
|
|
|
|
|
|
|
|
import org.apache.http.HttpException;
|
|
|
|
import org.apache.http.HttpException;
|
|
|
@ -22,14 +21,14 @@ import android.content.OperationApplicationException;
|
|
|
|
import android.content.SyncResult;
|
|
|
|
import android.content.SyncResult;
|
|
|
|
import android.os.RemoteException;
|
|
|
|
import android.os.RemoteException;
|
|
|
|
import android.util.Log;
|
|
|
|
import android.util.Log;
|
|
|
|
import at.bitfire.davdroid.resource.IncapableResourceException;
|
|
|
|
|
|
|
|
import at.bitfire.davdroid.resource.LocalCollection;
|
|
|
|
import at.bitfire.davdroid.resource.LocalCollection;
|
|
|
|
import at.bitfire.davdroid.resource.RemoteCollection;
|
|
|
|
import at.bitfire.davdroid.resource.RemoteCollection;
|
|
|
|
import at.bitfire.davdroid.resource.Resource;
|
|
|
|
import at.bitfire.davdroid.resource.Resource;
|
|
|
|
import at.bitfire.davdroid.webdav.PreconditionFailedException;
|
|
|
|
import at.bitfire.davdroid.webdav.PreconditionFailedException;
|
|
|
|
|
|
|
|
|
|
|
|
public class SyncManager {
|
|
|
|
public class SyncManager {
|
|
|
|
private static String TAG = "davdroid.SyncManager";
|
|
|
|
private static final String TAG = "davdroid.SyncManager";
|
|
|
|
|
|
|
|
private static final int MAX_UPDATES_BEFORE_COMMIT = 100;
|
|
|
|
|
|
|
|
|
|
|
|
protected Account account;
|
|
|
|
protected Account account;
|
|
|
|
protected AccountManager accountManager;
|
|
|
|
protected AccountManager accountManager;
|
|
|
@ -134,7 +133,7 @@ public class SyncManager {
|
|
|
|
|
|
|
|
|
|
|
|
// PHASE 3: DOWNLOAD NEW/REMOTELY-CHANGED RESOURCES
|
|
|
|
// PHASE 3: DOWNLOAD NEW/REMOTELY-CHANGED RESOURCES
|
|
|
|
Log.i(TAG, "Adding " + resourcesToAdd.size() + " remote resource(s)");
|
|
|
|
Log.i(TAG, "Adding " + resourcesToAdd.size() + " remote resource(s)");
|
|
|
|
if (!resourcesToAdd.isEmpty())
|
|
|
|
if (!resourcesToAdd.isEmpty()) {
|
|
|
|
for (Resource res : dav.multiGet(resourcesToAdd.toArray(new Resource[0]))) {
|
|
|
|
for (Resource res : dav.multiGet(resourcesToAdd.toArray(new Resource[0]))) {
|
|
|
|
Log.i(TAG, "Adding " + res.getName());
|
|
|
|
Log.i(TAG, "Adding " + res.getName());
|
|
|
|
try {
|
|
|
|
try {
|
|
|
@ -142,20 +141,25 @@ public class SyncManager {
|
|
|
|
} catch (ValidationException ex) {
|
|
|
|
} catch (ValidationException ex) {
|
|
|
|
Log.w(TAG, "Ignoring invalid remote resource: " + res.getName(), ex);
|
|
|
|
Log.w(TAG, "Ignoring invalid remote resource: " + res.getName(), ex);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
syncResult.stats.numInserts++;
|
|
|
|
|
|
|
|
|
|
|
|
if (++syncResult.stats.numInserts % MAX_UPDATES_BEFORE_COMMIT == 0) // avoid TransactionTooLargeException
|
|
|
|
|
|
|
|
local.commit();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
local.commit();
|
|
|
|
local.commit();
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
Log.i(TAG, "Updating " + resourcesToUpdate.size() + " remote resource(s)");
|
|
|
|
Log.i(TAG, "Updating " + resourcesToUpdate.size() + " remote resource(s)");
|
|
|
|
if (!resourcesToUpdate.isEmpty())
|
|
|
|
if (!resourcesToUpdate.isEmpty())
|
|
|
|
for (Resource res : dav.multiGet(resourcesToUpdate.toArray(new Resource[0]))) {
|
|
|
|
for (Resource res : dav.multiGet(resourcesToUpdate.toArray(new Resource[0]))) {
|
|
|
|
|
|
|
|
Log.i(TAG, "Updating " + res.getName());
|
|
|
|
try {
|
|
|
|
try {
|
|
|
|
local.updateByRemoteName(res);
|
|
|
|
local.updateByRemoteName(res);
|
|
|
|
} catch (ValidationException ex) {
|
|
|
|
} catch (ValidationException ex) {
|
|
|
|
Log.e(TAG, "Ignoring invalid remote resource: " + res.getName(), ex);
|
|
|
|
Log.e(TAG, "Ignoring invalid remote resource: " + res.getName(), ex);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
Log.i(TAG, "Updating " + res.getName());
|
|
|
|
|
|
|
|
syncResult.stats.numInserts++;
|
|
|
|
if (++syncResult.stats.numUpdates % MAX_UPDATES_BEFORE_COMMIT == 0) // avoid TransactionTooLargeException
|
|
|
|
|
|
|
|
local.commit();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
local.commit();
|
|
|
|
local.commit();
|
|
|
|
|
|
|
|
|
|
|
|