From 833eb81114cef720b15e59b7d6688aef5d85ff02 Mon Sep 17 00:00:00 2001 From: Alex Baker Date: Sun, 5 Jan 2025 00:38:38 -0600 Subject: [PATCH] Microsoft Graph API doesn't support order --- .../java/com/todoroo/astrid/service/TaskMover.kt | 2 +- .../org/tasks/sync/microsoft/MicrosoftConverter.kt | 3 --- .../tasks/sync/microsoft/MicrosoftSynchronizer.kt | 4 +--- .../kotlin/org/tasks/filters/CaldavFilter.kt | 13 +++++++------ 4 files changed, 9 insertions(+), 13 deletions(-) diff --git a/app/src/main/java/com/todoroo/astrid/service/TaskMover.kt b/app/src/main/java/com/todoroo/astrid/service/TaskMover.kt index c053b8b17..802d0db43 100644 --- a/app/src/main/java/com/todoroo/astrid/service/TaskMover.kt +++ b/app/src/main/java/com/todoroo/astrid/service/TaskMover.kt @@ -55,7 +55,7 @@ class TaskMover @Inject constructor( val taskIds = tasks.map { it.id } taskDao.setParent(0, ids.intersect(taskIds.toSet()).toList()) tasks.forEach { performMove(it, selectedList) } - if (selectedList.isIcalendar) { + if (!selectedList.isGoogleTasks) { caldavDao.updateParents(selectedList.uuid) } taskIds.dbchunk().forEach { diff --git a/app/src/main/java/org/tasks/sync/microsoft/MicrosoftConverter.kt b/app/src/main/java/org/tasks/sync/microsoft/MicrosoftConverter.kt index cdf1ac5dd..e725db88e 100644 --- a/app/src/main/java/org/tasks/sync/microsoft/MicrosoftConverter.kt +++ b/app/src/main/java/org/tasks/sync/microsoft/MicrosoftConverter.kt @@ -24,12 +24,10 @@ object MicrosoftConverter { private const val DATE_TIME_UTC_FORMAT = "yyyy-MM-dd'T'HH:mm:ss.SSS0000'Z'" fun Task.applySubtask( - index: Int, parent: Long, checklistItem: Tasks.Task.ChecklistItem, ) { this.parent = parent - order = index.toLong() title = checklistItem.displayName completionDate = if (checklistItem.isChecked) { checklistItem.checkedDateTime?.parseDateTime() ?: System.currentTimeMillis() @@ -95,7 +93,6 @@ object MicrosoftConverter { .build() .toString() } - // checklist to subtasks // sync reminders // sync files } diff --git a/app/src/main/java/org/tasks/sync/microsoft/MicrosoftSynchronizer.kt b/app/src/main/java/org/tasks/sync/microsoft/MicrosoftSynchronizer.kt index 21125e72e..59a50a851 100644 --- a/app/src/main/java/org/tasks/sync/microsoft/MicrosoftSynchronizer.kt +++ b/app/src/main/java/org/tasks/sync/microsoft/MicrosoftSynchronizer.kt @@ -426,7 +426,7 @@ class MicrosoftSynchronizer @Inject constructor( existingSubtasks .filter { it.remoteId?.isNotBlank() == true && !remoteSubtaskIds.contains(it.remoteId) } .let { taskDeleter.delete(it.map { it.task }) } - checklistItems.forEachIndexed { index, item -> + checklistItems.forEach { item -> val existing = caldavDao.getTaskByRemoteId(list.uuid!!, item.id!!) val task = existing?.task?.let { taskDao.fetch(it) } ?: taskCreator.createWithValues("").apply { @@ -445,11 +445,9 @@ class MicrosoftSynchronizer @Inject constructor( val dirty = existing != null && task.modificationDate > existing.lastSync if (dirty) { // TODO: merge with vtodo cached value, similar to iCalendarMerge.kt - task.order = index.toLong() task.parent = parentId } else { task.applySubtask( - index = index, parent = parentId, checklistItem = item, ) diff --git a/kmp/src/commonMain/kotlin/org/tasks/filters/CaldavFilter.kt b/kmp/src/commonMain/kotlin/org/tasks/filters/CaldavFilter.kt index fe137ce83..d3ad15b3e 100644 --- a/kmp/src/commonMain/kotlin/org/tasks/filters/CaldavFilter.kt +++ b/kmp/src/commonMain/kotlin/org/tasks/filters/CaldavFilter.kt @@ -5,6 +5,7 @@ import org.tasks.data.NO_COUNT import org.tasks.data.dao.TaskDao.TaskCriteria.activeAndVisible import org.tasks.data.entity.CaldavAccount import org.tasks.data.entity.CaldavAccount.Companion.TYPE_GOOGLE_TASKS +import org.tasks.data.entity.CaldavAccount.Companion.TYPE_MICROSOFT import org.tasks.data.entity.CaldavCalendar import org.tasks.data.entity.CaldavTask import org.tasks.data.entity.Task @@ -53,17 +54,17 @@ data class CaldavFilter( override val isReadOnly: Boolean get() = calendar.access == CaldavCalendar.ACCESS_READ_ONLY + // Microsoft Graph API doesn't support order + // https://techcommunity.microsoft.com/idea/microsoft365developerplatform/to-do-graphapi-to-include-orderdatetime-field---custom-ordering-of-to-do-tasks-t/3298392#M940 override fun supportsManualSort() = true override fun areItemsTheSame(other: FilterListItem): Boolean { return other is CaldavFilter && calendar.id == other.calendar.id } - val isGoogleTasks by lazy { - account.accountType == TYPE_GOOGLE_TASKS - } + val isGoogleTasks: Boolean + get() = account.accountType == TYPE_GOOGLE_TASKS - val isIcalendar by lazy { - account.accountType != TYPE_GOOGLE_TASKS - } + val isIcalendar: Boolean + get() = account.accountType !in listOf(TYPE_GOOGLE_TASKS, TYPE_MICROSOFT) }