Convert CaldavCalendar to data class

pull/2068/head
Alex Baker 2 years ago
parent e529de066e
commit 9ed8486cfc

@ -43,7 +43,7 @@ class CaldavManualSortTaskAdapterTest : InjectingTestCase() {
private lateinit var adapter: CaldavManualSortTaskAdapter
private val tasks = ArrayList<TaskContainer>()
private val filter = CaldavFilter(CaldavCalendar("calendar", "1234"))
private val filter = CaldavFilter(CaldavCalendar(name = "calendar", uuid = "1234"))
private val dataSource = object : TaskAdapterDataSource {
override fun getItem(position: Int) = tasks[position]

@ -300,6 +300,6 @@ class TaskMoverTest : InjectingTestCase() {
}
private suspend fun moveToCaldavList(calendar: String, vararg tasks: Long) {
taskMover.move(tasks.toList(), CaldavFilter(CaldavCalendar("", calendar)))
taskMover.move(tasks.toList(), CaldavFilter(CaldavCalendar(name = "", uuid = calendar)))
}
}

@ -60,7 +60,7 @@ class DeletionDaoTests : InjectingTestCase() {
fun purgeDeletedLocalTask() = runBlocking {
val task = newTask(with(DELETION_TIME, newDateTime()))
taskDao.createNew(task)
caldavDao.insert(CaldavCalendar("", "1234").apply { account = LOCAL })
caldavDao.insert(CaldavCalendar(name = "", uuid = "1234", account = LOCAL))
caldavDao.insert(CaldavTask(task.id, "1234"))
deletionDao.purgeDeleted()
@ -72,7 +72,7 @@ class DeletionDaoTests : InjectingTestCase() {
fun dontPurgeActiveTasks() = runBlocking {
val task = newTask()
taskDao.createNew(task)
caldavDao.insert(CaldavCalendar("", "1234").apply { account = LOCAL })
caldavDao.insert(CaldavCalendar(name = "", uuid = "1234", account = LOCAL))
caldavDao.insert(CaldavTask(task.id, "1234"))
deletionDao.purgeDeleted()
@ -84,7 +84,7 @@ class DeletionDaoTests : InjectingTestCase() {
fun dontPurgeDeletedCaldavTask() = runBlocking {
val task = newTask(with(DELETION_TIME, newDateTime()))
taskDao.createNew(task)
caldavDao.insert(CaldavCalendar("", "1234").apply { account = UUIDHelper.newUUID() })
caldavDao.insert(CaldavCalendar(name = "", uuid = "1234", account = UUIDHelper.newUUID()))
caldavDao.insert(CaldavTask(task.id, "1234"))
deletionDao.purgeDeleted()

@ -129,8 +129,9 @@ class Upgrader @Inject constructor(
preferences.setInt(
R.string.p_theme_color, getAndroidColor(preferences.getInt(R.string.p_theme_color, 7)))
for (calendar in caldavDao.getCalendars()) {
calendar.color = getAndroidColor(calendar.color)
caldavDao.update(calendar)
caldavDao.update(
calendar.copy(color = getAndroidColor(calendar.color))
)
}
for (list in googleTaskListDao.getAllLists()) {
list.setColor(getAndroidColor(list.getColor()!!))

@ -109,8 +109,9 @@ class TasksJsonImporter @Inject constructor(
}
backupContainer.caldavCalendars?.forEach { calendar ->
if (caldavDao.getCalendarByUuid(calendar.uuid!!) == null) {
calendar.color = themeToColor(context, version, calendar.color)
caldavDao.insert(calendar)
caldavDao.insert(
calendar.copy(color = themeToColor(context, version, calendar.color))
)
}
}
backupContainer.taskListMetadata?.forEach { tlm ->

@ -155,13 +155,14 @@ abstract class BaseCaldavCalendarSettingsActivity : BaseListSettingsActivity() {
}
protected suspend fun createSuccessful(url: String?) {
val caldavCalendar = CaldavCalendar()
caldavCalendar.uuid = UUIDHelper.newUUID()
caldavCalendar.account = caldavAccount.uuid
caldavCalendar.url = url
caldavCalendar.name = newName
caldavCalendar.color = selectedColor
caldavCalendar.setIcon(selectedIcon)
val caldavCalendar = CaldavCalendar(
uuid = UUIDHelper.newUUID(),
account = caldavAccount.uuid,
url = url,
name = newName,
color = selectedColor,
icon = selectedIcon,
)
caldavDao.insert(caldavCalendar)
setResult(
Activity.RESULT_OK,

@ -9,13 +9,9 @@ import com.todoroo.astrid.service.TaskDeleter
import dagger.hilt.android.lifecycle.HiltViewModel
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext
import org.tasks.data.CaldavAccount
import org.tasks.data.CaldavCalendar
import org.tasks.data.*
import org.tasks.data.CaldavCalendar.Companion.ACCESS_READ_WRITE
import org.tasks.data.CaldavCalendar.Companion.INVITE_UNKNOWN
import org.tasks.data.CaldavDao
import org.tasks.data.PrincipalDao
import org.tasks.data.PrincipalWithAccess
import org.tasks.sync.SyncAdapters
import javax.inject.Inject
@ -39,13 +35,14 @@ class CaldavCalendarViewModel @Inject constructor(
val url = withContext(Dispatchers.IO) {
provider.forAccount(caldavAccount).makeCollection(name, color)
}
val calendar = CaldavCalendar().apply {
uuid = UUIDHelper.newUUID()
account = caldavAccount.uuid
this.url = url
this.name = name
this.color = color
setIcon(icon)
val calendar = CaldavCalendar(
uuid = UUIDHelper.newUUID(),
account = caldavAccount.uuid,
url = url,
name = name,
color = color,
icon = icon,
).apply {
caldavDao.insert(this)
}
if (!ignoreFinish) {

@ -1,26 +1,15 @@
package org.tasks.caldav
import android.content.Context
import at.bitfire.dav4jvm.DavCalendar
import at.bitfire.dav4jvm.*
import at.bitfire.dav4jvm.DavCalendar.Companion.MIME_ICALENDAR
import at.bitfire.dav4jvm.DavResource
import at.bitfire.dav4jvm.Property
import at.bitfire.dav4jvm.PropertyRegistry
import at.bitfire.dav4jvm.Response
import at.bitfire.dav4jvm.Response.HrefRelation
import at.bitfire.dav4jvm.exception.DavException
import at.bitfire.dav4jvm.exception.HttpException
import at.bitfire.dav4jvm.exception.ServiceUnavailableException
import at.bitfire.dav4jvm.exception.UnauthorizedException
import at.bitfire.dav4jvm.property.CalendarColor
import at.bitfire.dav4jvm.property.CalendarData
import at.bitfire.dav4jvm.property.CurrentUserPrincipal
import at.bitfire.dav4jvm.property.CurrentUserPrivilegeSet
import at.bitfire.dav4jvm.property.DisplayName
import at.bitfire.dav4jvm.property.GetCTag
import at.bitfire.dav4jvm.property.GetETag
import at.bitfire.dav4jvm.property.*
import at.bitfire.dav4jvm.property.GetETag.Companion.fromResponse
import at.bitfire.dav4jvm.property.SyncToken
import at.bitfire.ical4android.ICalendar.Companion.prodId
import com.todoroo.astrid.dao.TaskDao
import com.todoroo.astrid.data.Task
@ -39,25 +28,18 @@ import org.tasks.Strings.isNullOrEmpty
import org.tasks.analytics.Firebase
import org.tasks.billing.Inventory
import org.tasks.caldav.iCalendar.Companion.fromVtodo
import org.tasks.caldav.property.Invite
import org.tasks.caldav.property.OCAccess
import org.tasks.caldav.property.OCInvite
import org.tasks.caldav.property.OCOwnerPrincipal
import org.tasks.caldav.property.OCUser
import org.tasks.caldav.property.*
import org.tasks.caldav.property.PropertyUtils.register
import org.tasks.caldav.property.ShareAccess
import org.tasks.caldav.property.ShareAccess.Companion.READ
import org.tasks.caldav.property.ShareAccess.Companion.READ_WRITE
import org.tasks.caldav.property.ShareAccess.Companion.SHARED_OWNER
import org.tasks.caldav.property.Sharee
import org.tasks.data.CaldavAccount
import org.tasks.data.*
import org.tasks.data.CaldavAccount.Companion.ERROR_UNAUTHORIZED
import org.tasks.data.CaldavAccount.Companion.SERVER_OPEN_XCHANGE
import org.tasks.data.CaldavAccount.Companion.SERVER_OWNCLOUD
import org.tasks.data.CaldavAccount.Companion.SERVER_SABREDAV
import org.tasks.data.CaldavAccount.Companion.SERVER_TASKS
import org.tasks.data.CaldavAccount.Companion.SERVER_UNKNOWN
import org.tasks.data.CaldavCalendar
import org.tasks.data.CaldavCalendar.Companion.ACCESS_OWNER
import org.tasks.data.CaldavCalendar.Companion.ACCESS_READ_ONLY
import org.tasks.data.CaldavCalendar.Companion.ACCESS_READ_WRITE
@ -67,10 +49,6 @@ import org.tasks.data.CaldavCalendar.Companion.INVITE_DECLINED
import org.tasks.data.CaldavCalendar.Companion.INVITE_INVALID
import org.tasks.data.CaldavCalendar.Companion.INVITE_NO_RESPONSE
import org.tasks.data.CaldavCalendar.Companion.INVITE_UNKNOWN
import org.tasks.data.CaldavDao
import org.tasks.data.CaldavTask
import org.tasks.data.PrincipalAccess
import org.tasks.data.PrincipalDao
import timber.log.Timber
import java.io.IOException
import java.net.ConnectException
@ -178,13 +156,14 @@ class CaldavSynchronizer @Inject constructor(
}
val color = calendarColor?.color ?: 0
if (calendar == null) {
calendar = CaldavCalendar()
calendar.name = remoteName
calendar.account = account.uuid
calendar.url = url
calendar.uuid = UUIDHelper.newUUID()
calendar.color = color
calendar.access = access
calendar = CaldavCalendar(
name = remoteName,
account = account.uuid,
url = url,
uuid = UUIDHelper.newUUID(),
color = color,
access = access,
)
caldavDao.insert(calendar)
} else if (calendar.name != remoteName
|| calendar.color != color

@ -12,61 +12,35 @@ import com.todoroo.astrid.data.Task
import org.tasks.themes.CustomIcons.LIST
@Entity(tableName = "caldav_lists")
class CaldavCalendar : Parcelable {
data class CaldavCalendar(
@PrimaryKey(autoGenerate = true)
@ColumnInfo(name = "cdl_id")
@Transient
var id: Long = 0
@ColumnInfo(name = "cdl_account")
var account: String? = Task.NO_UUID
@ColumnInfo(name = "cdl_uuid")
var uuid: String? = Task.NO_UUID
@ColumnInfo(name = "cdl_name")
var name: String? = ""
@ColumnInfo(name = "cdl_color")
var color = 0
@ColumnInfo(name = "cdl_ctag")
var ctag: String? = null
@ColumnInfo(name = "cdl_url")
var url: String? = ""
@ColumnInfo(name = "cdl_icon")
private var icon: Int? = -1
@ColumnInfo(name = "cdl_order")
var order = NO_ORDER
@ColumnInfo(name = "cdl_access")
var access = ACCESS_OWNER
constructor()
@Ignore
constructor(name: String?, uuid: String?) {
this.name = name
this.uuid = uuid
}
@ColumnInfo(name = "cdl_id") var id: Long = 0,
@ColumnInfo(name = "cdl_account") val account: String? = Task.NO_UUID,
@ColumnInfo(name = "cdl_uuid") var uuid: String? = Task.NO_UUID,
@ColumnInfo(name = "cdl_name") var name: String? = "",
@ColumnInfo(name = "cdl_color") var color: Int = 0,
@ColumnInfo(name = "cdl_ctag") var ctag: String? = null,
@ColumnInfo(name = "cdl_url") var url: String? = "",
@ColumnInfo(name = "cdl_icon") private var icon: Int? = -1,
@ColumnInfo(name = "cdl_order") val order: Int = NO_ORDER,
@ColumnInfo(name = "cdl_access") var access: Int = ACCESS_OWNER,
) : Parcelable {
@Ignore
constructor(source: Parcel) {
id = source.readLong()
account = source.readString()
uuid = source.readString()
name = source.readString()
color = source.readInt()
ctag = source.readString()
url = source.readString()
icon = source.readInt()
order = source.readInt()
access = source.readInt()
}
constructor(source: Parcel): this(
id = source.readLong(),
account = source.readString(),
uuid = source.readString(),
name = source.readString(),
color = source.readInt(),
ctag = source.readString(),
url = source.readString(),
icon = source.readInt(),
order = source.readInt(),
access = source.readInt(),
)
@Suppress("RedundantNullableReturnType")
fun getIcon(): Int? {
return (if (icon == null) LIST else icon!!)
}
@ -92,42 +66,6 @@ class CaldavCalendar : Parcelable {
}
}
override fun equals(other: Any?): Boolean {
if (this === other) return true
if (other !is CaldavCalendar) return false
if (id != other.id) return false
if (account != other.account) return false
if (uuid != other.uuid) return false
if (name != other.name) return false
if (color != other.color) return false
if (ctag != other.ctag) return false
if (url != other.url) return false
if (icon != other.icon) return false
if (order != other.order) return false
if (access != other.access) return false
return true
}
override fun hashCode(): Int {
var result = id.hashCode()
result = 31 * result + (account?.hashCode() ?: 0)
result = 31 * result + (uuid?.hashCode() ?: 0)
result = 31 * result + (name?.hashCode() ?: 0)
result = 31 * result + color
result = 31 * result + (ctag?.hashCode() ?: 0)
result = 31 * result + (url?.hashCode() ?: 0)
result = 31 * result + (icon ?: 0)
result = 31 * result + order
result = 31 * result + access
return result
}
override fun toString(): String {
return "CaldavCalendar(id=$id, account=$account, uuid=$uuid, name=$name, color=$color, ctag=$ctag, url=$url, icon=$icon, order=$order, access=$access)"
}
companion object {
const val ACCESS_UNKNOWN = -1
const val ACCESS_OWNER = 0
@ -140,10 +78,10 @@ class CaldavCalendar : Parcelable {
const val INVITE_DECLINED = 2
const val INVITE_INVALID = 3
@JvmField val TABLE = Table("caldav_lists")
val TABLE = Table("caldav_lists")
val ACCOUNT = TABLE.column("cdl_account")
@JvmField val UUID = TABLE.column("cdl_uuid")
@JvmField val NAME = TABLE.column("cdl_name")
val UUID = TABLE.column("cdl_uuid")
val NAME = TABLE.column("cdl_name")
@JvmField val CREATOR: Parcelable.Creator<CaldavCalendar> = object : Parcelable.Creator<CaldavCalendar> {
override fun createFromParcel(source: Parcel): CaldavCalendar = CaldavCalendar(source)

@ -338,8 +338,11 @@ GROUP BY caldav_lists.cdl_uuid
private suspend fun getLocalList(context: Context, account: CaldavAccount): CaldavCalendar =
getCalendarsByAccount(account.uuid!!).getOrNull(0)
?: CaldavCalendar(context.getString(R.string.default_list), UUIDHelper.newUUID()).apply {
this.account = account.uuid
?: CaldavCalendar(
name = context.getString(R.string.default_list),
uuid = UUIDHelper.newUUID(),
account = account.uuid,
).apply {
insert(this)
}

@ -47,16 +47,18 @@ open class OpenTaskDao @Inject constructor(
while (it.moveToNext()) {
val accountType = it.getString(TaskLists.ACCOUNT_TYPE)
val accountName = it.getString(TaskLists.ACCOUNT_NAME)
calendars.add(CaldavCalendar().apply {
id = it.getLong(TaskLists._ID)
account = "$accountType:$accountName"
name = it.getString(TaskLists.LIST_NAME)
color = it.getInt(TaskLists.LIST_COLOR)
url = it.getString(CommonSyncColumns._SYNC_ID)
ctag = it.getString(TaskLists.SYNC_VERSION)
calendars.add(
CaldavCalendar(
id = it.getLong(TaskLists._ID),
account = "$accountType:$accountName",
name = it.getString(TaskLists.LIST_NAME),
color = it.getInt(TaskLists.LIST_COLOR),
url = it.getString(CommonSyncColumns._SYNC_ID),
ctag = it.getString(TaskLists.SYNC_VERSION)
?.let(::JSONObject)
?.getString("value")
})
)
)
}
}
calendars
@ -164,16 +166,15 @@ open class OpenTaskDao @Inject constructor(
getLong(getColumnIndexOrThrow(columnName))
fun CaldavCalendar.toLocalCalendar(): CaldavCalendar {
val remote = this
return CaldavCalendar().apply {
return CaldavCalendar(
uuid = UUID
.nameUUIDFromBytes("${account.openTaskType()}${remote.url}".toByteArray())
.toString()
url = remote.url
color = remote.color
name = remote.name
account = remote.account
}
.nameUUIDFromBytes("${account.openTaskType()}$url".toByteArray())
.toString(),
url = url,
color = color,
name = name,
account = account,
)
}
}
}

@ -85,12 +85,13 @@ class EtebaseSynchronizer @Inject constructor(
val meta = collection.meta
val color = meta.color?.let { Color.parseColor(it) } ?: 0
if (calendar == null) {
calendar = CaldavCalendar()
calendar.name = meta.name
calendar.account = account.uuid
calendar.url = collection.uid
calendar.uuid = UUIDHelper.newUUID()
calendar.color = color
calendar = CaldavCalendar(
name = meta.name,
account = account.uuid,
url = collection.uid,
uuid = UUIDHelper.newUUID(),
color = color,
)
caldavDao.insert(calendar)
} else if (calendar.name != meta.name || calendar.color != color) {
calendar.name = meta.name

@ -28,9 +28,12 @@ class MigrateLocalWork @AssistedInject constructor(
val caldavAccount = caldavDao.getAccountByUuid(uuid) ?: return Result.failure()
val caldavClient = clientProvider.forAccount(caldavAccount)
caldavDao.getCalendarsByAccount(CaldavDao.LOCAL).forEach {
it.url = caldavClient.makeCollection(it.name!!, it.color)
it.account = caldavAccount.uuid
caldavDao.update(it)
caldavDao.update(
it.copy(
url = caldavClient.makeCollection(it.name!!, it.color),
account = caldavAccount.uuid,
)
)
}
preferences.setBoolean(R.string.p_lists_enabled, false)
syncAdapters.sync()

@ -49,8 +49,9 @@ class MicrosoftListSettingsActivityViewModel @Inject constructor(
val body = Gson().toJson(taskList).toRequestBody(MEDIA_TYPE_JSON)
val result = microsoftService.createList(body)
if (result.isSuccessful) {
val list = CaldavCalendar().apply {
val list = CaldavCalendar(
account = this@MicrosoftListSettingsActivityViewModel.account.uuid
).apply {
result.body()?.applyTo(this)
}
caldavDao.insert(list)

Loading…
Cancel
Save