Fix reparenting task to another list

pull/2672/head
Alex Baker 6 months ago
parent 52c54b1eac
commit 6c9ffa57d7

@ -138,7 +138,7 @@ open class TaskAdapter(
open suspend fun moved(from: Int, to: Int, indent: Int) {
val task = getTask(from)
val newParent = findParent(indent, to)
if ((newParent?.id ?: 0) == task.parent) {
if ((newParent?.id ?: 0) == task.parent || (indent > 0 && dataSource.subtaskSortMode == SORT_MANUAL)) {
if (indent == 0) {
changeSortGroup(task, if (from < to) to - 1 else to)
} else if (dataSource.subtaskSortMode == SORT_MANUAL) {
@ -279,7 +279,7 @@ open class TaskAdapter(
private suspend fun changeCaldavParent(task: TaskContainer, newParent: TaskContainer?) {
val list = newParent?.caldav ?: task.caldav!!
val caldavTask = task.caldavTask ?: CaldavTask(
val caldavTask = task.caldavTask.takeIf { list == task.caldav } ?: CaldavTask(
task = task.id,
calendar = list,
)
@ -287,9 +287,8 @@ open class TaskAdapter(
if (newParentId == 0L) {
caldavTask.remoteParent = ""
} else {
val parentTask = caldavDao.getTask(newParentId) ?: return
caldavTask.calendar = list
caldavTask.remoteParent = parentTask.remoteId
caldavTask.remoteParent = newParent?.caldavTask?.remoteId ?: return
}
task.task.order = if (newTasksOnTop) {
caldavDao.findFirstTask(list, newParentId)
@ -301,12 +300,13 @@ open class TaskAdapter(
?.plus(1)
}
if (caldavTask.id == 0L) {
val newTask = CaldavTask(
task = task.id,
calendar = list,
caldavDao.insert(
CaldavTask(
task = task.id,
calendar = list,
remoteParent = caldavTask.remoteParent,
)
)
newTask.remoteParent = caldavTask.remoteParent
caldavDao.insert(newTask)
} else {
caldavDao.update(caldavTask)
}
@ -417,7 +417,12 @@ open class TaskAdapter(
indent == previous.indent -> previous.caldavSortOrder + 1
else -> getTask((to - 1 downTo 0).find { getTask(it).indent == indent }!!).caldavSortOrder + 1
}
caldavDao.move(task, oldParent, newParent, newPosition)
caldavDao.move(
task = task,
previousParent = oldParent,
newParent = newParent,
newPosition = newPosition,
)
taskDao.touch(task.id)
localBroadcastManager.broadcastRefresh()
}
@ -434,13 +439,24 @@ open class TaskAdapter(
val caldavTask = task.caldavTask ?: return
if (newParent == 0L) {
caldavTask.remoteParent = ""
task.parent = 0
caldavDao.update(caldavTask.id, caldavTask.remoteParent)
} else {
val parentTask = caldavDao.getTask(newParent) ?: return
caldavTask.remoteParent = parentTask.remoteId
task.parent = newParent
if (parentTask.calendar == caldavTask.calendar) {
caldavTask.remoteParent = parentTask.remoteId
caldavDao.update(caldavTask.id, caldavTask.remoteParent)
} else {
caldavDao.markDeleted(listOf(task.id))
caldavDao.insert(
CaldavTask(
task = task.id,
calendar = parentTask.calendar,
remoteParent = parentTask.remoteId,
)
)
}
}
caldavDao.update(caldavTask.id, caldavTask.remoteParent)
task.parent = newParent
taskDao.save(task.task, null)
}
}

@ -199,6 +199,9 @@ class iCalendar @Inject constructor(
obj: String? = null,
eTag: String? = null
) {
if (existing?.isDeleted() == true) {
return
}
val task = existing?.task
?.let { taskDao.fetch(it) }
?: taskCreator.createWithValues("").apply {

@ -55,7 +55,6 @@ import org.tasks.R
import org.tasks.Tasks.Companion.IS_GENERIC
import org.tasks.extensions.formatNumber
import org.tasks.filters.NavigationDrawerSubheader
import timber.log.Timber
@Composable
fun TaskListDrawer(
@ -243,7 +242,6 @@ private fun HeaderItem(
animationSpec = tween(250),
label = "arrow rotation",
)
Timber.d("rotation: $rotation")
Icon(
modifier = Modifier.rotate(rotation),
imageVector = Icons.Outlined.ExpandMore,

@ -313,13 +313,19 @@ GROUP BY caldav_lists.cdl_uuid
abstract suspend fun updateParents(calendar: String)
@Transaction
open suspend fun move(task: TaskContainer, previousParent: Long, newParent: Long, newPosition: Long?) {
open suspend fun move(
task: TaskContainer,
previousParent: Long,
newParent: Long,
newPosition: Long?,
) {
val previousPosition = task.caldavSortOrder
if (newPosition != null) {
if (newParent == previousParent && newPosition < previousPosition) {
shiftDown(task.caldav!!, newParent, newPosition, previousPosition)
} else {
shiftDown(task.caldav!!, newParent, newPosition)
val list = newParent.takeIf { it > 0 }?.let { getTask(it)?.calendar } ?: task.caldav!!
shiftDown(list, newParent, newPosition)
}
}
task.task.order = newPosition

Loading…
Cancel
Save