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 2044d6e70..459a1c187 100644 --- a/app/src/main/java/com/todoroo/astrid/service/Upgrader.kt +++ b/app/src/main/java/com/todoroo/astrid/service/Upgrader.kt @@ -42,7 +42,8 @@ class Upgrader @Inject constructor( private val iCal: iCalendar, private val widgetManager: AppWidgetManager, private val taskMover: TaskMover, - private val upgraderDao: UpgraderDao) { + private val upgraderDao: UpgraderDao, + private val openTaskDao: OpenTaskDao) { fun upgrade(from: Int, to: Int) { if (from > 0) { @@ -73,6 +74,7 @@ class Upgrader @Inject constructor( } run(from, V11_3) { applyiCalendarStartDates() + applyOpenTaskStartDates() } preferences.setBoolean(R.string.p_just_updated, true) } @@ -133,6 +135,27 @@ class Upgrader @Inject constructor( .let { taskDao.touch(it) } } + private suspend fun applyOpenTaskStartDates() { + openTaskDao.getLists().forEach { list -> + val (hasStartDate, noStartDate) = + upgraderDao + .getOpenTasksForList(list.account!!, list.url!!) + .partition { it.startDate > 0 } + for (task in noStartDate) { + openTaskDao + .getTask(list.id, task.remoteId!!) + ?.dtStart + ?.let { + it.apply(task.task) + upgraderDao.setStartDate(task.id, task.startDate) + } + } + hasStartDate + .map { it.id } + .let { taskDao.touch(it) } + } + } + private suspend fun applyCaldavOrder() { for (task in upgraderDao.tasksWithVtodos().map(CaldavTaskContainer::caldavTask)) { val remoteTask = fromVtodo(task.vtodo!!) ?: continue diff --git a/app/src/main/java/org/tasks/data/UpgraderDao.kt b/app/src/main/java/org/tasks/data/UpgraderDao.kt index 96c884ee5..92e20c241 100644 --- a/app/src/main/java/org/tasks/data/UpgraderDao.kt +++ b/app/src/main/java/org/tasks/data/UpgraderDao.kt @@ -24,6 +24,16 @@ GROUP BY tasks._id """) suspend fun tasksWithTags(): List + @Query(""" +SELECT task.*, caldav_task.* +FROM tasks AS task + INNER JOIN caldav_tasks AS caldav_task ON _id = cd_task + INNER JOIN caldav_lists ON cd_calendar = cdl_uuid +WHERE cd_deleted = 0 + AND cdl_account = :account AND cdl_url = :url + """) + suspend fun getOpenTasksForList(account: String, url: String): List + @Query("UPDATE tasks SET hideUntil = :startDate WHERE _id = :task") fun setStartDate(task: Long, startDate: Long) } \ No newline at end of file