Copy task together with subtasks

pull/1188/head
supermazena 5 years ago committed by Alex Baker
parent bf71efde55
commit d4f3438eed

@ -32,16 +32,19 @@ class TaskDuplicator @Inject constructor(
return result return result
} }
private suspend fun clone(clone: Task): Task { private suspend fun clone(clone: Task, parentId: Long = 0L): Task {
val originalId = clone.id val originalId = clone.id
clone.creationDate = DateUtilities.now() with(clone) {
clone.modificationDate = DateUtilities.now() creationDate = DateUtilities.now()
clone.completionDate = 0L modificationDate = DateUtilities.now()
clone.calendarURI = "" completionDate = 0L
clone.uuid = Task.NO_UUID calendarURI = ""
clone.suppressSync() parent = parentId
clone.suppressRefresh() uuid = Task.NO_UUID
taskDao.createNew(clone) suppressSync()
suppressRefresh()
}
val newId = taskDao.createNew(clone)
val tags = tagDataDao.getTagDataForTask(originalId) val tags = tagDataDao.getTagDataForTask(originalId)
if (tags.isNotEmpty()) { if (tags.isNotEmpty()) {
tagDao.insert(Lists.transform(tags) { td: TagData? -> Tag(clone, td!!) }) tagDao.insert(Lists.transform(tags) { td: TagData? -> Tag(clone, td!!) })
@ -65,6 +68,12 @@ class TaskDuplicator @Inject constructor(
} }
gcalHelper.createTaskEventIfEnabled(clone) gcalHelper.createTaskEventIfEnabled(clone)
taskDao.save(clone, null) // TODO: delete me taskDao.save(clone, null) // TODO: delete me
getDirectChildren(originalId)
.filter { it.parent == originalId }
.forEach { subtask -> clone(subtask, newId) }
return clone return clone
} }
private suspend fun getDirectChildren(taskId: Long): List<Task> =
taskDao.fetch(taskDao.getChildren(taskId)).filter { it.parent == taskId }
} }
Loading…
Cancel
Save