diff --git a/app/src/main/java/org/tasks/backup/TasksJsonImporter.kt b/app/src/main/java/org/tasks/backup/TasksJsonImporter.kt index 16b0a8092..d48320e45 100644 --- a/app/src/main/java/org/tasks/backup/TasksJsonImporter.kt +++ b/app/src/main/java/org/tasks/backup/TasksJsonImporter.kt @@ -13,7 +13,6 @@ import com.todoroo.astrid.service.Upgrader.Companion.getAndroidColor import org.tasks.LocalBroadcastManager import org.tasks.R import org.tasks.data.* -import org.tasks.data.CaldavAccount.Companion.TYPE_LOCAL import org.tasks.data.Place.Companion.newPlace import org.tasks.preferences.Preferences import timber.log.Timber @@ -100,17 +99,10 @@ class TasksJsonImporter @Inject constructor( } } backupContainer.caldavCalendars?.forEach { calendar -> - val account = caldavDao.getAccountByUuid(calendar.account!!)!! - when (account.accountType) { - TYPE_LOCAL -> if (caldavDao.getCalendarByUuid(calendar.uuid!!) != null) { - return@forEach - } - else -> if (caldavDao.getCalendarByUrl(calendar.account!!, calendar.url!!) != null) { - return@forEach - } + if (caldavDao.getCalendarByUuid(calendar.uuid!!) == null) { + calendar.color = themeToColor(context, version, calendar.color) + caldavDao.insert(calendar) } - calendar.color = themeToColor(context, version, calendar.color) - caldavDao.insert(calendar) } backupContainer.taskListMetadata?.forEach { tlm -> val id = tlm.filter.takeIf { it?.isNotBlank() == true } ?: tlm.tagUuid!! @@ -130,14 +122,12 @@ class TasksJsonImporter @Inject constructor( result.skipCount++ return@forEach } - backup.caldavTasks - ?.filter { it.deleted == 0L } - ?.any { caldavDao.getCalendar(it.calendar!!) == null } - ?.takeIf { it } - ?.let { - result.skipCount++ - return@forEach - } + if (true == backup.caldavTasks + ?.filter { it.deleted == 0L } + ?.any { caldavDao.getTask(it.calendar!!, it.`object`!!) != null }) { + result.skipCount++ + return@forEach + } task.suppressRefresh() task.suppressSync() taskDao.createNew(task) diff --git a/app/src/main/java/org/tasks/data/CaldavAccount.kt b/app/src/main/java/org/tasks/data/CaldavAccount.kt index 35e9cf876..70f569b2e 100644 --- a/app/src/main/java/org/tasks/data/CaldavAccount.kt +++ b/app/src/main/java/org/tasks/data/CaldavAccount.kt @@ -91,7 +91,7 @@ class CaldavAccount : Parcelable { get() = accountType == TYPE_OPENTASKS val isOpenTaskEteSync: Boolean - get() = uuid?.split(":")?.get(0) == ACCOUNT_TYPE_ETESYNC + get() = uuid.openTaskType() == ACCOUNT_TYPE_ETESYNC fun listSettingsClass(): Class = when(accountType) { TYPE_ETESYNC -> EteSyncCalendarSettingsActivity::class.java @@ -160,6 +160,8 @@ class CaldavAccount : Parcelable { const val TYPE_LOCAL = 2 const val TYPE_OPENTASKS = 3 + fun String?.openTaskType(): String? = this?.split(":")?.get(0) + @JvmField val CREATOR: Parcelable.Creator = object : Parcelable.Creator { override fun createFromParcel(source: Parcel): CaldavAccount? { return CaldavAccount(source) diff --git a/app/src/main/java/org/tasks/opentasks/OpenTasksSynchronizer.kt b/app/src/main/java/org/tasks/opentasks/OpenTasksSynchronizer.kt index d78fa1979..868a75861 100644 --- a/app/src/main/java/org/tasks/opentasks/OpenTasksSynchronizer.kt +++ b/app/src/main/java/org/tasks/opentasks/OpenTasksSynchronizer.kt @@ -10,7 +10,6 @@ import com.todoroo.astrid.data.Task import com.todoroo.astrid.data.Task.Companion.URGENCY_SPECIFIC_DAY import com.todoroo.astrid.data.Task.Companion.URGENCY_SPECIFIC_DAY_TIME import com.todoroo.astrid.data.Task.Companion.sanitizeRRule -import com.todoroo.astrid.helper.UUIDHelper import com.todoroo.astrid.service.TaskCreator import com.todoroo.astrid.service.TaskDeleter import dagger.hilt.android.qualifiers.ApplicationContext @@ -26,6 +25,7 @@ import org.tasks.caldav.CaldavConverter import org.tasks.caldav.CaldavConverter.toRemote import org.tasks.caldav.iCalendar import org.tasks.data.* +import org.tasks.data.CaldavAccount.Companion.openTaskType import org.tasks.data.OpenTaskDao.Companion.getInt import org.tasks.data.OpenTaskDao.Companion.getLong import org.tasks.data.OpenTaskDao.Companion.getString @@ -77,11 +77,12 @@ class OpenTasksSynchronizer @Inject constructor( } private suspend fun sync(account: CaldavAccount, lists: List) { + val uuid = account.uuid!! caldavDao - .findDeletedCalendars(account.uuid!!, lists.mapNotNull { it.url }) + .findDeletedCalendars(uuid, lists.mapNotNull { it.url }) .forEach { taskDeleter.delete(it) } lists.forEach { - val calendar = toLocalCalendar(account.uuid!!, it) + val calendar = toLocalCalendar(uuid, it) sync(account, calendar, it.ctag, it.id) } setError(account, null) @@ -89,7 +90,9 @@ class OpenTasksSynchronizer @Inject constructor( private suspend fun toLocalCalendar(account: String, remote: CaldavCalendar): CaldavCalendar { val local = caldavDao.getCalendarByUrl(account, remote.url!!) ?: CaldavCalendar().apply { - uuid = UUIDHelper.newUUID() + uuid = UUID + .nameUUIDFromBytes("${account.openTaskType()}${remote.url}".toByteArray()) + .toString() url = remote.url this.account = account caldavDao.insert(this)