From 99243e575154b6969e8996b0f259f23d5a7debe7 Mon Sep 17 00:00:00 2001 From: Alex Baker Date: Sun, 30 Apr 2023 19:30:34 -0500 Subject: [PATCH] Migrate Google Task default lists --- app/src/main/java/org/tasks/db/Migrations.kt | 28 +++++++++++++++++-- .../org/tasks/injection/ProductionModule.kt | 2 +- .../preferences/DefaultFilterProvider.kt | 2 +- 3 files changed, 27 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/org/tasks/db/Migrations.kt b/app/src/main/java/org/tasks/db/Migrations.kt index 53e76b7f8..f0bc19cd9 100644 --- a/app/src/main/java/org/tasks/db/Migrations.kt +++ b/app/src/main/java/org/tasks/db/Migrations.kt @@ -1,6 +1,8 @@ package org.tasks.db +import android.content.Context import android.database.sqlite.SQLiteException +import androidx.core.database.getStringOrNull import androidx.room.DeleteColumn import androidx.room.migration.AutoMigrationSpec import androidx.room.migration.Migration @@ -10,6 +12,7 @@ import com.todoroo.astrid.data.Task import com.todoroo.astrid.data.Task.Companion.NOTIFY_AFTER_DEADLINE import com.todoroo.astrid.data.Task.Companion.NOTIFY_AT_DEADLINE import com.todoroo.astrid.data.Task.Companion.NOTIFY_AT_START +import org.tasks.R import org.tasks.caldav.FileStorage import org.tasks.data.Alarm.Companion.TYPE_RANDOM import org.tasks.data.Alarm.Companion.TYPE_REL_END @@ -22,6 +25,8 @@ import org.tasks.data.CaldavCalendar.Companion.ACCESS_READ_ONLY import org.tasks.data.OpenTaskDao.Companion.getLong import org.tasks.extensions.getLongOrNull import org.tasks.extensions.getString +import org.tasks.preferences.DefaultFilterProvider +import org.tasks.preferences.Preferences import org.tasks.repeats.RecurrenceUtils.newRecur import org.tasks.time.DateTime import timber.log.Timber @@ -590,8 +595,22 @@ object Migrations { } } - private val MIGRATION_87_88 = object : Migration(87, 88) { + private fun migration_87_88(context: Context) = object : Migration(87, 88) { override fun migrate(database: SupportSQLiteDatabase) { + val prefs = Preferences(context) + val defaultList = prefs.getStringValue(R.string.p_default_list)?.split(":") + if ( + (defaultList?.size == 2) && + (defaultList[0].toIntOrNull()?.equals(DefaultFilterProvider.TYPE_GOOGLE_TASKS) == true) + ) { + database.query("SELECT `gtl_remote_id` FROM `google_task_lists` WHERE `gtl_id` = ${defaultList[1]}").use { cursor -> + if (cursor.moveToFirst()) { + cursor.getStringOrNull(0)?.let { uuid -> + prefs.setString(R.string.p_default_list, "${DefaultFilterProvider.TYPE_GOOGLE_TASKS}:$uuid") + } + } + } + } // migrate google task accounts and lists to caldav table database.execSQL("ALTER TABLE `caldav_lists` ADD COLUMN `cdl_last_sync` INTEGER NOT NULL DEFAULT 0") database.execSQL("INSERT INTO `caldav_accounts` (`cda_account_type`, `cda_server_type`, `cda_uuid`, `cda_name`, `cda_username`, `cda_collapsed`) SELECT $TYPE_GOOGLE_TASKS, $SERVER_UNKNOWN, `gta_account`, `gta_account`, `gta_account`, `gta_collapsed` FROM `google_task_accounts`") @@ -611,7 +630,10 @@ object Migrations { } } - fun migrations(fileStorage: FileStorage) = arrayOf( + fun migrations( + context: Context, + fileStorage: FileStorage + ) = arrayOf( MIGRATION_35_36, MIGRATION_36_37, MIGRATION_37_38, @@ -654,7 +676,7 @@ object Migrations { MIGRATION_84_85, MIGRATION_85_86, MIGRATION_86_87, - MIGRATION_87_88, + migration_87_88(context), ) private fun noop(from: Int, to: Int): Migration = object : Migration(from, to) { diff --git a/app/src/main/java/org/tasks/injection/ProductionModule.kt b/app/src/main/java/org/tasks/injection/ProductionModule.kt index c9d45bf71..88c12c70d 100644 --- a/app/src/main/java/org/tasks/injection/ProductionModule.kt +++ b/app/src/main/java/org/tasks/injection/ProductionModule.kt @@ -32,7 +32,7 @@ internal class ProductionModule { fileStorage: FileStorage, ): Database { val builder = Room.databaseBuilder(context, Database::class.java, Database.NAME) - .addMigrations(*Migrations.migrations(fileStorage)) + .addMigrations(*Migrations.migrations(context, fileStorage)) if (!BuildConfig.DEBUG || !preferences.getBoolean(R.string.p_crash_main_queries, false)) { builder.allowMainThreadQueries() } diff --git a/app/src/main/java/org/tasks/preferences/DefaultFilterProvider.kt b/app/src/main/java/org/tasks/preferences/DefaultFilterProvider.kt index 19fb1b540..197c5edae 100644 --- a/app/src/main/java/org/tasks/preferences/DefaultFilterProvider.kt +++ b/app/src/main/java/org/tasks/preferences/DefaultFilterProvider.kt @@ -200,7 +200,7 @@ class DefaultFilterProvider @Inject constructor( private const val TYPE_FILTER = 0 private const val TYPE_CUSTOM_FILTER = 1 private const val TYPE_TAG = 2 - private const val TYPE_GOOGLE_TASKS = 3 + const val TYPE_GOOGLE_TASKS = 3 private const val TYPE_CALDAV = 4 private const val TYPE_LOCATION = 5 private const val FILTER_MY_TASKS = 0