diff --git a/app/src/androidTest/java/com/todoroo/astrid/dao/TaskDaoTests.kt b/app/src/androidTest/java/com/todoroo/astrid/dao/TaskDaoTests.kt index 18715049f..cefb4ea39 100644 --- a/app/src/androidTest/java/com/todoroo/astrid/dao/TaskDaoTests.kt +++ b/app/src/androidTest/java/com/todoroo/astrid/dao/TaskDaoTests.kt @@ -144,7 +144,7 @@ class TaskDaoTests : InjectingTestCase() { fun findChildrenInList() { taskDao.createNew(newTask(with(ID, 1L))) taskDao.createNew(newTask(with(ID, 2L), with(PARENT, 1L))) - assertEquals(listOf(2L), taskDao.findChildrenInList(listOf(1, 2))) + assertEquals(listOf(2L), taskDao.getChildren(listOf(1L, 2L))) } @Test @@ -152,7 +152,7 @@ class TaskDaoTests : InjectingTestCase() { taskDao.createNew(newTask(with(ID, 1L))) taskDao.createNew(newTask(with(ID, 2L), with(PARENT, 1L))) taskDao.createNew(newTask(with(ID, 3L), with(PARENT, 2L))) - assertEquals(listOf(2L, 3L), taskDao.findChildrenInList(listOf(1, 2, 3))) + assertEquals(listOf(2L, 3L, 3L), taskDao.getChildren(listOf(1L, 2L, 3L))) } @Test @@ -160,7 +160,7 @@ class TaskDaoTests : InjectingTestCase() { taskDao.createNew(newTask(with(ID, 1L))) taskDao.createNew(newTask(with(ID, 2L), with(PARENT, 1L))) taskDao.createNew(newTask(with(ID, 3L), with(PARENT, 2L))) - assertEquals(listOf(3L), taskDao.findChildrenInList(listOf(1, 3))) + assertEquals(listOf(2L, 3L), taskDao.getChildren(listOf(1L, 3L))) } override fun inject(component: TestComponent) = component.inject(this) diff --git a/app/src/androidTest/java/org/tasks/data/GoogleTaskDaoTests.kt b/app/src/androidTest/java/org/tasks/data/GoogleTaskDaoTests.kt index 9d37ed936..5a6bdac85 100644 --- a/app/src/androidTest/java/org/tasks/data/GoogleTaskDaoTests.kt +++ b/app/src/androidTest/java/org/tasks/data/GoogleTaskDaoTests.kt @@ -150,7 +150,7 @@ class GoogleTaskDaoTests : InjectingTestCase() { fun findChildrenInList() { googleTaskDao.insert(newGoogleTask(with(TASK, 1), with(LIST, "1"))) googleTaskDao.insert(newGoogleTask(with(TASK, 2), with(LIST, "1"), with(PARENT, 1L))) - assertEquals(listOf(2L), googleTaskDao.findChildrenInList(listOf(1, 2))) + assertEquals(listOf(2L), googleTaskDao.getChildren(listOf(1L, 2L))) } private fun insertTop(googleTask: GoogleTask) { 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 49e4528c1..b3257b040 100644 --- a/app/src/main/java/com/todoroo/astrid/dao/TaskDao.kt +++ b/app/src/main/java/com/todoroo/astrid/dao/TaskDao.kt @@ -29,7 +29,6 @@ import org.tasks.jobs.WorkManager import org.tasks.preferences.Preferences import org.tasks.time.DateTimeUtils.currentTimeMillis import timber.log.Timber -import java.util.* @Dao abstract class TaskDao(private val database: Database) { @@ -194,12 +193,6 @@ abstract class TaskDao(private val database: Database) { + "SELECT task FROM recursive_tasks") abstract fun getChildren(ids: List): List - fun findChildrenInList(ids: List): List { - val result = ArrayList(ids) - result.retainAll(getChildren(ids)) - return result - } - @Query("UPDATE tasks SET collapsed = :collapsed WHERE _id = :id") abstract fun setCollapsed(id: Long, collapsed: Boolean) diff --git a/app/src/main/java/com/todoroo/astrid/service/TaskMover.kt b/app/src/main/java/com/todoroo/astrid/service/TaskMover.kt index f0b060173..9eab1acae 100644 --- a/app/src/main/java/com/todoroo/astrid/service/TaskMover.kt +++ b/app/src/main/java/com/todoroo/astrid/service/TaskMover.kt @@ -10,6 +10,7 @@ import com.todoroo.astrid.data.Task import org.tasks.BuildConfig import org.tasks.LocalBroadcastManager import org.tasks.data.* +import org.tasks.db.DbUtilsKt.dbchunk import org.tasks.injection.ForApplication import org.tasks.preferences.Preferences import java.util.* @@ -39,11 +40,12 @@ class TaskMover @Inject constructor( return null } - fun move(tasks: List, selectedList: Filter) { - var tasks = tasks - tasks = ArrayList(tasks) - tasks.removeAll(googleTaskDao.findChildrenInList(tasks)) - tasks.removeAll(taskDao.findChildrenInList(tasks)) + fun move(ids: List, selectedList: Filter) { + val tasks = ArrayList(ids) + ids.dbchunk().forEach { + tasks.removeAll(googleTaskDao.getChildren(it)) + tasks.removeAll(taskDao.getChildren(it)) + } taskDao.setParent(0, tasks) for (task in taskDao.fetch(tasks)) { performMove(task, selectedList) diff --git a/app/src/main/java/org/tasks/data/GoogleTaskDao.kt b/app/src/main/java/org/tasks/data/GoogleTaskDao.kt index 871efa995..0f1a69da6 100644 --- a/app/src/main/java/org/tasks/data/GoogleTaskDao.kt +++ b/app/src/main/java/org/tasks/data/GoogleTaskDao.kt @@ -88,15 +88,12 @@ abstract class GoogleTaskDao { @Query("SELECT DISTINCT gt_list_id FROM google_tasks WHERE gt_deleted = 0 AND gt_task IN (:tasks)") abstract fun getLists(tasks: List): List - @Query("SELECT gt_task FROM google_tasks WHERE gt_parent IN (:ids)") + @Query("SELECT gt_task FROM google_tasks WHERE gt_parent IN (:ids) AND gt_deleted = 0") abstract fun getChildren(ids: List): List @Query("SELECT tasks.* FROM tasks JOIN google_tasks ON tasks._id = gt_task WHERE gt_parent = :taskId") abstract fun getChildTasks(taskId: Long): List - @Query("SELECT gt_task FROM google_tasks WHERE gt_task IN (:taskIds) AND gt_parent IN (:taskIds) AND gt_deleted = 0") - abstract fun findChildrenInList(taskIds: List): List - @Query("SELECT * FROM google_tasks WHERE gt_parent = :id AND gt_deleted = 0") abstract fun getChildren(id: Long): List