Microsoft Graph API doesn't support order

pull/3221/head
Alex Baker 11 months ago
parent 8edf0de950
commit 833eb81114

@ -55,7 +55,7 @@ class TaskMover @Inject constructor(
val taskIds = tasks.map { it.id } val taskIds = tasks.map { it.id }
taskDao.setParent(0, ids.intersect(taskIds.toSet()).toList()) taskDao.setParent(0, ids.intersect(taskIds.toSet()).toList())
tasks.forEach { performMove(it, selectedList) } tasks.forEach { performMove(it, selectedList) }
if (selectedList.isIcalendar) { if (!selectedList.isGoogleTasks) {
caldavDao.updateParents(selectedList.uuid) caldavDao.updateParents(selectedList.uuid)
} }
taskIds.dbchunk().forEach { taskIds.dbchunk().forEach {

@ -24,12 +24,10 @@ object MicrosoftConverter {
private const val DATE_TIME_UTC_FORMAT = "yyyy-MM-dd'T'HH:mm:ss.SSS0000'Z'" private const val DATE_TIME_UTC_FORMAT = "yyyy-MM-dd'T'HH:mm:ss.SSS0000'Z'"
fun Task.applySubtask( fun Task.applySubtask(
index: Int,
parent: Long, parent: Long,
checklistItem: Tasks.Task.ChecklistItem, checklistItem: Tasks.Task.ChecklistItem,
) { ) {
this.parent = parent this.parent = parent
order = index.toLong()
title = checklistItem.displayName title = checklistItem.displayName
completionDate = if (checklistItem.isChecked) { completionDate = if (checklistItem.isChecked) {
checklistItem.checkedDateTime?.parseDateTime() ?: System.currentTimeMillis() checklistItem.checkedDateTime?.parseDateTime() ?: System.currentTimeMillis()
@ -95,7 +93,6 @@ object MicrosoftConverter {
.build() .build()
.toString() .toString()
} }
// checklist to subtasks
// sync reminders // sync reminders
// sync files // sync files
} }

@ -426,7 +426,7 @@ class MicrosoftSynchronizer @Inject constructor(
existingSubtasks existingSubtasks
.filter { it.remoteId?.isNotBlank() == true && !remoteSubtaskIds.contains(it.remoteId) } .filter { it.remoteId?.isNotBlank() == true && !remoteSubtaskIds.contains(it.remoteId) }
.let { taskDeleter.delete(it.map { it.task }) } .let { taskDeleter.delete(it.map { it.task }) }
checklistItems.forEachIndexed { index, item -> checklistItems.forEach { item ->
val existing = caldavDao.getTaskByRemoteId(list.uuid!!, item.id!!) val existing = caldavDao.getTaskByRemoteId(list.uuid!!, item.id!!)
val task = existing?.task?.let { taskDao.fetch(it) } val task = existing?.task?.let { taskDao.fetch(it) }
?: taskCreator.createWithValues("").apply { ?: taskCreator.createWithValues("").apply {
@ -445,11 +445,9 @@ class MicrosoftSynchronizer @Inject constructor(
val dirty = existing != null && task.modificationDate > existing.lastSync val dirty = existing != null && task.modificationDate > existing.lastSync
if (dirty) { if (dirty) {
// TODO: merge with vtodo cached value, similar to iCalendarMerge.kt // TODO: merge with vtodo cached value, similar to iCalendarMerge.kt
task.order = index.toLong()
task.parent = parentId task.parent = parentId
} else { } else {
task.applySubtask( task.applySubtask(
index = index,
parent = parentId, parent = parentId,
checklistItem = item, checklistItem = item,
) )

@ -5,6 +5,7 @@ import org.tasks.data.NO_COUNT
import org.tasks.data.dao.TaskDao.TaskCriteria.activeAndVisible import org.tasks.data.dao.TaskDao.TaskCriteria.activeAndVisible
import org.tasks.data.entity.CaldavAccount import org.tasks.data.entity.CaldavAccount
import org.tasks.data.entity.CaldavAccount.Companion.TYPE_GOOGLE_TASKS 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.CaldavCalendar
import org.tasks.data.entity.CaldavTask import org.tasks.data.entity.CaldavTask
import org.tasks.data.entity.Task import org.tasks.data.entity.Task
@ -53,17 +54,17 @@ data class CaldavFilter(
override val isReadOnly: Boolean override val isReadOnly: Boolean
get() = calendar.access == CaldavCalendar.ACCESS_READ_ONLY 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 supportsManualSort() = true
override fun areItemsTheSame(other: FilterListItem): Boolean { override fun areItemsTheSame(other: FilterListItem): Boolean {
return other is CaldavFilter && calendar.id == other.calendar.id return other is CaldavFilter && calendar.id == other.calendar.id
} }
val isGoogleTasks by lazy { val isGoogleTasks: Boolean
account.accountType == TYPE_GOOGLE_TASKS get() = account.accountType == TYPE_GOOGLE_TASKS
}
val isIcalendar by lazy { val isIcalendar: Boolean
account.accountType != TYPE_GOOGLE_TASKS get() = account.accountType !in listOf(TYPE_GOOGLE_TASKS, TYPE_MICROSOFT)
}
} }

Loading…
Cancel
Save