From 00a1a223d050c0820bac03628f55ceff2cbc043b Mon Sep 17 00:00:00 2001 From: Tom Hacohen Date: Sun, 6 Sep 2020 10:16:01 +0300 Subject: [PATCH] SyncManager: correctly set the item's UID in the metadata. We were only populating the uid after setting it in the metadata so we were always setting null in the metadata which was causing errors. --- .../com/etesync/syncadapter/resource/LocalContact.kt | 12 +++++++++++- .../com/etesync/syncadapter/resource/LocalEvent.kt | 12 +++++++++++- .../com/etesync/syncadapter/resource/LocalGroup.kt | 12 +++++++++++- .../etesync/syncadapter/resource/LocalResource.kt | 5 +++-- .../com/etesync/syncadapter/resource/LocalTask.kt | 12 +++++++++++- .../etesync/syncadapter/syncadapter/SyncManager.kt | 11 ++++++----- 6 files changed, 53 insertions(+), 11 deletions(-) diff --git a/app/src/main/java/com/etesync/syncadapter/resource/LocalContact.kt b/app/src/main/java/com/etesync/syncadapter/resource/LocalContact.kt index 797eb1b5..b6c9d6a3 100644 --- a/app/src/main/java/com/etesync/syncadapter/resource/LocalContact.kt +++ b/app/src/main/java/com/etesync/syncadapter/resource/LocalContact.kt @@ -107,7 +107,7 @@ class LocalContact : AndroidContact, LocalAddress { this.eTag = eTag } - override fun prepareForUpload(fileName_: String?) { + override fun legacyPrepareForUpload(fileName_: String?) { val uid = UUID.randomUUID().toString() val values = ContentValues(2) @@ -119,6 +119,16 @@ class LocalContact : AndroidContact, LocalAddress { this.fileName = fileName } + override fun prepareForUpload(fileName: String, uid: String) { + val values = ContentValues(2) + values.put(AndroidContact.COLUMN_FILENAME, fileName) + values.put(AndroidContact.COLUMN_UID, uid) + addressBook.provider?.update(rawContactSyncURI(), values, null, null) + + contact?.uid = uid + this.fileName = fileName + } + override fun populateData(mimeType: String, row: ContentValues) { when (mimeType) { CachedGroupMembership.CONTENT_ITEM_TYPE -> cachedGroupMemberships.add(row.getAsLong(CachedGroupMembership.GROUP_ID)) diff --git a/app/src/main/java/com/etesync/syncadapter/resource/LocalEvent.kt b/app/src/main/java/com/etesync/syncadapter/resource/LocalEvent.kt index ef39ec2e..93cd2fbc 100644 --- a/app/src/main/java/com/etesync/syncadapter/resource/LocalEvent.kt +++ b/app/src/main/java/com/etesync/syncadapter/resource/LocalEvent.kt @@ -133,7 +133,7 @@ class LocalEvent : AndroidEvent, LocalResource { /* custom queries */ - override fun prepareForUpload(fileName_: String?) { + override fun legacyPrepareForUpload(fileName_: String?) { var uid: String? = null val c = calendar.provider.query(eventSyncURI(), arrayOf(COLUMN_UID), null, null, null) if (c.moveToNext()) @@ -156,6 +156,16 @@ class LocalEvent : AndroidEvent, LocalResource { event.uid = uid } + override fun prepareForUpload(fileName: String, uid: String) { + val values = ContentValues(2) + values.put(Events._SYNC_ID, fileName) + values.put(COLUMN_UID, uid) + calendar.provider.update(eventSyncURI(), values, null, null) + + event?.uid = uid + this.fileName = fileName + } + override fun resetDeleted() { val values = ContentValues(1) values.put(CalendarContract.Events.DELETED, 0) diff --git a/app/src/main/java/com/etesync/syncadapter/resource/LocalGroup.kt b/app/src/main/java/com/etesync/syncadapter/resource/LocalGroup.kt index 2f8192ed..62ff13cd 100644 --- a/app/src/main/java/com/etesync/syncadapter/resource/LocalGroup.kt +++ b/app/src/main/java/com/etesync/syncadapter/resource/LocalGroup.kt @@ -156,7 +156,7 @@ class LocalGroup : AndroidGroup, LocalAddress { batch.commit() } - override fun prepareForUpload(fileName_: String?) { + override fun legacyPrepareForUpload(fileName_: String?) { val uid = UUID.randomUUID().toString() val values = ContentValues(2) @@ -168,6 +168,16 @@ class LocalGroup : AndroidGroup, LocalAddress { this.fileName = fileName } + override fun prepareForUpload(fileName: String, uid: String) { + val values = ContentValues(2) + values.put(AndroidGroup.COLUMN_FILENAME, fileName) + values.put(AndroidGroup.COLUMN_UID, uid) + addressBook.provider?.update(groupSyncUri(), values, null, null) + + contact?.uid = uid + this.fileName = fileName + } + override fun resetDeleted() { val values = ContentValues(1) values.put(Groups.DELETED, 0) diff --git a/app/src/main/java/com/etesync/syncadapter/resource/LocalResource.kt b/app/src/main/java/com/etesync/syncadapter/resource/LocalResource.kt index 92d77185..38aa6b9e 100644 --- a/app/src/main/java/com/etesync/syncadapter/resource/LocalResource.kt +++ b/app/src/main/java/com/etesync/syncadapter/resource/LocalResource.kt @@ -20,8 +20,9 @@ interface LocalResource { fun delete(): Int - // FIXME: The null is for legacy - fun prepareForUpload(fileName: String?) + fun legacyPrepareForUpload(fileName: String?) + + fun prepareForUpload(fileName: String, uid: String) fun clearDirty(eTag: String?) diff --git a/app/src/main/java/com/etesync/syncadapter/resource/LocalTask.kt b/app/src/main/java/com/etesync/syncadapter/resource/LocalTask.kt index 1aa3b4c8..d39d8d4b 100644 --- a/app/src/main/java/com/etesync/syncadapter/resource/LocalTask.kt +++ b/app/src/main/java/com/etesync/syncadapter/resource/LocalTask.kt @@ -96,7 +96,7 @@ class LocalTask : AndroidTask, LocalResource { /* custom queries */ - override fun prepareForUpload(fileName_: String?) { + override fun legacyPrepareForUpload(fileName_: String?) { var uid: String? = null val c = taskList.provider.client.query(taskSyncURI(), arrayOf(COLUMN_UID), null, null, null) if (c.moveToNext()) @@ -118,6 +118,16 @@ class LocalTask : AndroidTask, LocalResource { task.uid = uid } + override fun prepareForUpload(fileName: String, uid: String) { + val values = ContentValues(2) + values.put(TaskContract.Tasks._SYNC_ID, fileName) + values.put(COLUMN_UID, uid) + taskList.provider.client.update(taskSyncURI(), values, null, null) + + task?.uid = uid + this.fileName = fileName + } + override fun resetDeleted() { val values = ContentValues(1) values.put(TaskContract.Tasks._DELETED, 0) diff --git a/app/src/main/java/com/etesync/syncadapter/syncadapter/SyncManager.kt b/app/src/main/java/com/etesync/syncadapter/syncadapter/SyncManager.kt index 4db67cdf..6dcca0e9 100644 --- a/app/src/main/java/com/etesync/syncadapter/syncadapter/SyncManager.kt +++ b/app/src/main/java/com/etesync/syncadapter/syncadapter/SyncManager.kt @@ -651,12 +651,13 @@ constructor(protected val context: Context, protected val account: Account, prot item = cacheItem.item itemUpdateMtime(item) } else { + val uid = UUID.randomUUID().toString() val meta = ItemMetadata() - meta.name = local.uuid!! - meta.setMtime(System.currentTimeMillis()) + meta.name = uid + meta.mtime = System.currentTimeMillis() item = itemMgr.create(meta, "") - local.prepareForUpload(item.uid) + local.prepareForUpload(item.uid, uid) } try { @@ -773,7 +774,7 @@ constructor(protected val context: Context, protected val account: Account, prot if (isLegacy) { // It's done later for non-legacy Logger.log.fine("Entry deleted before ever syncing - genarting a UUID") - local.prepareForUpload(null) + local.legacyPrepareForUpload(null) } } @@ -812,7 +813,7 @@ constructor(protected val context: Context, protected val account: Account, prot } Logger.log.fine("Found local record without file name; generating file name/UID if necessary") - local.prepareForUpload(null) + local.legacyPrepareForUpload(null) } } }