From 3664f395716e66df6b39c432c27fb4140d507efd Mon Sep 17 00:00:00 2001 From: Alex Baker Date: Thu, 14 Jan 2021 11:57:20 -0600 Subject: [PATCH] Add UpgraderDao --- .../java/com/todoroo/astrid/dao/Database.kt | 1 + .../com/todoroo/astrid/service/Upgrader.kt | 13 +++++----- app/src/main/java/org/tasks/data/CaldavDao.kt | 11 -------- .../main/java/org/tasks/data/UpgraderDao.kt | 26 +++++++++++++++++++ .../org/tasks/injection/ApplicationModule.kt | 4 +++ 5 files changed, 38 insertions(+), 17 deletions(-) create mode 100644 app/src/main/java/org/tasks/data/UpgraderDao.kt diff --git a/app/src/main/java/com/todoroo/astrid/dao/Database.kt b/app/src/main/java/com/todoroo/astrid/dao/Database.kt index d3484c312..01d407ef3 100644 --- a/app/src/main/java/com/todoroo/astrid/dao/Database.kt +++ b/app/src/main/java/com/todoroo/astrid/dao/Database.kt @@ -44,6 +44,7 @@ abstract class Database : RoomDatabase() { abstract val caldavDao: CaldavDao abstract val deletionDao: DeletionDao abstract val contentProviderDao: ContentProviderDao + abstract val upgraderDao: UpgraderDao /** @return human-readable database name for debugging */ 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 ee1f58dd3..4e172e9d6 100644 --- a/app/src/main/java/com/todoroo/astrid/service/Upgrader.kt +++ b/app/src/main/java/com/todoroo/astrid/service/Upgrader.kt @@ -40,7 +40,8 @@ class Upgrader @Inject constructor( private val locationDao: LocationDao, private val iCal: iCalendar, private val widgetManager: AppWidgetManager, - private val taskMover: TaskMover) { + private val taskMover: TaskMover, + private val upgraderDao: UpgraderDao) { fun upgrade(from: Int, to: Int) { if (from > 0) { @@ -116,7 +117,7 @@ class Upgrader @Inject constructor( } private suspend fun applyCaldavOrder() { - for (task in caldavDao.getTasks().map(CaldavTaskContainer::caldavTask)) { + for (task in upgraderDao.tasksWithVtodos().map(CaldavTaskContainer::caldavTask)) { val remoteTask = fromVtodo(task.vtodo!!) ?: continue val order: Long? = remoteTask.order if (order != null) { @@ -128,7 +129,7 @@ class Upgrader @Inject constructor( private suspend fun applyCaldavGeo() { val tasksWithLocations = locationDao.getActiveGeofences().map(Location::task) - for (task in caldavDao.getTasks().map(CaldavTaskContainer::caldavTask)) { + for (task in upgraderDao.tasksWithVtodos().map(CaldavTaskContainer::caldavTask)) { val taskId = task.task if (tasksWithLocations.contains(taskId)) { continue @@ -142,7 +143,7 @@ class Upgrader @Inject constructor( private suspend fun applyCaldavSubtasks() { val updated: MutableList = ArrayList() - for (task in caldavDao.getTasks().map(CaldavTaskContainer::caldavTask)) { + for (task in upgraderDao.tasksWithVtodos().map(CaldavTaskContainer::caldavTask)) { val remoteTask = fromVtodo(task.vtodo!!) ?: continue task.remoteParent = remoteTask.getParent() if (!isNullOrEmpty(task.remoteParent)) { @@ -154,8 +155,8 @@ class Upgrader @Inject constructor( } private suspend fun applyCaldavCategories() { - val tasksWithTags: List = caldavDao.getTasksWithTags() - for (container in caldavDao.getTasks()) { + val tasksWithTags: List = upgraderDao.tasksWithTags() + for (container in upgraderDao.tasksWithVtodos()) { val remoteTask = fromVtodo(container.vtodo!!) if (remoteTask != null) { tagDao.insert(container.task, iCal.getTags(remoteTask.categories)) diff --git a/app/src/main/java/org/tasks/data/CaldavDao.kt b/app/src/main/java/org/tasks/data/CaldavDao.kt index f5964e126..0afb26c71 100644 --- a/app/src/main/java/org/tasks/data/CaldavDao.kt +++ b/app/src/main/java/org/tasks/data/CaldavDao.kt @@ -169,11 +169,6 @@ SELECT EXISTS(SELECT 1 @Query("SELECT * FROM caldav_tasks WHERE cd_task in (:taskIds) AND cd_deleted = 0") internal abstract suspend fun getTasksInternal(taskIds: List): List - @Query("SELECT task.*, caldav_task.* FROM tasks AS task " - + "INNER JOIN caldav_tasks AS caldav_task ON _id = cd_task " - + "WHERE cd_deleted = 0 AND cd_vtodo IS NOT NULL AND cd_vtodo != ''") - abstract suspend fun getTasks(): List - @Query("SELECT task.*, caldav_task.* FROM tasks AS task " + "INNER JOIN caldav_tasks AS caldav_task ON _id = cd_task " + "WHERE cd_calendar = :calendar " @@ -237,12 +232,6 @@ SELECT EXISTS(SELECT 1 + " GROUP BY caldav_lists.cdl_uuid") abstract suspend fun getCaldavFilters(uuid: String, now: Long = currentTimeMillis()): List - @Query("SELECT tasks._id FROM tasks " - + "INNER JOIN tags ON tags.task = tasks._id " - + "INNER JOIN caldav_tasks ON cd_task = tasks._id " - + "GROUP BY tasks._id") - abstract suspend fun getTasksWithTags(): List - @Query("UPDATE tasks SET parent = IFNULL((" + " SELECT p.cd_task FROM caldav_tasks AS p" + " INNER JOIN caldav_tasks ON caldav_tasks.cd_task = tasks._id" diff --git a/app/src/main/java/org/tasks/data/UpgraderDao.kt b/app/src/main/java/org/tasks/data/UpgraderDao.kt new file mode 100644 index 000000000..72844816c --- /dev/null +++ b/app/src/main/java/org/tasks/data/UpgraderDao.kt @@ -0,0 +1,26 @@ +package org.tasks.data + +import androidx.room.Dao +import androidx.room.Query + +@Dao +interface UpgraderDao { + @Query(""" +SELECT task.*, caldav_task.* +FROM tasks AS task + INNER JOIN caldav_tasks AS caldav_task ON _id = cd_task +WHERE cd_deleted = 0 + AND cd_vtodo IS NOT NULL + AND cd_vtodo != '' + """) + suspend fun tasksWithVtodos(): List + + @Query(""" +SELECT tasks._id +FROM tasks + INNER JOIN tags ON tags.task = tasks._id + INNER JOIN caldav_tasks ON cd_task = tasks._id +GROUP BY tasks._id + """) + suspend fun tasksWithTags(): List +} \ No newline at end of file diff --git a/app/src/main/java/org/tasks/injection/ApplicationModule.kt b/app/src/main/java/org/tasks/injection/ApplicationModule.kt index 7c084f072..a430c661d 100644 --- a/app/src/main/java/org/tasks/injection/ApplicationModule.kt +++ b/app/src/main/java/org/tasks/injection/ApplicationModule.kt @@ -89,6 +89,10 @@ class ApplicationModule { @Singleton fun getContentProviderDao(db: Database): ContentProviderDao = db.contentProviderDao + @Provides + @Singleton + fun getUpgraderDao(db: Database) = db.upgraderDao + @Provides fun getBillingClient(@ApplicationContext context: Context, inventory: Inventory, firebase: Firebase): BillingClient = BillingClientImpl(context, inventory, firebase)