From d4f3438eedfaaea5ed77e57cbd51132306462085 Mon Sep 17 00:00:00 2001 From: supermazena Date: Sun, 18 Oct 2020 18:48:15 +0200 Subject: [PATCH] Copy task together with subtasks --- .../todoroo/astrid/service/TaskDuplicator.kt | 27 ++++++++++++------- 1 file changed, 18 insertions(+), 9 deletions(-) diff --git a/app/src/main/java/com/todoroo/astrid/service/TaskDuplicator.kt b/app/src/main/java/com/todoroo/astrid/service/TaskDuplicator.kt index 1ef3d21f8..807afd0d0 100644 --- a/app/src/main/java/com/todoroo/astrid/service/TaskDuplicator.kt +++ b/app/src/main/java/com/todoroo/astrid/service/TaskDuplicator.kt @@ -32,16 +32,19 @@ class TaskDuplicator @Inject constructor( return result } - private suspend fun clone(clone: Task): Task { + private suspend fun clone(clone: Task, parentId: Long = 0L): Task { val originalId = clone.id - clone.creationDate = DateUtilities.now() - clone.modificationDate = DateUtilities.now() - clone.completionDate = 0L - clone.calendarURI = "" - clone.uuid = Task.NO_UUID - clone.suppressSync() - clone.suppressRefresh() - taskDao.createNew(clone) + with(clone) { + creationDate = DateUtilities.now() + modificationDate = DateUtilities.now() + completionDate = 0L + calendarURI = "" + parent = parentId + uuid = Task.NO_UUID + suppressSync() + suppressRefresh() + } + val newId = taskDao.createNew(clone) val tags = tagDataDao.getTagDataForTask(originalId) if (tags.isNotEmpty()) { tagDao.insert(Lists.transform(tags) { td: TagData? -> Tag(clone, td!!) }) @@ -65,6 +68,12 @@ class TaskDuplicator @Inject constructor( } gcalHelper.createTaskEventIfEnabled(clone) taskDao.save(clone, null) // TODO: delete me + getDirectChildren(originalId) + .filter { it.parent == originalId } + .forEach { subtask -> clone(subtask, newId) } return clone } + + private suspend fun getDirectChildren(taskId: Long): List = + taskDao.fetch(taskDao.getChildren(taskId)).filter { it.parent == taskId } } \ No newline at end of file