From b1ffdbfa9589f14a91356ce3a62bf2dbffd903ce Mon Sep 17 00:00:00 2001 From: rfc2822 Date: Fri, 14 Mar 2014 23:14:32 +0100 Subject: [PATCH] Fix a bug that deletes entities remotely even if they have changed remotely (closes #197) --- .../davdroid/resource/LocalCollection.java | 3 ++- .../davdroid/syncadapter/SyncManager.java | 19 ++++++++++++------- 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/src/at/bitfire/davdroid/resource/LocalCollection.java b/src/at/bitfire/davdroid/resource/LocalCollection.java index e4da862b..c8059223 100644 --- a/src/at/bitfire/davdroid/resource/LocalCollection.java +++ b/src/at/bitfire/davdroid/resource/LocalCollection.java @@ -222,7 +222,8 @@ public abstract class LocalCollection { public void clearDirty(Resource resource) { pendingOperations.add(ContentProviderOperation .newUpdate(ContentUris.withAppendedId(entriesURI(), resource.getLocalID())) - .withValue(entryColumnDirty(), 0).build()); + .withValue(entryColumnDirty(), 0) + .build()); } public void commit() throws LocalStorageException { diff --git a/src/at/bitfire/davdroid/syncadapter/SyncManager.java b/src/at/bitfire/davdroid/syncadapter/SyncManager.java index c8fa23ef..db409ec5 100644 --- a/src/at/bitfire/davdroid/syncadapter/SyncManager.java +++ b/src/at/bitfire/davdroid/syncadapter/SyncManager.java @@ -109,15 +109,20 @@ public class SyncManager { try { Resource res = local.findById(id, false); if (res.getName() != null) // is this resource even present remotely? - remote.delete(res); + try { + remote.delete(res); + } catch(NotFoundException e) { + Log.i(TAG, "Locally-deleted resource has already been removed from server"); + } catch(PreconditionFailedException e) { + Log.i(TAG, "Locally-deleted resource has been changed on the server in the meanwhile"); + } + + // always delete locally so that the record with the DELETED flag doesn't cause another deletion attempt local.delete(res); + count++; - } catch(NotFoundException e) { - Log.i(TAG, "Locally-deleted resource has already been removed from server"); - } catch(PreconditionFailedException e) { - Log.i(TAG, "Locally-deleted resource has been changed on the server in the meanwhile"); } catch (RecordNotFoundException e) { - Log.e(TAG, "Couldn't read locally-deleted record", e); + Log.wtf(TAG, "Couldn't read locally-deleted record", e); } } finally { local.commit(); @@ -141,7 +146,7 @@ public class SyncManager { } catch (ValidationException e) { Log.e(TAG, "Couldn't create entity for adding: " + e.toString()); } catch (RecordNotFoundException e) { - Log.e(TAG, "Couldn't read new record", e); + Log.wtf(TAG, "Couldn't read new record", e); } } finally { local.commit();