1
0
mirror of https://github.com/etesync/android synced 2025-05-29 20:28:48 +00:00

Revert: Import: always import, don't try to find duplicates based on UID

This is somehow a revert of 536bef9815.

It was initially implemented as a workaround for #24, but having
improved all the clients to deal with weird UIDs and matured a lot since
then, I believe this is no longer an issue.

Would have to keep a close eye for regressions.
This commit is contained in:
Tom Hacohen 2019-07-06 10:31:49 +01:00
parent bbd40e0255
commit 1f9e7fa6a6
3 changed files with 92 additions and 26 deletions

View File

@ -31,6 +31,8 @@ import java.io.FileNotFoundException
import java.io.IOException import java.io.IOException
import java.io.InputStream import java.io.InputStream
import java.io.InputStreamReader import java.io.InputStreamReader
import com.etesync.syncadapter.resource.LocalEvent
class ImportFragment : DialogFragment() { class ImportFragment : DialogFragment() {
@ -247,9 +249,15 @@ class ImportFragment : DialogFragment() {
for (event in events) { for (event in events) {
try { try {
val localEvent = LocalEvent(localCalendar, event, event.uid, null) var localEvent = localCalendar.findByUid(event.uid!!)
localEvent.addAsDirty() if (localEvent != null) {
result.added++ localEvent.updateAsDirty(event)
result.updated++
} else {
localEvent = LocalEvent(localCalendar, event, event.uid, null)
localEvent.addAsDirty()
result.added++
}
} catch (e: CalendarStorageException) { } catch (e: CalendarStorageException) {
e.printStackTrace() e.printStackTrace()
} }
@ -285,9 +293,15 @@ class ImportFragment : DialogFragment() {
for (task in tasks) { for (task in tasks) {
try { try {
val localTask = LocalTask(localTaskList, task, task.uid, null) var localTask = localTaskList.findByUid(task.uid!!)
localTask.addAsDirty() if (localTask != null) {
result.added++ localTask.updateAsDirty(task)
result.updated++
} else {
localTask = LocalTask(localTaskList, task, task.uid, null)
localTask.addAsDirty()
result.added++
}
} catch (e: CalendarStorageException) { } catch (e: CalendarStorageException) {
e.printStackTrace() e.printStackTrace()
} }
@ -295,7 +309,7 @@ class ImportFragment : DialogFragment() {
entryProcessed() entryProcessed()
} }
} else if (info.type == CollectionInfo.Type.ADDRESS_BOOK) { } else if (info.type == CollectionInfo.Type.ADDRESS_BOOK) {
val oldUidToNewId = HashMap<String?, Long>() val uidToLocalId = HashMap<String?, Long>()
val downloader = ContactsSyncManager.ResourceDownloader(context) val downloader = ContactsSyncManager.ResourceDownloader(context)
val contacts = Contact.fromReader(importReader, downloader) val contacts = Contact.fromReader(importReader, downloader)
@ -317,10 +331,18 @@ class ImportFragment : DialogFragment() {
for (contact in contacts.filter { contact -> !contact.group }) { for (contact in contacts.filter { contact -> !contact.group }) {
try { try {
val localContact = LocalContact(localAddressBook, contact, null, null) var localContact = localAddressBook.findByUid(contact.uid!!) as LocalContact?
localContact.createAsDirty()
// If uid is null, so be it. We won't be able to process the group later. if (localContact != null) {
oldUidToNewId[contact.uid] = localContact.id!! localContact.updateAsDirty(contact)
result.updated++
} else {
localContact = LocalContact(localAddressBook, contact, contact.uid, null)
localContact.createAsDirty()
result.added++
}
uidToLocalId[contact.uid] = localContact.id!!
// Apply categories // Apply categories
val batch = BatchOperation(localAddressBook.provider!!) val batch = BatchOperation(localAddressBook.provider!!)
@ -339,13 +361,21 @@ class ImportFragment : DialogFragment() {
for (contact in contacts.filter { contact -> contact.group }) { for (contact in contacts.filter { contact -> contact.group }) {
try { try {
val localGroup = LocalGroup(localAddressBook, contact, null, null)
val memberIds = contact.members.mapNotNull { memberUid -> val memberIds = contact.members.mapNotNull { memberUid ->
oldUidToNewId[memberUid] uidToLocalId[memberUid]
} }
localGroup.createAsDirty(memberIds)
result.added++ val group = contact
var localGroup: LocalGroup? = localAddressBook.findByUid(group.uid!!) as LocalGroup?
if (localGroup != null) {
localGroup.updateAsDirty(group, memberIds)
result.updated++
} else {
localGroup = LocalGroup(localAddressBook, group, group.uid, null)
localGroup.createAsDirty(memberIds)
result.added++
}
} catch (e: ContactsStorageException) { } catch (e: ContactsStorageException) {
e.printStackTrace() e.printStackTrace()
} }

View File

@ -22,6 +22,7 @@ import com.etesync.syncadapter.model.CollectionInfo
import com.etesync.syncadapter.resource.LocalCalendar import com.etesync.syncadapter.resource.LocalCalendar
import com.etesync.syncadapter.resource.LocalEvent import com.etesync.syncadapter.resource.LocalEvent
class LocalCalendarImportFragment : ListFragment() { class LocalCalendarImportFragment : ListFragment() {
private lateinit var account: Account private lateinit var account: Account
@ -209,9 +210,21 @@ class LocalCalendarImportFragment : ListFragment() {
for (currentLocalEvent in localEvents) { for (currentLocalEvent in localEvents) {
val event = currentLocalEvent.event val event = currentLocalEvent.event
try { try {
val localEvent = LocalEvent(localCalendar!!, event!!, null, null) localCalendar!!
localEvent.addAsDirty()
result.added++ var localEvent = if (event == null || event.uid == null)
null
else
localCalendar.findByUid(event.uid!!)
if (localEvent != null) {
localEvent.updateAsDirty(event!!)
result.updated++
} else {
localEvent = LocalEvent(localCalendar, event!!, event.uid, null)
localEvent.addAsDirty()
result.added++
}
} catch (e: CalendarStorageException) { } catch (e: CalendarStorageException) {
e.printStackTrace() e.printStackTrace()

View File

@ -29,7 +29,7 @@ import com.etesync.syncadapter.resource.LocalAddressBook
import com.etesync.syncadapter.resource.LocalContact import com.etesync.syncadapter.resource.LocalContact
import com.etesync.syncadapter.resource.LocalGroup import com.etesync.syncadapter.resource.LocalGroup
import java.util.* import java.util.*
import kotlin.collections.HashMap
class LocalContactImportFragment : Fragment() { class LocalContactImportFragment : Fragment() {
@ -147,10 +147,22 @@ class LocalContactImportFragment : Fragment() {
val contact = currentLocalContact.contact val contact = currentLocalContact.contact
try { try {
val localContact = LocalContact(addressBook, contact!!, null, null) contact!!
localContact.createAsDirty() var localContact: LocalContact? = if (contact.uid == null)
null
else
addressBook.findByUid(contact.uid!!) as LocalContact
if (localContact != null) {
localContact.updateAsDirty(contact)
result.updated++
} else {
localContact = LocalContact(addressBook, contact, contact.uid, null)
localContact.createAsDirty()
result.added++
}
oldIdToNewId[currentLocalContact.id!!] = localContact.id!! oldIdToNewId[currentLocalContact.id!!] = localContact.id!!
result.added++
} catch (e: ContactsStorageException) { } catch (e: ContactsStorageException) {
e.printStackTrace() e.printStackTrace()
result.e = e result.e = e
@ -162,13 +174,24 @@ class LocalContactImportFragment : Fragment() {
val group = currentLocalGroup.contact val group = currentLocalGroup.contact
try { try {
val localGroup = LocalGroup(addressBook, group!!, null, null) val members = currentLocalGroup.getMembers().map {
val members = currentLocalGroup.getMembers().map { it ->
oldIdToNewId[it]!! oldIdToNewId[it]!!
} }
group!!
localGroup.createAsDirty(members) var localGroup: LocalGroup? = if (group.uid == null)
result.added++ null
else
addressBook.findByUid(group.uid!!) as LocalGroup
if (localGroup != null) {
localGroup.updateAsDirty(group, members)
result.updated++
} else {
localGroup = LocalGroup(addressBook, group, group.uid, null)
localGroup.createAsDirty(members)
result.added++
}
} catch (e: ContactsStorageException) { } catch (e: ContactsStorageException) {
e.printStackTrace() e.printStackTrace()
result.e = e result.e = e