1
0
mirror of https://github.com/etesync/android synced 2025-05-13 20:38:50 +00:00

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.
This commit is contained in:
Tom Hacohen 2020-09-06 10:16:01 +03:00
parent 6459d71ab6
commit 00a1a223d0
6 changed files with 53 additions and 11 deletions

View File

@ -107,7 +107,7 @@ class LocalContact : AndroidContact, LocalAddress {
this.eTag = eTag this.eTag = eTag
} }
override fun prepareForUpload(fileName_: String?) { override fun legacyPrepareForUpload(fileName_: String?) {
val uid = UUID.randomUUID().toString() val uid = UUID.randomUUID().toString()
val values = ContentValues(2) val values = ContentValues(2)
@ -119,6 +119,16 @@ class LocalContact : AndroidContact, LocalAddress {
this.fileName = fileName 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) { override fun populateData(mimeType: String, row: ContentValues) {
when (mimeType) { when (mimeType) {
CachedGroupMembership.CONTENT_ITEM_TYPE -> cachedGroupMemberships.add(row.getAsLong(CachedGroupMembership.GROUP_ID)) CachedGroupMembership.CONTENT_ITEM_TYPE -> cachedGroupMemberships.add(row.getAsLong(CachedGroupMembership.GROUP_ID))

View File

@ -133,7 +133,7 @@ class LocalEvent : AndroidEvent, LocalResource<Event> {
/* custom queries */ /* custom queries */
override fun prepareForUpload(fileName_: String?) { override fun legacyPrepareForUpload(fileName_: String?) {
var uid: String? = null var uid: String? = null
val c = calendar.provider.query(eventSyncURI(), arrayOf(COLUMN_UID), null, null, null) val c = calendar.provider.query(eventSyncURI(), arrayOf(COLUMN_UID), null, null, null)
if (c.moveToNext()) if (c.moveToNext())
@ -156,6 +156,16 @@ class LocalEvent : AndroidEvent, LocalResource<Event> {
event.uid = uid 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() { override fun resetDeleted() {
val values = ContentValues(1) val values = ContentValues(1)
values.put(CalendarContract.Events.DELETED, 0) values.put(CalendarContract.Events.DELETED, 0)

View File

@ -156,7 +156,7 @@ class LocalGroup : AndroidGroup, LocalAddress {
batch.commit() batch.commit()
} }
override fun prepareForUpload(fileName_: String?) { override fun legacyPrepareForUpload(fileName_: String?) {
val uid = UUID.randomUUID().toString() val uid = UUID.randomUUID().toString()
val values = ContentValues(2) val values = ContentValues(2)
@ -168,6 +168,16 @@ class LocalGroup : AndroidGroup, LocalAddress {
this.fileName = fileName 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() { override fun resetDeleted() {
val values = ContentValues(1) val values = ContentValues(1)
values.put(Groups.DELETED, 0) values.put(Groups.DELETED, 0)

View File

@ -20,8 +20,9 @@ interface LocalResource<in TData: Any> {
fun delete(): Int fun delete(): Int
// FIXME: The null is for legacy fun legacyPrepareForUpload(fileName: String?)
fun prepareForUpload(fileName: String?)
fun prepareForUpload(fileName: String, uid: String)
fun clearDirty(eTag: String?) fun clearDirty(eTag: String?)

View File

@ -96,7 +96,7 @@ class LocalTask : AndroidTask, LocalResource<Task> {
/* custom queries */ /* custom queries */
override fun prepareForUpload(fileName_: String?) { override fun legacyPrepareForUpload(fileName_: String?) {
var uid: String? = null var uid: String? = null
val c = taskList.provider.client.query(taskSyncURI(), arrayOf(COLUMN_UID), null, null, null) val c = taskList.provider.client.query(taskSyncURI(), arrayOf(COLUMN_UID), null, null, null)
if (c.moveToNext()) if (c.moveToNext())
@ -118,6 +118,16 @@ class LocalTask : AndroidTask, LocalResource<Task> {
task.uid = uid 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() { override fun resetDeleted() {
val values = ContentValues(1) val values = ContentValues(1)
values.put(TaskContract.Tasks._DELETED, 0) values.put(TaskContract.Tasks._DELETED, 0)

View File

@ -651,12 +651,13 @@ constructor(protected val context: Context, protected val account: Account, prot
item = cacheItem.item item = cacheItem.item
itemUpdateMtime(item) itemUpdateMtime(item)
} else { } else {
val uid = UUID.randomUUID().toString()
val meta = ItemMetadata() val meta = ItemMetadata()
meta.name = local.uuid!! meta.name = uid
meta.setMtime(System.currentTimeMillis()) meta.mtime = System.currentTimeMillis()
item = itemMgr.create(meta, "") item = itemMgr.create(meta, "")
local.prepareForUpload(item.uid) local.prepareForUpload(item.uid, uid)
} }
try { try {
@ -773,7 +774,7 @@ constructor(protected val context: Context, protected val account: Account, prot
if (isLegacy) { if (isLegacy) {
// It's done later for non-legacy // It's done later for non-legacy
Logger.log.fine("Entry deleted before ever syncing - genarting a UUID") 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") Logger.log.fine("Found local record without file name; generating file name/UID if necessary")
local.prepareForUpload(null) local.legacyPrepareForUpload(null)
} }
} }
} }