diff --git a/app/src/main/java/org/tasks/backup/BackupContainer.kt b/app/src/main/java/org/tasks/backup/BackupContainer.kt index 2685be3a1..3f0cc42c8 100644 --- a/app/src/main/java/org/tasks/backup/BackupContainer.kt +++ b/app/src/main/java/org/tasks/backup/BackupContainer.kt @@ -42,15 +42,14 @@ class BackupContainer( @Serializable class TaskBackup( val task: Task, - val alarms: List, + val alarms: List?, val geofences: List?, - val tags: List, - val comments: List, + val tags: List?, + val comments: List?, val attachments: List?, val caldavTasks: List?, - val vtodo: String? = null, - val google: List = emptyList(), - ) { - val locations: List = emptyList() - } + val vtodo: String?, + val google: List? = null, + val locations: List? = null, + ) } \ No newline at end of file diff --git a/app/src/main/java/org/tasks/backup/TasksJsonImporter.kt b/app/src/main/java/org/tasks/backup/TasksJsonImporter.kt index 4450cb10b..505de7583 100644 --- a/app/src/main/java/org/tasks/backup/TasksJsonImporter.kt +++ b/app/src/main/java/org/tasks/backup/TasksJsonImporter.kt @@ -92,7 +92,7 @@ class TasksJsonImporter @Inject constructor( try { val data = input.jsonObject["data"]!! val version = input.jsonObject["version"]!!.jsonPrimitive.int - val backupContainer = Json.decodeFromJsonElement(data) + val backupContainer = json.decodeFromJsonElement(data) backupContainer.tags?.forEach { tagData -> findTagData(tagData)?.let { return@forEach @@ -203,7 +203,7 @@ class TasksJsonImporter @Inject constructor( taskDao.createNew(task) val taskId = task.id val taskUuid = task.uuid - alarmDao.insert(backup.alarms.map { it.copy(task = taskId) }) + backup.alarms?.map { it.copy(task = taskId) }?.let { alarmDao.insert(it) } if (version < V12_4) { task.defaultReminders(task.ringFlags) alarmDao.insert(task.getDefaultAlarms()) @@ -218,14 +218,14 @@ class TasksJsonImporter @Inject constructor( task.repeatFrom = task.recurrence.repeatFrom() task.recurrence = task.recurrence.withoutFrom() } - for (comment in backup.comments) { + backup.comments?.forEach { comment -> comment.targetId = taskUuid if (version < V6_4) { comment.convertPictureUri() } userActivityDao.createNew(comment) } - for (googleTask in backup.google) { + backup.google?.forEach { googleTask -> caldavDao.insert( CaldavTask( task = taskId, @@ -237,7 +237,7 @@ class TasksJsonImporter @Inject constructor( ) ) } - for (location in backup.locations) { + backup.locations?.forEach { location -> val place = Place( longitude = location.longitude, latitude = location.latitude, @@ -256,8 +256,8 @@ class TasksJsonImporter @Inject constructor( ) ) } - for (tag in backup.tags) { - val tagData = findTagData(tag) ?: continue + backup.tags?.forEach tags@ { tag -> + val tagData = findTagData(tag) ?: return@tags tagDao.insert( tag.copy( task = taskId, @@ -349,6 +349,7 @@ class TasksJsonImporter @Inject constructor( var skipCount = 0 } + @Deprecated("For backup use only") @Serializable class LegacyLocation { var name: String? = null @@ -363,6 +364,7 @@ class TasksJsonImporter @Inject constructor( } companion object { + private val json = Json { ignoreUnknownKeys = true} private val ignorePrefs = intArrayOf( R.string.p_current_version, R.string.p_backups_android_backup_last diff --git a/data/src/commonMain/kotlin/org/tasks/data/entity/CaldavTask.kt b/data/src/commonMain/kotlin/org/tasks/data/entity/CaldavTask.kt index dcb8965be..fad41be7a 100644 --- a/data/src/commonMain/kotlin/org/tasks/data/entity/CaldavTask.kt +++ b/data/src/commonMain/kotlin/org/tasks/data/entity/CaldavTask.kt @@ -4,6 +4,7 @@ import androidx.room.ColumnInfo import androidx.room.Entity import androidx.room.ForeignKey import androidx.room.PrimaryKey +import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable import kotlinx.serialization.Transient import org.tasks.data.UUIDHelper @@ -35,6 +36,7 @@ data class CaldavTask( @ColumnInfo(name = "cd_remote_id") var remoteId: String? = UUIDHelper.newUUID(), @ColumnInfo(name = "cd_object") + @SerialName("object") var obj: String? = remoteId?.let { "$it.ics" }, @ColumnInfo(name = "cd_etag") var etag: String? = null,