From 57c4018e3747267ec8ba4fc61986ecfe7b5285e8 Mon Sep 17 00:00:00 2001 From: Alex Baker Date: Thu, 27 Apr 2023 11:01:44 -0500 Subject: [PATCH] Update filters when restoring backup --- .../com/todoroo/astrid/service/Upgrade_13_2.kt | 16 ++++------------ .../java/org/tasks/backup/TasksJsonImporter.kt | 10 +++++++++- .../org/tasks/filters/FilterCriteriaProvider.kt | 9 +++++++++ 3 files changed, 22 insertions(+), 13 deletions(-) diff --git a/app/src/main/java/com/todoroo/astrid/service/Upgrade_13_2.kt b/app/src/main/java/com/todoroo/astrid/service/Upgrade_13_2.kt index 43b549c3b..fc0241150 100644 --- a/app/src/main/java/com/todoroo/astrid/service/Upgrade_13_2.kt +++ b/app/src/main/java/com/todoroo/astrid/service/Upgrade_13_2.kt @@ -2,9 +2,6 @@ package com.todoroo.astrid.service -import com.todoroo.astrid.core.CriterionInstance -import org.tasks.activities.FilterSettingsActivity.Companion.sql -import org.tasks.data.Filter import org.tasks.data.FilterDao import org.tasks.filters.FilterCriteriaProvider import javax.inject.Inject @@ -14,15 +11,10 @@ class Upgrade_13_2 @Inject constructor( private val filterCriteriaProvider: FilterCriteriaProvider, ) { internal suspend fun rebuildFilters() = - filterDao.getFilters().forEach { rebuildFilter(it) } - - private suspend fun rebuildFilter(filter: Filter) { - val serialized = filter.criterion?.takeIf { it.isNotBlank() } - val criterion = filterCriteriaProvider.fromString(serialized) - filter.setSql(criterion.sql) - filter.criterion = CriterionInstance.serialize(criterion) - filterDao.update(filter) - } + filterDao.getFilters().forEach { + filterCriteriaProvider.rebuildFilter(it) + filterDao.update(it) + } companion object { const val VERSION = 130200 diff --git a/app/src/main/java/org/tasks/backup/TasksJsonImporter.kt b/app/src/main/java/org/tasks/backup/TasksJsonImporter.kt index b96c37ca4..1a8ef17cf 100644 --- a/app/src/main/java/org/tasks/backup/TasksJsonImporter.kt +++ b/app/src/main/java/org/tasks/backup/TasksJsonImporter.kt @@ -10,6 +10,7 @@ import com.todoroo.astrid.dao.TaskDao import com.todoroo.astrid.data.Task import com.todoroo.astrid.service.TaskCreator.Companion.getDefaultAlarms import com.todoroo.astrid.service.TaskMover +import com.todoroo.astrid.service.Upgrade_13_2 import com.todoroo.astrid.service.Upgrader import com.todoroo.astrid.service.Upgrader.Companion.V12_4 import com.todoroo.astrid.service.Upgrader.Companion.V12_8 @@ -38,6 +39,7 @@ import org.tasks.data.TaskListMetadataDao import org.tasks.data.UserActivityDao import org.tasks.db.Migrations.repeatFrom import org.tasks.db.Migrations.withoutFrom +import org.tasks.filters.FilterCriteriaProvider import org.tasks.preferences.Preferences import timber.log.Timber import java.io.FileNotFoundException @@ -61,6 +63,7 @@ class TasksJsonImporter @Inject constructor( private val taskMover: TaskMover, private val taskListMetadataDao: TaskListMetadataDao, private val vtodoCache: VtodoCache, + private val filterCriteriaProvider: FilterCriteriaProvider, ) { private val result = ImportResult() @@ -123,7 +126,12 @@ class TasksJsonImporter @Inject constructor( ) } } - backupContainer.filters?.forEach { filter -> + backupContainer + .filters + ?.onEach { + if (version < Upgrade_13_2.VERSION) filterCriteriaProvider.rebuildFilter(it) + } + ?.forEach { filter -> filter.setColor(themeToColor(context, version, filter.getColor()!!)) if (filterDao.getByName(filter.title!!) == null) { filterDao.insert(filter) diff --git a/app/src/main/java/org/tasks/filters/FilterCriteriaProvider.kt b/app/src/main/java/org/tasks/filters/FilterCriteriaProvider.kt index aeafdb835..d7ea4d017 100644 --- a/app/src/main/java/org/tasks/filters/FilterCriteriaProvider.kt +++ b/app/src/main/java/org/tasks/filters/FilterCriteriaProvider.kt @@ -19,9 +19,11 @@ import com.todoroo.astrid.data.Task import dagger.hilt.android.qualifiers.ApplicationContext import org.tasks.R import org.tasks.Strings +import org.tasks.activities.FilterSettingsActivity.Companion.sql import org.tasks.data.Alarm import org.tasks.data.CaldavDao import org.tasks.data.CaldavTask +import org.tasks.data.Filter import org.tasks.data.GoogleTask import org.tasks.data.GoogleTaskListDao import org.tasks.data.Tag @@ -38,6 +40,13 @@ class FilterCriteriaProvider @Inject constructor( private val caldavDao: CaldavDao) { private val r = context.resources + suspend fun rebuildFilter(filter: Filter) { + val serialized = filter.criterion?.takeIf { it.isNotBlank() } + val criterion = fromString(serialized) + filter.setSql(criterion.sql) + filter.criterion = CriterionInstance.serialize(criterion) + } + suspend fun fromString(criterion: String?): List { if (criterion.isNullOrBlank()) { return emptyList()