From a45959052b4a2b4a70b200293be5cf23e80da6b8 Mon Sep 17 00:00:00 2001 From: Alex Baker Date: Sat, 3 Jun 2023 14:10:19 -0500 Subject: [PATCH] Make CaldavTask.task immutable --- .../java/org/tasks/data/GoogleTaskDaoTests.kt | 7 +++-- .../org/tasks/backup/TasksJsonImporter.kt | 3 +-- .../main/java/org/tasks/caldav/iCalendar.kt | 27 ++++++++++--------- .../main/java/org/tasks/data/CaldavTask.kt | 2 +- .../tasks/gtasks/GoogleTaskSynchronizer.kt | 19 ++++++++----- 5 files changed, 34 insertions(+), 24 deletions(-) diff --git a/app/src/androidTest/java/org/tasks/data/GoogleTaskDaoTests.kt b/app/src/androidTest/java/org/tasks/data/GoogleTaskDaoTests.kt index 2ef5ca9fa..3b6bde9af 100644 --- a/app/src/androidTest/java/org/tasks/data/GoogleTaskDaoTests.kt +++ b/app/src/androidTest/java/org/tasks/data/GoogleTaskDaoTests.kt @@ -257,8 +257,11 @@ class GoogleTaskDaoTests : InjectingTestCase() { private suspend fun insert(googleTask: CaldavTask, top: Boolean = false) { val task = newTask() taskDao.createNew(task) - googleTask.task = task.id - googleTaskDao.insertAndShift(task, googleTask, top) + googleTaskDao.insertAndShift( + task, + googleTask.copy(task = task.id), + top + ) } private suspend fun getByRemoteId(remoteId: String): CaldavTask { diff --git a/app/src/main/java/org/tasks/backup/TasksJsonImporter.kt b/app/src/main/java/org/tasks/backup/TasksJsonImporter.kt index 0189545a5..ab10764e8 100644 --- a/app/src/main/java/org/tasks/backup/TasksJsonImporter.kt +++ b/app/src/main/java/org/tasks/backup/TasksJsonImporter.kt @@ -262,8 +262,7 @@ class TasksJsonImporter @Inject constructor( } ?.let { taskAttachmentDao.insert(it) } backup.caldavTasks?.forEach { caldavTask -> - caldavTask.task = taskId - caldavDao.insert(caldavTask) + caldavDao.insert(caldavTask.copy(task = taskId)) } backup.vtodo?.let { val caldavTask = diff --git a/app/src/main/java/org/tasks/caldav/iCalendar.kt b/app/src/main/java/org/tasks/caldav/iCalendar.kt index 4aaffc61a..424a80d8e 100644 --- a/app/src/main/java/org/tasks/caldav/iCalendar.kt +++ b/app/src/main/java/org/tasks/caldav/iCalendar.kt @@ -199,18 +199,21 @@ class iCalendar @Inject constructor( obj: String? = null, eTag: String? = null ) { - val task = existing?.task?.let { taskDao.fetch(it) } - ?: taskCreator.createWithValues("").apply { - readOnly = calendar.access == ACCESS_READ_ONLY - taskDao.createNew(this) - existing?.task = id - } - val caldavTask = existing ?: CaldavTask( - task = task.id, - calendar = calendar.uuid, - remoteId = remote.uid, - `object` = obj - ) + val task = existing?.task + ?.let { taskDao.fetch(it) } + ?: taskCreator.createWithValues("").apply { + readOnly = calendar.access == ACCESS_READ_ONLY + taskDao.createNew(this) + } + val caldavTask = + existing + ?.copy(task = task.id) + ?: CaldavTask( + task = task.id, + calendar = calendar.uuid, + remoteId = remote.uid, + `object` = obj + ) val isNew = caldavTask.id == com.todoroo.astrid.data.Task.NO_ID val dirty = task.modificationDate > caldavTask.lastSync || caldavTask.lastSync == 0L val local = vtodoCache.getVtodo(calendar, caldavTask)?.let { fromVtodo(it) } diff --git a/app/src/main/java/org/tasks/data/CaldavTask.kt b/app/src/main/java/org/tasks/data/CaldavTask.kt index 3ba8fd54c..740cd72e3 100644 --- a/app/src/main/java/org/tasks/data/CaldavTask.kt +++ b/app/src/main/java/org/tasks/data/CaldavTask.kt @@ -26,7 +26,7 @@ data class CaldavTask( val id: Long = 0, @ColumnInfo(name = "cd_task", index = true) @Transient - var task: Long, + val task: Long, @ColumnInfo(name = "cd_calendar") var calendar: String?, @ColumnInfo(name = "cd_remote_id") diff --git a/app/src/main/java/org/tasks/gtasks/GoogleTaskSynchronizer.kt b/app/src/main/java/org/tasks/gtasks/GoogleTaskSynchronizer.kt index 08961efa7..4abfcd1a2 100644 --- a/app/src/main/java/org/tasks/gtasks/GoogleTaskSynchronizer.kt +++ b/app/src/main/java/org/tasks/gtasks/GoogleTaskSynchronizer.kt @@ -377,13 +377,18 @@ class GoogleTaskSynchronizer @Inject constructor( alarmDao.insert(task.getDefaultAlarms()) } taskDao.save(task) - googleTask.lastSync = task.modificationDate - googleTask.task = task.id - if (googleTask.id == 0L) { - googleTaskDao.insert(googleTask) - } else { - googleTaskDao.update(googleTask) - } + googleTask + .copy( + task = task.id, + lastSync = task.modificationDate, + ) + .let { + if (it.id == 0L) { + googleTaskDao.insert(it) + } else { + googleTaskDao.update(it) + } + } } companion object {