Fix microsoft sync issues

- fix sync on empty categories
- apply parent completion time to checklist items
pull/3888/head
Alex Baker 3 months ago
parent 930e980550
commit 882338f554

@ -25,14 +25,15 @@ object MicrosoftConverter {
fun Task.applySubtask(
parent: Long,
parentCompletionDate: Long,
checklistItem: Tasks.Task.ChecklistItem,
) {
this.parent = parent
title = checklistItem.displayName
completionDate = if (checklistItem.isChecked) {
checklistItem.checkedDateTime?.parseDateTime() ?: System.currentTimeMillis()
checklistItem.checkedDateTime.parseDateTime()
} else {
0L
parentCompletionDate
}
creationDate = checklistItem.createdDateTime.parseDateTime()
}
@ -120,7 +121,7 @@ object MicrosoftConverter {
} else {
Tasks.Task.Status.notStarted
},
categories = tags.map { it.name!! }.takeIf { it.isNotEmpty() },
categories = tags.map { it.name!! }.takeIf { it.isNotEmpty() } ?: emptyList(),
dueDateTime = if (hasDueDate()) {
Tasks.Task.DateTime(
dateTime = DateTime(dueDate).startOfDay().toString(DATE_TIME_FORMAT),

@ -11,15 +11,14 @@ import dagger.hilt.android.qualifiers.ApplicationContext
import io.ktor.client.call.body
import io.ktor.http.isSuccess
import kotlinx.serialization.json.Json
import org.tasks.broadcast.RefreshBroadcaster
import org.tasks.Strings.isNullOrEmpty
import org.tasks.analytics.Firebase
import org.tasks.broadcast.RefreshBroadcaster
import org.tasks.caldav.VtodoCache
import org.tasks.data.dao.CaldavDao
import org.tasks.data.dao.TagDao
import org.tasks.data.dao.TagDataDao
import org.tasks.data.entity.CaldavAccount
import org.tasks.data.entity.CaldavAccount.Companion.ERROR_UNAUTHORIZED
import org.tasks.data.entity.CaldavCalendar
import org.tasks.data.entity.CaldavCalendar.Companion.ACCESS_OWNER
import org.tasks.data.entity.CaldavCalendar.Companion.ACCESS_READ_WRITE
@ -403,6 +402,7 @@ class MicrosoftSynchronizer @Inject constructor(
list = list,
parentId = task.id,
parentRemoteId = caldavTask.remoteId!!,
parentCompletionDate = task.completionDate,
checklistItems = it,
)
}
@ -421,6 +421,7 @@ class MicrosoftSynchronizer @Inject constructor(
list: CaldavCalendar,
parentId: Long,
parentRemoteId: String,
parentCompletionDate: Long,
checklistItems: List<Tasks.Task.ChecklistItem>,
) {
val existingSubtasks: List<CaldavTask> = taskDao.getChildren(parentId).let { caldavDao.getTasks(it) }
@ -451,6 +452,7 @@ class MicrosoftSynchronizer @Inject constructor(
} else {
task.applySubtask(
parent = parentId,
parentCompletionDate = parentCompletionDate,
checklistItem = item,
)
}

@ -22,7 +22,7 @@ data class Tasks(
@EncodeDefault val body: Body? = null,
@EncodeDefault val importance: Importance = Importance.low,
@EncodeDefault val status: Status = Status.notStarted,
@EncodeDefault val categories: List<String>? = null,
val categories: List<String>? = null,
val isReminderOn: Boolean = false,
val createdDateTime: String? = null,
val lastModifiedDateTime: String? = null,
@ -31,7 +31,7 @@ data class Tasks(
val linkedResources: List<LinkedResource>? = null,
@EncodeDefault val recurrence: Recurrence? = null,
@EncodeDefault val reminderDateTime: DateTime? = null,
@EncodeDefault val checklistItems: List<ChecklistItem>? = null,
val checklistItems: List<ChecklistItem>? = null,
@SerialName("@removed") val removed: Removed? = null,
) {
@Serializable

Loading…
Cancel
Save