Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit dd0c25d9 authored by cketti's avatar cketti
Browse files

Rewrite "poll folders" settings to include "push folders"

parent d67aa773
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -21,7 +21,7 @@ import timber.log.Timber;


public class K9StoragePersister implements StoragePersister {
    private static final int DB_VERSION = 8;
    private static final int DB_VERSION = 9;
    private static final String DB_NAME = "preferences_storage";

    private final Context context;
+76 −0
Original line number Diff line number Diff line
package com.fsck.k9.preferences.migrations

import android.database.sqlite.SQLiteDatabase

/**
 * Temporarily disable Push (see GH-4253)
 *
 * Since the plan is to re-enable Push support in the future, we don't actually touch the Push settings. But we
 * configure "poll folders" so folders that have previously used Push will now be polled.
 */
class StorageMigrationTo9(
        private val db: SQLiteDatabase,
        private val migrationsHelper: StorageMigrationsHelper
) {
    fun disablePush() {
        val accountUuidsListValue = migrationsHelper.readValue(db, "accountUuids")
        if (accountUuidsListValue == null || accountUuidsListValue.isEmpty()) {
            return
        }

        val accountUuids = accountUuidsListValue.split(",")
        for (accountUuid in accountUuids) {
            setNewFolderSyncModeForAccount(accountUuid)
        }
    }

    private fun setNewFolderSyncModeForAccount(accountUuid: String) {
        val folderSyncMode = migrationsHelper.readValue(db, "$accountUuid.folderSyncMode")
        val folderPushMode = migrationsHelper.readValue(db, "$accountUuid.folderPushMode")

        val newFolderSyncMode = when {
            folderSyncMode == ALL && folderPushMode == ALL -> ALL
            folderSyncMode == ALL && folderPushMode == FIRST_CLASS -> ALL
            folderSyncMode == ALL && folderPushMode == FIRST_AND_SECOND_CLASS -> ALL
            folderSyncMode == ALL && folderPushMode == NOT_SECOND_CLASS -> ALL
            folderSyncMode == ALL && folderPushMode == NONE -> ALL
            folderSyncMode == FIRST_CLASS && folderPushMode == ALL -> ALL
            folderSyncMode == FIRST_CLASS && folderPushMode == FIRST_CLASS -> FIRST_CLASS
            folderSyncMode == FIRST_CLASS && folderPushMode == FIRST_AND_SECOND_CLASS -> FIRST_AND_SECOND_CLASS
            folderSyncMode == FIRST_CLASS && folderPushMode == NOT_SECOND_CLASS -> NOT_SECOND_CLASS
            folderSyncMode == FIRST_CLASS && folderPushMode == NONE -> FIRST_CLASS
            folderSyncMode == FIRST_AND_SECOND_CLASS && folderPushMode == ALL -> ALL
            folderSyncMode == FIRST_AND_SECOND_CLASS && folderPushMode == FIRST_CLASS -> FIRST_AND_SECOND_CLASS
            folderSyncMode == FIRST_AND_SECOND_CLASS && folderPushMode == FIRST_AND_SECOND_CLASS -> FIRST_AND_SECOND_CLASS
            folderSyncMode == FIRST_AND_SECOND_CLASS && folderPushMode == NOT_SECOND_CLASS -> ALL
            folderSyncMode == FIRST_AND_SECOND_CLASS && folderPushMode == NONE -> FIRST_AND_SECOND_CLASS
            folderSyncMode == NOT_SECOND_CLASS && folderPushMode == ALL -> ALL
            folderSyncMode == NOT_SECOND_CLASS && folderPushMode == FIRST_CLASS -> NOT_SECOND_CLASS
            folderSyncMode == NOT_SECOND_CLASS && folderPushMode == FIRST_AND_SECOND_CLASS -> ALL
            folderSyncMode == NOT_SECOND_CLASS && folderPushMode == NOT_SECOND_CLASS -> NOT_SECOND_CLASS
            folderSyncMode == NOT_SECOND_CLASS && folderPushMode == NONE -> NOT_SECOND_CLASS
            folderSyncMode == NONE && folderPushMode == ALL -> ALL
            folderSyncMode == NONE && folderPushMode == FIRST_CLASS -> FIRST_CLASS
            folderSyncMode == NONE && folderPushMode == FIRST_AND_SECOND_CLASS -> FIRST_AND_SECOND_CLASS
            folderSyncMode == NONE && folderPushMode == NOT_SECOND_CLASS -> NOT_SECOND_CLASS
            folderSyncMode == NONE && folderPushMode == NONE -> NONE
            else -> FIRST_CLASS
        }

        migrationsHelper.writeValue(db, "$accountUuid.folderSyncMode", newFolderSyncMode)

        if (folderPushMode != NONE) {
            migrationsHelper.writeValue(db, "$accountUuid.automaticCheckIntervalMinutes", LOWEST_FREQUENCY_SUPPORTED)
        }
    }

    companion object {
        private const val NONE = "NONE"
        private const val ALL = "ALL"
        private const val FIRST_CLASS = "FIRST_CLASS"
        private const val FIRST_AND_SECOND_CLASS = "FIRST_AND_SECOND_CLASS"
        private const val NOT_SECOND_CLASS = "NOT_SECOND_CLASS"

        private const val LOWEST_FREQUENCY_SUPPORTED = "15"
    }
}
+8 −7
Original line number Diff line number Diff line
@@ -7,12 +7,13 @@ internal object StorageMigrations {
    fun upgradeDatabase(db: SQLiteDatabase, migrationsHelper: StorageMigrationsHelper) {
        val oldVersion = db.version

        if (oldVersion <= 1) StorageMigrationTo2.urlEncodeUserNameAndPassword(db, migrationsHelper)
        if (oldVersion <= 2) StorageMigrationTo3(db, migrationsHelper).rewriteFolderNone()
        if (oldVersion <= 3) StorageMigrationTo4(db, migrationsHelper).insertSpecialFolderSelectionValues()
        if (oldVersion <= 4) StorageMigrationTo5(db, migrationsHelper).fixMailCheckFrequencies()
        if (oldVersion <= 5) StorageMigrationTo6(db, migrationsHelper).performLegacyMigrations()
        if (oldVersion <= 6) StorageMigrationTo7(db, migrationsHelper).rewriteEnumOrdinalsToNames()
        if (oldVersion <= 7) StorageMigrationTo8(db, migrationsHelper).rewriteTheme()
        if (oldVersion < 2) StorageMigrationTo2.urlEncodeUserNameAndPassword(db, migrationsHelper)
        if (oldVersion < 3) StorageMigrationTo3(db, migrationsHelper).rewriteFolderNone()
        if (oldVersion < 4) StorageMigrationTo4(db, migrationsHelper).insertSpecialFolderSelectionValues()
        if (oldVersion < 5) StorageMigrationTo5(db, migrationsHelper).fixMailCheckFrequencies()
        if (oldVersion < 6) StorageMigrationTo6(db, migrationsHelper).performLegacyMigrations()
        if (oldVersion < 7) StorageMigrationTo7(db, migrationsHelper).rewriteEnumOrdinalsToNames()
        if (oldVersion < 8) StorageMigrationTo8(db, migrationsHelper).rewriteTheme()
        if (oldVersion < 9) StorageMigrationTo9(db, migrationsHelper).disablePush()
    }
}