From 2b8b16e72ab6507cb2f682a8fda25bc823bffa48 Mon Sep 17 00:00:00 2001 From: Alex Baker Date: Mon, 8 Jun 2020 11:33:08 -0500 Subject: [PATCH] Remove Java DbUtils --- .../astrid/activity/TaskListFragment.kt | 5 +- .../java/com/todoroo/astrid/dao/TaskDao.kt | 11 ++-- .../com/todoroo/astrid/service/TaskDeleter.kt | 8 +-- .../com/todoroo/astrid/service/TaskMover.kt | 2 +- .../com/todoroo/astrid/service/Upgrader.kt | 5 +- app/src/main/java/org/tasks/data/CaldavDao.kt | 7 ++- .../main/java/org/tasks/data/DeletionDao.kt | 6 +-- app/src/main/java/org/tasks/db/DbUtils.java | 54 ------------------- .../org/tasks/db/{DbUtilsKt.kt => DbUtils.kt} | 6 ++- 9 files changed, 23 insertions(+), 81 deletions(-) delete mode 100644 app/src/main/java/org/tasks/db/DbUtils.java rename app/src/main/java/org/tasks/db/{DbUtilsKt.kt => DbUtils.kt} (64%) diff --git a/app/src/main/java/com/todoroo/astrid/activity/TaskListFragment.kt b/app/src/main/java/com/todoroo/astrid/activity/TaskListFragment.kt index 2083f9f21..289dca8b5 100644 --- a/app/src/main/java/com/todoroo/astrid/activity/TaskListFragment.kt +++ b/app/src/main/java/com/todoroo/astrid/activity/TaskListFragment.kt @@ -58,7 +58,7 @@ import org.tasks.caldav.BaseCaldavCalendarSettingsActivity import org.tasks.data.CaldavDao import org.tasks.data.TagDataDao import org.tasks.data.TaskContainer -import org.tasks.db.DbUtils +import org.tasks.db.DbUtils.chunkedMap import org.tasks.dialogs.DateTimePicker.Companion.newDateTimePicker import org.tasks.dialogs.DialogBuilder import org.tasks.dialogs.SortDialog @@ -630,8 +630,7 @@ class TaskListFragment : InjectingFragment(), OnRefreshListener, Toolbar.OnMenuI true } R.id.menu_share -> { - DbUtils - .collect(selected) { taskDao.fetchTasks(preferences, IdListFilter(it)) } + selected.chunkedMap { taskDao.fetchTasks(preferences, IdListFilter(it)) } .apply(this::send) true } 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 b3257b040..b4d3e8fb0 100644 --- a/app/src/main/java/com/todoroo/astrid/dao/TaskDao.kt +++ b/app/src/main/java/com/todoroo/astrid/dao/TaskDao.kt @@ -22,9 +22,8 @@ import org.tasks.data.Place import org.tasks.data.SubtaskInfo import org.tasks.data.TaskContainer import org.tasks.data.TaskListQuery -import org.tasks.db.DbUtils -import org.tasks.db.DbUtilsKt.chunkedMap -import org.tasks.db.DbUtilsKt.eachChunk +import org.tasks.db.DbUtils.chunkedMap +import org.tasks.db.DbUtils.eachChunk import org.tasks.jobs.WorkManager import org.tasks.preferences.Preferences import org.tasks.time.DateTimeUtils.currentTimeMillis @@ -198,12 +197,10 @@ abstract class TaskDao(private val database: Database) { @Transaction open fun setCollapsed(preferences: Preferences, filter: Filter, collapsed: Boolean) { - val tasks = fetchTasks(preferences, filter) + fetchTasks(preferences, filter) .filter(TaskContainer::hasChildren) .map(TaskContainer::getId) - DbUtils.batch(tasks) { - collapse(it, collapsed) - } + .eachChunk { collapse(it, collapsed) } } @Query("UPDATE tasks SET collapsed = :collapsed WHERE _id IN (:ids)") diff --git a/app/src/main/java/com/todoroo/astrid/service/TaskDeleter.kt b/app/src/main/java/com/todoroo/astrid/service/TaskDeleter.kt index 60208eb7d..ba238b1a7 100644 --- a/app/src/main/java/com/todoroo/astrid/service/TaskDeleter.kt +++ b/app/src/main/java/com/todoroo/astrid/service/TaskDeleter.kt @@ -6,7 +6,7 @@ import com.todoroo.astrid.data.Task import kotlinx.collections.immutable.persistentListOf import org.tasks.LocalBroadcastManager import org.tasks.data.* -import org.tasks.db.DbUtils +import org.tasks.db.DbUtils.chunkedMap import org.tasks.db.QueryUtils import org.tasks.jobs.WorkManager import org.tasks.preferences.Preferences @@ -25,13 +25,13 @@ class TaskDeleter @Inject constructor( fun markDeleted(taskIds: List): List { val ids: MutableSet = HashSet(taskIds) - ids.addAll(DbUtils.collect(taskIds) { googleTaskDao.getChildren(it!!) }) - ids.addAll(DbUtils.collect(taskIds) { taskDao.getChildren(it!!) }) + ids.addAll(taskIds.chunkedMap(googleTaskDao::getChildren)) + ids.addAll(taskIds.chunkedMap(taskDao::getChildren)) deletionDao.markDeleted(ids) workManager.cleanup(ids) workManager.sync(false) localBroadcastManager.broadcastRefresh() - return DbUtils.collect(ids) { taskDao.fetch(it!!) } + return ids.chunkedMap(taskDao::fetch) } fun clearCompleted(filter: Filter): Int { 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 9eab1acae..3e73c5460 100644 --- a/app/src/main/java/com/todoroo/astrid/service/TaskMover.kt +++ b/app/src/main/java/com/todoroo/astrid/service/TaskMover.kt @@ -10,7 +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.db.DbUtils.dbchunk import org.tasks.injection.ForApplication import org.tasks.preferences.Preferences import java.util.* diff --git a/app/src/main/java/com/todoroo/astrid/service/Upgrader.kt b/app/src/main/java/com/todoroo/astrid/service/Upgrader.kt index 34ac97c70..ee970794d 100644 --- a/app/src/main/java/com/todoroo/astrid/service/Upgrader.kt +++ b/app/src/main/java/com/todoroo/astrid/service/Upgrader.kt @@ -14,7 +14,6 @@ import org.tasks.caldav.iCalendar.Companion.fromVtodo import org.tasks.caldav.iCalendar.Companion.getParent import org.tasks.caldav.iCalendar.Companion.order import org.tasks.data.* -import org.tasks.db.DbUtils import org.tasks.injection.ForApplication import org.tasks.preferences.DefaultFilterProvider import org.tasks.preferences.Preferences @@ -132,7 +131,7 @@ class Upgrader @Inject constructor( val geo = remoteTask.geoPosition ?: continue iCal.setPlace(taskId, geo) } - DbUtils.batch(tasksWithLocations) { ids: List? -> taskDao.touch(ids!!) } + taskDao.touch(tasksWithLocations) } private fun applyCaldavSubtasks() { @@ -156,7 +155,7 @@ class Upgrader @Inject constructor( tagDao.insert(container.task, iCal.getTags(remoteTask.categories)) } } - DbUtils.batch(tasksWithTags) { ids: List -> taskDao.touch(ids) } + taskDao.touch(tasksWithTags) } private fun removeDuplicateTags() { diff --git a/app/src/main/java/org/tasks/data/CaldavDao.kt b/app/src/main/java/org/tasks/data/CaldavDao.kt index ce597a85c..0251f4122 100644 --- a/app/src/main/java/org/tasks/data/CaldavDao.kt +++ b/app/src/main/java/org/tasks/data/CaldavDao.kt @@ -9,7 +9,7 @@ import com.todoroo.astrid.data.Task import com.todoroo.astrid.helper.UUIDHelper import org.tasks.R import org.tasks.date.DateTimeUtils.toAppleEpoch -import org.tasks.db.DbUtils +import org.tasks.db.DbUtils.chunkedMap import org.tasks.filters.CaldavFilters import org.tasks.time.DateTimeUtils.currentTimeMillis @@ -148,9 +148,8 @@ abstract class CaldavDao { @Query("SELECT cd_object FROM caldav_tasks WHERE cd_calendar = :calendar") abstract fun getObjects(calendar: String): List - fun getTasks(calendar: String, objects: List): List { - return DbUtils.collect(objects) { getTasksInternal(calendar, it!!) } - } + fun getTasks(calendar: String, objects: List): List = + objects.chunkedMap { getTasksInternal(calendar, it) } @Query("SELECT cd_task FROM caldav_tasks WHERE cd_calendar = :calendar AND cd_object IN (:objects)") abstract fun getTasksInternal(calendar: String, objects: List): List diff --git a/app/src/main/java/org/tasks/data/DeletionDao.kt b/app/src/main/java/org/tasks/data/DeletionDao.kt index 5be7ddd56..69ef648cf 100644 --- a/app/src/main/java/org/tasks/data/DeletionDao.kt +++ b/app/src/main/java/org/tasks/data/DeletionDao.kt @@ -5,7 +5,7 @@ import androidx.room.Delete import androidx.room.Query import androidx.room.Transaction import org.tasks.data.CaldavDao.Companion.LOCAL -import org.tasks.db.DbUtils +import org.tasks.db.DbUtils.eachChunk import java.util.* @Dao @@ -30,7 +30,7 @@ abstract class DeletionDao { @Transaction open fun delete(ids: List) { - DbUtils.batch(ids) { + ids.eachChunk { deleteAlarms(it) deleteGeofences(it) deleteTags(it) @@ -46,7 +46,7 @@ abstract class DeletionDao { abstract fun markDeletedInternal(ids: List) fun markDeleted(ids: Iterable) { - DbUtils.batch(ids, this::markDeletedInternal) + ids.eachChunk(this::markDeletedInternal) } @Query("SELECT gt_task FROM google_tasks WHERE gt_deleted = 0 AND gt_list_id = :listId") diff --git a/app/src/main/java/org/tasks/db/DbUtils.java b/app/src/main/java/org/tasks/db/DbUtils.java deleted file mode 100644 index 6b516df01..000000000 --- a/app/src/main/java/org/tasks/db/DbUtils.java +++ /dev/null @@ -1,54 +0,0 @@ -package org.tasks.db; - -import static com.google.common.collect.Lists.partition; - -import com.google.common.base.Function; -import com.google.common.collect.Iterables; -import java.util.ArrayList; -import java.util.Collection; -import java.util.List; -import org.tasks.Callback; - -public class DbUtils { - - public static final int MAX_SQLITE_ARGS = 990; - - public static List collect(Collection items, Function, List> func) { - if (items.size() < MAX_SQLITE_ARGS) { - return func.apply(items instanceof List ? (List) items : new ArrayList<>(items)); - } - List result = new ArrayList<>(); - batch(items, b -> result.addAll(func.apply(b))); - return result; - } - - public static void batch(List items, Callback> callback) { - batch(items, MAX_SQLITE_ARGS, callback); - } - - public static void batch(Iterable items, Callback> callback) { - batch(items, MAX_SQLITE_ARGS, callback); - } - - private static void batch(List items, int size, Callback> callback) { - if (items.isEmpty()) { - return; - } - if (items.size() <= size) { - callback.call(items); - } else { - for (List sublist : partition(items, size)) { - callback.call(sublist); - } - } - } - - public static void batch(Iterable items, int size, Callback> callback) { - if (!items.iterator().hasNext()) { - return; - } - for (List sublist : Iterables.partition(items, size)) { - callback.call(sublist); - } - } -} diff --git a/app/src/main/java/org/tasks/db/DbUtilsKt.kt b/app/src/main/java/org/tasks/db/DbUtils.kt similarity index 64% rename from app/src/main/java/org/tasks/db/DbUtilsKt.kt rename to app/src/main/java/org/tasks/db/DbUtils.kt index 9ab9250dd..79304b536 100644 --- a/app/src/main/java/org/tasks/db/DbUtilsKt.kt +++ b/app/src/main/java/org/tasks/db/DbUtils.kt @@ -1,7 +1,9 @@ package org.tasks.db -object DbUtilsKt { - fun Iterable.dbchunk(): List> = chunked(DbUtils.MAX_SQLITE_ARGS) +object DbUtils { + const val MAX_SQLITE_ARGS = 990 + + fun Iterable.dbchunk(): List> = chunked(MAX_SQLITE_ARGS) fun Iterable.eachChunk(action: (List) -> Unit) = dbchunk().forEach(action)