diff --git a/app/src/main/java/com/todoroo/astrid/dao/TaskDao.kt b/app/src/main/java/com/todoroo/astrid/dao/TaskDao.kt index 3eb4a5c08..b9b3504fc 100644 --- a/app/src/main/java/com/todoroo/astrid/dao/TaskDao.kt +++ b/app/src/main/java/com/todoroo/astrid/dao/TaskDao.kt @@ -67,6 +67,8 @@ class TaskDao @Inject constructor( suspend fun setParent(parent: Long, tasks: List) = taskDao.setParent(parent, tasks) + suspend fun getChildren(ids: List) = taskDao.getChildren(ids) + suspend fun getChildren(id: Long): List = taskDao.getChildren(id) suspend fun setCollapsed(id: Long, collapsed: Boolean) = taskDao.setCollapsed(id, collapsed) 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 8b52fc89d..0fbfd743b 100644 --- a/app/src/main/java/com/todoroo/astrid/service/TaskDuplicator.kt +++ b/app/src/main/java/com/todoroo/astrid/service/TaskDuplicator.kt @@ -7,6 +7,7 @@ import com.todoroo.astrid.data.Task import com.todoroo.astrid.gcal.GCalHelper import org.tasks.LocalBroadcastManager import org.tasks.data.* +import org.tasks.db.DbUtils.dbchunk import org.tasks.preferences.Preferences import java.util.* import javax.inject.Inject @@ -25,7 +26,12 @@ class TaskDuplicator @Inject constructor( suspend fun duplicate(taskIds: List): List { val result: MutableList = ArrayList() - for (task in taskDao.fetch(taskIds)) { + val tasks = ArrayList(taskIds) + taskIds.dbchunk().forEach { + tasks.removeAll(googleTaskDao.getChildren(it)) + tasks.removeAll(taskDao.getChildren(it)) + } + for (task in taskDao.fetch(tasks)) { result.add(clone(task)) } localBroadcastManager.broadcastRefresh()