diff --git a/app/src/main/java/org/tasks/etebase/EteBaseClient.kt b/app/src/main/java/org/tasks/etebase/EteBaseClient.kt index 7ee099ae6..8b8b11e31 100644 --- a/app/src/main/java/org/tasks/etebase/EteBaseClient.kt +++ b/app/src/main/java/org/tasks/etebase/EteBaseClient.kt @@ -75,9 +75,11 @@ class EteBaseClient( return item } - suspend fun deleteItem(collection: Collection, uid: String): Item? { + suspend fun deleteItem(collection: Collection, task: CaldavTask): Item? { val itemManager = etebase.collectionManager.getItemManager(collection) - return cache.itemGet(itemManager, collection.uid, uid)?.apply { delete() } + return cache.itemGet(itemManager, collection.uid, task.`object`!!) + ?.takeIf { !it.isDeleted } + ?.apply { delete() } } suspend fun updateCache(collection: Collection, items: List) { diff --git a/app/src/main/java/org/tasks/etebase/EteBaseSynchronizer.kt b/app/src/main/java/org/tasks/etebase/EteBaseSynchronizer.kt index 39ae15673..07c49b119 100644 --- a/app/src/main/java/org/tasks/etebase/EteBaseSynchronizer.kt +++ b/app/src/main/java/org/tasks/etebase/EteBaseSynchronizer.kt @@ -135,21 +135,23 @@ class EteBaseSynchronizer @Inject constructor( Timber.d("${caldavCalendar.name} up to date") } val changes = ArrayList() - for (task in caldavDao.getMoved(caldavCalendar.uuid!!)) { - client.deleteItem(collection, task.remoteId!!)?.let { changes.add(it) } + for (caldavTask in caldavDao.getMoved(caldavCalendar.uuid!!)) { + client.deleteItem(collection, caldavTask) + ?.let { changes.add(it) } + ?: caldavDao.delete(caldavTask) } - for (task in localChanges.values) { - val vtodo = task.vtodo - val existingTask = !isNullOrEmpty(vtodo) + for (change in localChanges.values) { + val task = change.task + val caldavTask = change.caldavTask if (task.isDeleted) { - if (existingTask) { - client.deleteItem(collection, task.remoteId!!)?.let { changes.add(it) } - } + client.deleteItem(collection, caldavTask) + ?.let { changes.add(it) } + ?: taskDeleter.delete(task) } else { changes.add(client.updateItem( collection, - task.caldavTask, - iCal.toVtodo(task.caldavTask, task.task) + caldavTask, + iCal.toVtodo(caldavTask, task) )) } } diff --git a/app/src/main/java/org/tasks/etebase/EtebaseLocalCache.kt b/app/src/main/java/org/tasks/etebase/EtebaseLocalCache.kt index de43fdf57..c1fe7a390 100644 --- a/app/src/main/java/org/tasks/etebase/EtebaseLocalCache.kt +++ b/app/src/main/java/org/tasks/etebase/EtebaseLocalCache.kt @@ -66,7 +66,11 @@ class EtebaseLocalCache private constructor(context: Context, username: String) suspend fun itemSet(itemMgr: ItemManager, colUid: String, item: Item) { withContext(Dispatchers.IO) { if (item.isDeleted) { - fsCache.itemUnset(itemMgr, colUid, item.uid) + try { + fsCache.itemUnset(itemMgr, colUid, item.uid) + } catch (e: UrlParseException) { + // Ignore, as it just means the file doesn't exist + } } else { fsCache.itemSet(itemMgr, colUid, item) }