Add UpgraderDao

pull/1296/head
Alex Baker 3 years ago
parent cff034084c
commit 3664f39571

@ -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
*/

@ -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<CaldavTask> = 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<Long> = caldavDao.getTasksWithTags()
for (container in caldavDao.getTasks()) {
val tasksWithTags: List<Long> = upgraderDao.tasksWithTags()
for (container in upgraderDao.tasksWithVtodos()) {
val remoteTask = fromVtodo(container.vtodo!!)
if (remoteTask != null) {
tagDao.insert(container.task, iCal.getTags(remoteTask.categories))

@ -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<Long>): List<CaldavTask>
@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<CaldavTaskContainer>
@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<CaldavFilters>
@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<Long>
@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"

@ -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<CaldavTaskContainer>
@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<Long>
}

@ -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)

Loading…
Cancel
Save