From bc44062e936137668b53dd9f07d411eb50c585ed Mon Sep 17 00:00:00 2001 From: Tom Hacohen Date: Sun, 6 Sep 2020 10:51:41 +0300 Subject: [PATCH] Local resources: fix the mess of find by username/uid being all mixed up. We were searching by filename but the function was called uid and other such mixups. This change should now fix all of them by having a function for each that actually does the right thing. --- .../etesync/syncadapter/resource/LocalAddressBook.kt | 12 +++++++++++- .../etesync/syncadapter/resource/LocalCalendar.kt | 9 +++++++-- .../etesync/syncadapter/resource/LocalCollection.kt | 3 ++- .../com/etesync/syncadapter/resource/LocalGroup.kt | 2 +- .../etesync/syncadapter/resource/LocalTaskList.kt | 7 +++++-- .../syncadapter/syncadapter/CalendarSyncManager.kt | 2 +- .../syncadapter/syncadapter/ContactsSyncManager.kt | 9 +++------ .../syncadapter/syncadapter/TasksSyncManager.kt | 2 +- .../etesync/syncadapter/ui/JournalItemActivity.kt | 6 +++--- .../syncadapter/ui/importlocal/ImportFragment.kt | 8 ++++---- .../ui/importlocal/LocalCalendarImportFragment.kt | 2 +- .../ui/importlocal/LocalContactImportFragment.kt | 4 ++-- 12 files changed, 41 insertions(+), 25 deletions(-) diff --git a/app/src/main/java/com/etesync/syncadapter/resource/LocalAddressBook.kt b/app/src/main/java/com/etesync/syncadapter/resource/LocalAddressBook.kt index 9157ff57..a3aac76a 100644 --- a/app/src/main/java/com/etesync/syncadapter/resource/LocalAddressBook.kt +++ b/app/src/main/java/com/etesync/syncadapter/resource/LocalAddressBook.kt @@ -346,7 +346,7 @@ class LocalAddressBook( return reallyDirty } - override fun findByFilename(uid: String): LocalAddress? { + override fun findByUid(uid: String): LocalAddress? { val found = findContactByUID(uid) if (found != null) { return found @@ -355,6 +355,16 @@ class LocalAddressBook( } } + override fun findByFilename(filename: String): LocalAddress? { + val found = queryContacts("${AndroidContact.COLUMN_FILENAME}=?", arrayOf(filename)).firstOrNull() + + if (found != null) { + return found + } else { + return queryGroups("${AndroidGroup.COLUMN_FILENAME}=?", arrayOf(filename)).firstOrNull() + } + } + fun findGroupById(id: Long): LocalGroup = queryGroups("${Groups._ID}=?", arrayOf(id.toString())).firstOrNull() ?: throw FileNotFoundException() diff --git a/app/src/main/java/com/etesync/syncadapter/resource/LocalCalendar.kt b/app/src/main/java/com/etesync/syncadapter/resource/LocalCalendar.kt index 4bfedc51..92142847 100644 --- a/app/src/main/java/com/etesync/syncadapter/resource/LocalCalendar.kt +++ b/app/src/main/java/com/etesync/syncadapter/resource/LocalCalendar.kt @@ -21,7 +21,9 @@ import at.bitfire.ical4android.* import com.etesync.syncadapter.CachedCollection import com.etesync.syncadapter.log.Logger import com.etesync.syncadapter.model.JournalEntity +import com.etesync.syncadapter.resource.LocalEvent.Companion.COLUMN_UID import org.apache.commons.lang3.StringUtils +import org.dmfs.tasks.contract.TaskContract import java.util.* import java.util.logging.Level @@ -178,8 +180,11 @@ class LocalCalendar private constructor( override fun findAll(): List = queryEvents(null, null) - override fun findByFilename(uid: String): LocalEvent? - = queryEvents(Events._SYNC_ID + " =? ", arrayOf(uid)).firstOrNull() + override fun findByUid(uid: String): LocalEvent? + = queryEvents(COLUMN_UID + " =? ", arrayOf(uid)).firstOrNull() + + override fun findByFilename(filename: String): LocalEvent? + = queryEvents(Events._SYNC_ID + " =? ", arrayOf(filename)).firstOrNull() fun processDirtyExceptions() { // process deleted exceptions diff --git a/app/src/main/java/com/etesync/syncadapter/resource/LocalCollection.kt b/app/src/main/java/com/etesync/syncadapter/resource/LocalCollection.kt index 5a9b5340..1bcee902 100644 --- a/app/src/main/java/com/etesync/syncadapter/resource/LocalCollection.kt +++ b/app/src/main/java/com/etesync/syncadapter/resource/LocalCollection.kt @@ -16,7 +16,8 @@ interface LocalCollection> { fun findWithoutFileName(): List fun findAll(): List - fun findByFilename(uid: String): T? + fun findByUid(uid: String): T? + fun findByFilename(filename: String): T? fun count(): Long 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 62ff13cd..6af2801a 100644 --- a/app/src/main/java/com/etesync/syncadapter/resource/LocalGroup.kt +++ b/app/src/main/java/com/etesync/syncadapter/resource/LocalGroup.kt @@ -63,7 +63,7 @@ class LocalGroup : AndroidGroup, LocalAddress { // insert memberships val membersIds = members.map {uid -> Constants.log.fine("Assigning member: $uid") - val contact = addressBook.findByFilename(uid) as LocalContact? + val contact = addressBook.findByUid(uid) as LocalContact? if (contact != null) contact.id else null }.filterNotNull() diff --git a/app/src/main/java/com/etesync/syncadapter/resource/LocalTaskList.kt b/app/src/main/java/com/etesync/syncadapter/resource/LocalTaskList.kt index 10e7c344..251f9506 100644 --- a/app/src/main/java/com/etesync/syncadapter/resource/LocalTaskList.kt +++ b/app/src/main/java/com/etesync/syncadapter/resource/LocalTaskList.kt @@ -124,8 +124,11 @@ class LocalTaskList private constructor( override fun findWithoutFileName(): List = queryTasks(Tasks._SYNC_ID + " IS NULL", null) - override fun findByFilename(uid: String): LocalTask? - = queryTasks(Tasks._SYNC_ID + " =? ", arrayOf(uid)).firstOrNull() + override fun findByUid(uid: String): LocalTask? + = queryTasks(LocalTask.COLUMN_UID + " =? ", arrayOf(uid)).firstOrNull() + + override fun findByFilename(filename: String): LocalTask? + = queryTasks(Tasks._SYNC_ID + " =? ", arrayOf(filename)).firstOrNull() override fun count(): Long { try { diff --git a/app/src/main/java/com/etesync/syncadapter/syncadapter/CalendarSyncManager.kt b/app/src/main/java/com/etesync/syncadapter/syncadapter/CalendarSyncManager.kt index 2ef6ed3f..7592b8b2 100644 --- a/app/src/main/java/com/etesync/syncadapter/syncadapter/CalendarSyncManager.kt +++ b/app/src/main/java/com/etesync/syncadapter/syncadapter/CalendarSyncManager.kt @@ -119,7 +119,7 @@ constructor(context: Context, account: Account, settings: AccountSettings, extra } val event = events[0] - val local = localCollection!!.findByFilename(event.uid!!) + val local = localCollection!!.findByUid(event.uid!!) if (cEntry.isAction(SyncEntry.Actions.ADD) || cEntry.isAction(SyncEntry.Actions.CHANGE)) { legacyProcessEvent(event, local) diff --git a/app/src/main/java/com/etesync/syncadapter/syncadapter/ContactsSyncManager.kt b/app/src/main/java/com/etesync/syncadapter/syncadapter/ContactsSyncManager.kt index ee17b13f..e58f864b 100644 --- a/app/src/main/java/com/etesync/syncadapter/syncadapter/ContactsSyncManager.kt +++ b/app/src/main/java/com/etesync/syncadapter/syncadapter/ContactsSyncManager.kt @@ -13,7 +13,6 @@ import android.content.* import android.os.Bundle import android.provider.ContactsContract import at.bitfire.ical4android.CalendarStorageException -import at.bitfire.ical4android.Event import at.bitfire.vcard4android.BatchOperation import at.bitfire.vcard4android.Contact import at.bitfire.vcard4android.ContactsStorageException @@ -132,9 +131,7 @@ constructor(context: Context, account: Account, settings: AccountSettings, extra } override fun processItem(item: Item) { - val uid = item.meta.name!! - - val local = localCollection!!.findByFilename(uid) + val local = localCollection!!.findByFilename(item.uid) if (!item.isDeleted) { val inputReader = StringReader(String(item.content)) @@ -154,7 +151,7 @@ constructor(context: Context, account: Account, settings: AccountSettings, extra Logger.log.info("Removing local record which has been deleted on the server") local.delete() } else { - Logger.log.warning("Tried deleting a non-existent record: " + uid) + Logger.log.warning("Tried deleting a non-existent record: " + item.uid) } } } @@ -171,7 +168,7 @@ constructor(context: Context, account: Account, settings: AccountSettings, extra Logger.log.warning("Received multiple VCards, using first one") val contact = contacts[0] - val local = localCollection!!.findByFilename(contact.uid!!) + val local = localCollection!!.findByUid(contact.uid!!) if (cEntry.isAction(SyncEntry.Actions.ADD) || cEntry.isAction(SyncEntry.Actions.CHANGE)) { legacyProcessContact(contact, local) diff --git a/app/src/main/java/com/etesync/syncadapter/syncadapter/TasksSyncManager.kt b/app/src/main/java/com/etesync/syncadapter/syncadapter/TasksSyncManager.kt index f0b1a8de..51643537 100644 --- a/app/src/main/java/com/etesync/syncadapter/syncadapter/TasksSyncManager.kt +++ b/app/src/main/java/com/etesync/syncadapter/syncadapter/TasksSyncManager.kt @@ -109,7 +109,7 @@ class TasksSyncManager( } val event = tasks[0] - val local = localCollection!!.findByFilename(event.uid!!) + val local = localCollection!!.findByUid(event.uid!!) if (cEntry.isAction(SyncEntry.Actions.ADD) || cEntry.isAction(SyncEntry.Actions.CHANGE)) { legacyProcessTask(event, local) diff --git a/app/src/main/java/com/etesync/syncadapter/ui/JournalItemActivity.kt b/app/src/main/java/com/etesync/syncadapter/ui/JournalItemActivity.kt index 0a6fc2c6..2f4a18bc 100644 --- a/app/src/main/java/com/etesync/syncadapter/ui/JournalItemActivity.kt +++ b/app/src/main/java/com/etesync/syncadapter/ui/JournalItemActivity.kt @@ -108,7 +108,7 @@ class JournalItemActivity : BaseActivity(), Refreshable { val provider = contentResolver.acquireContentProviderClient(CalendarContract.CONTENT_URI)!! val localCalendar = LocalCalendar.findByName(account, provider, LocalCalendar.Factory, info.uid!!)!! val event = Event.eventsFromReader(StringReader(syncEntry.content))[0] - var localEvent = localCalendar.findByFilename(event.uid!!) + var localEvent = localCalendar.findByUid(event.uid!!) if (localEvent != null) { localEvent.updateAsDirty(event) } else { @@ -121,7 +121,7 @@ class JournalItemActivity : BaseActivity(), Refreshable { val provider = TaskProvider.acquire(this, it)!! val localTaskList = LocalTaskList.findByName(account, provider, LocalTaskList.Factory, info.uid!!)!! val task = Task.tasksFromReader(StringReader(syncEntry.content))[0] - var localTask = localTaskList.findByFilename(task.uid!!) + var localTask = localTaskList.findByUid(task.uid!!) if (localTask != null) { localTask.updateAsDirty(task) } else { @@ -137,7 +137,7 @@ class JournalItemActivity : BaseActivity(), Refreshable { if (contact.group) { // FIXME: not currently supported } else { - var localContact = localAddressBook.findByFilename(contact.uid!!) as LocalContact? + var localContact = localAddressBook.findByUid(contact.uid!!) as LocalContact? if (localContact != null) { localContact.updateAsDirty(contact) } else { diff --git a/app/src/main/java/com/etesync/syncadapter/ui/importlocal/ImportFragment.kt b/app/src/main/java/com/etesync/syncadapter/ui/importlocal/ImportFragment.kt index 6a3b5da8..c2bef3c9 100644 --- a/app/src/main/java/com/etesync/syncadapter/ui/importlocal/ImportFragment.kt +++ b/app/src/main/java/com/etesync/syncadapter/ui/importlocal/ImportFragment.kt @@ -250,7 +250,7 @@ class ImportFragment(private val account: Account, private val uid: String, priv for (event in events) { try { - var localEvent = localCalendar.findByFilename(event.uid!!) + var localEvent = localCalendar.findByUid(event.uid!!) if (localEvent != null) { localEvent.updateAsDirty(event) result.updated++ @@ -304,7 +304,7 @@ class ImportFragment(private val account: Account, private val uid: String, priv for (task in tasks) { try { - var localTask = localTaskList.findByFilename(task.uid!!) + var localTask = localTaskList.findByUid(task.uid!!) if (localTask != null) { localTask.updateAsDirty(task) result.updated++ @@ -348,7 +348,7 @@ class ImportFragment(private val account: Account, private val uid: String, priv for (contact in contacts.filter { contact -> !contact.group }) { try { - var localContact = localAddressBook.findByFilename(contact.uid!!) as LocalContact? + var localContact = localAddressBook.findByUid(contact.uid!!) as LocalContact? if (localContact != null) { localContact.updateAsDirty(contact) @@ -381,7 +381,7 @@ class ImportFragment(private val account: Account, private val uid: String, priv } val group = contact - var localGroup: LocalGroup? = localAddressBook.findByFilename(group.uid!!) as LocalGroup? + var localGroup: LocalGroup? = localAddressBook.findByUid(group.uid!!) as LocalGroup? if (localGroup != null) { localGroup.updateAsDirty(group, memberIds) diff --git a/app/src/main/java/com/etesync/syncadapter/ui/importlocal/LocalCalendarImportFragment.kt b/app/src/main/java/com/etesync/syncadapter/ui/importlocal/LocalCalendarImportFragment.kt index 92158852..094360a9 100644 --- a/app/src/main/java/com/etesync/syncadapter/ui/importlocal/LocalCalendarImportFragment.kt +++ b/app/src/main/java/com/etesync/syncadapter/ui/importlocal/LocalCalendarImportFragment.kt @@ -214,7 +214,7 @@ class LocalCalendarImportFragment(private val account: Account, private val uid: var localEvent = if (event == null || event.uid == null) null else - localCalendar.findByFilename(event.uid!!) + localCalendar.findByUid(event.uid!!) if (localEvent != null) { localEvent.updateAsDirty(event!!) diff --git a/app/src/main/java/com/etesync/syncadapter/ui/importlocal/LocalContactImportFragment.kt b/app/src/main/java/com/etesync/syncadapter/ui/importlocal/LocalContactImportFragment.kt index 8309ac65..86eeec35 100644 --- a/app/src/main/java/com/etesync/syncadapter/ui/importlocal/LocalContactImportFragment.kt +++ b/app/src/main/java/com/etesync/syncadapter/ui/importlocal/LocalContactImportFragment.kt @@ -152,7 +152,7 @@ class LocalContactImportFragment(private val account: Account, private val uid: var localContact: LocalContact? = if (contact.uid == null) null else - addressBook.findByFilename(contact.uid!!) as LocalContact? + addressBook.findByUid(contact.uid!!) as LocalContact? if (localContact != null) { localContact.updateAsDirty(contact) @@ -183,7 +183,7 @@ class LocalContactImportFragment(private val account: Account, private val uid: var localGroup: LocalGroup? = if (group.uid == null) null else - addressBook.findByFilename(group.uid!!) as LocalGroup? + addressBook.findByUid(group.uid!!) as LocalGroup? if (localGroup != null) { localGroup.updateAsDirty(group, members)