Calendar UID derived from _sync_id

pull/1074/head
Alex Baker 5 years ago
parent 1c122b9e1f
commit a759f1bd8c

@ -13,7 +13,6 @@ import com.todoroo.astrid.service.Upgrader.Companion.getAndroidColor
import org.tasks.LocalBroadcastManager import org.tasks.LocalBroadcastManager
import org.tasks.R import org.tasks.R
import org.tasks.data.* import org.tasks.data.*
import org.tasks.data.CaldavAccount.Companion.TYPE_LOCAL
import org.tasks.data.Place.Companion.newPlace import org.tasks.data.Place.Companion.newPlace
import org.tasks.preferences.Preferences import org.tasks.preferences.Preferences
import timber.log.Timber import timber.log.Timber
@ -100,17 +99,10 @@ class TasksJsonImporter @Inject constructor(
} }
} }
backupContainer.caldavCalendars?.forEach { calendar -> backupContainer.caldavCalendars?.forEach { calendar ->
val account = caldavDao.getAccountByUuid(calendar.account!!)!! if (caldavDao.getCalendarByUuid(calendar.uuid!!) == null) {
when (account.accountType) { calendar.color = themeToColor(context, version, calendar.color)
TYPE_LOCAL -> if (caldavDao.getCalendarByUuid(calendar.uuid!!) != null) { caldavDao.insert(calendar)
return@forEach
}
else -> if (caldavDao.getCalendarByUrl(calendar.account!!, calendar.url!!) != null) {
return@forEach
}
} }
calendar.color = themeToColor(context, version, calendar.color)
caldavDao.insert(calendar)
} }
backupContainer.taskListMetadata?.forEach { tlm -> backupContainer.taskListMetadata?.forEach { tlm ->
val id = tlm.filter.takeIf { it?.isNotBlank() == true } ?: tlm.tagUuid!! val id = tlm.filter.takeIf { it?.isNotBlank() == true } ?: tlm.tagUuid!!
@ -130,14 +122,12 @@ class TasksJsonImporter @Inject constructor(
result.skipCount++ result.skipCount++
return@forEach return@forEach
} }
backup.caldavTasks if (true == backup.caldavTasks
?.filter { it.deleted == 0L } ?.filter { it.deleted == 0L }
?.any { caldavDao.getCalendar(it.calendar!!) == null } ?.any { caldavDao.getTask(it.calendar!!, it.`object`!!) != null }) {
?.takeIf { it } result.skipCount++
?.let { return@forEach
result.skipCount++ }
return@forEach
}
task.suppressRefresh() task.suppressRefresh()
task.suppressSync() task.suppressSync()
taskDao.createNew(task) taskDao.createNew(task)

@ -91,7 +91,7 @@ class CaldavAccount : Parcelable {
get() = accountType == TYPE_OPENTASKS get() = accountType == TYPE_OPENTASKS
val isOpenTaskEteSync: Boolean val isOpenTaskEteSync: Boolean
get() = uuid?.split(":")?.get(0) == ACCOUNT_TYPE_ETESYNC get() = uuid.openTaskType() == ACCOUNT_TYPE_ETESYNC
fun listSettingsClass(): Class<out BaseListSettingsActivity> = when(accountType) { fun listSettingsClass(): Class<out BaseListSettingsActivity> = when(accountType) {
TYPE_ETESYNC -> EteSyncCalendarSettingsActivity::class.java TYPE_ETESYNC -> EteSyncCalendarSettingsActivity::class.java
@ -160,6 +160,8 @@ class CaldavAccount : Parcelable {
const val TYPE_LOCAL = 2 const val TYPE_LOCAL = 2
const val TYPE_OPENTASKS = 3 const val TYPE_OPENTASKS = 3
fun String?.openTaskType(): String? = this?.split(":")?.get(0)
@JvmField val CREATOR: Parcelable.Creator<CaldavAccount> = object : Parcelable.Creator<CaldavAccount> { @JvmField val CREATOR: Parcelable.Creator<CaldavAccount> = object : Parcelable.Creator<CaldavAccount> {
override fun createFromParcel(source: Parcel): CaldavAccount? { override fun createFromParcel(source: Parcel): CaldavAccount? {
return CaldavAccount(source) return CaldavAccount(source)

@ -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
import com.todoroo.astrid.data.Task.Companion.URGENCY_SPECIFIC_DAY_TIME import com.todoroo.astrid.data.Task.Companion.URGENCY_SPECIFIC_DAY_TIME
import com.todoroo.astrid.data.Task.Companion.sanitizeRRule 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.TaskCreator
import com.todoroo.astrid.service.TaskDeleter import com.todoroo.astrid.service.TaskDeleter
import dagger.hilt.android.qualifiers.ApplicationContext 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.CaldavConverter.toRemote
import org.tasks.caldav.iCalendar import org.tasks.caldav.iCalendar
import org.tasks.data.* import org.tasks.data.*
import org.tasks.data.CaldavAccount.Companion.openTaskType
import org.tasks.data.OpenTaskDao.Companion.getInt import org.tasks.data.OpenTaskDao.Companion.getInt
import org.tasks.data.OpenTaskDao.Companion.getLong import org.tasks.data.OpenTaskDao.Companion.getLong
import org.tasks.data.OpenTaskDao.Companion.getString import org.tasks.data.OpenTaskDao.Companion.getString
@ -77,11 +77,12 @@ class OpenTasksSynchronizer @Inject constructor(
} }
private suspend fun sync(account: CaldavAccount, lists: List<CaldavCalendar>) { private suspend fun sync(account: CaldavAccount, lists: List<CaldavCalendar>) {
val uuid = account.uuid!!
caldavDao caldavDao
.findDeletedCalendars(account.uuid!!, lists.mapNotNull { it.url }) .findDeletedCalendars(uuid, lists.mapNotNull { it.url })
.forEach { taskDeleter.delete(it) } .forEach { taskDeleter.delete(it) }
lists.forEach { lists.forEach {
val calendar = toLocalCalendar(account.uuid!!, it) val calendar = toLocalCalendar(uuid, it)
sync(account, calendar, it.ctag, it.id) sync(account, calendar, it.ctag, it.id)
} }
setError(account, null) setError(account, null)
@ -89,7 +90,9 @@ class OpenTasksSynchronizer @Inject constructor(
private suspend fun toLocalCalendar(account: String, remote: CaldavCalendar): CaldavCalendar { private suspend fun toLocalCalendar(account: String, remote: CaldavCalendar): CaldavCalendar {
val local = caldavDao.getCalendarByUrl(account, remote.url!!) ?: CaldavCalendar().apply { val local = caldavDao.getCalendarByUrl(account, remote.url!!) ?: CaldavCalendar().apply {
uuid = UUIDHelper.newUUID() uuid = UUID
.nameUUIDFromBytes("${account.openTaskType()}${remote.url}".toByteArray())
.toString()
url = remote.url url = remote.url
this.account = account this.account = account
caldavDao.insert(this) caldavDao.insert(this)

Loading…
Cancel
Save