Fix EteBase delete issues

pull/1244/head
Alex Baker 5 years ago
parent b55a783138
commit 09e0fb0c3b

@ -75,9 +75,11 @@ class EteBaseClient(
return item return item
} }
suspend fun deleteItem(collection: Collection, uid: String): Item? { suspend fun deleteItem(collection: Collection, task: CaldavTask): Item? {
val itemManager = etebase.collectionManager.getItemManager(collection) 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<Item>) { suspend fun updateCache(collection: Collection, items: List<Item>) {

@ -135,21 +135,23 @@ class EteBaseSynchronizer @Inject constructor(
Timber.d("${caldavCalendar.name} up to date") Timber.d("${caldavCalendar.name} up to date")
} }
val changes = ArrayList<Item>() val changes = ArrayList<Item>()
for (task in caldavDao.getMoved(caldavCalendar.uuid!!)) { for (caldavTask in caldavDao.getMoved(caldavCalendar.uuid!!)) {
client.deleteItem(collection, task.remoteId!!)?.let { changes.add(it) } client.deleteItem(collection, caldavTask)
?.let { changes.add(it) }
?: caldavDao.delete(caldavTask)
} }
for (task in localChanges.values) { for (change in localChanges.values) {
val vtodo = task.vtodo val task = change.task
val existingTask = !isNullOrEmpty(vtodo) val caldavTask = change.caldavTask
if (task.isDeleted) { if (task.isDeleted) {
if (existingTask) { client.deleteItem(collection, caldavTask)
client.deleteItem(collection, task.remoteId!!)?.let { changes.add(it) } ?.let { changes.add(it) }
} ?: taskDeleter.delete(task)
} else { } else {
changes.add(client.updateItem( changes.add(client.updateItem(
collection, collection,
task.caldavTask, caldavTask,
iCal.toVtodo(task.caldavTask, task.task) iCal.toVtodo(caldavTask, task)
)) ))
} }
} }

@ -66,7 +66,11 @@ class EtebaseLocalCache private constructor(context: Context, username: String)
suspend fun itemSet(itemMgr: ItemManager, colUid: String, item: Item) { suspend fun itemSet(itemMgr: ItemManager, colUid: String, item: Item) {
withContext(Dispatchers.IO) { withContext(Dispatchers.IO) {
if (item.isDeleted) { 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 { } else {
fsCache.itemSet(itemMgr, colUid, item) fsCache.itemSet(itemMgr, colUid, item)
} }

Loading…
Cancel
Save