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

Commit 21f36e73 authored by cketti's avatar cketti
Browse files

Migrate old pending commands for deleting messages to new format

parent 189f50a1
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -12,7 +12,7 @@ import timber.log.Timber;


class StoreSchemaDefinition implements SchemaDefinition {
    static final int DB_VERSION = 68;
    static final int DB_VERSION = 69;

    private final MigrationsHelper migrationsHelper;

+41 −0
Original line number Diff line number Diff line
package com.fsck.k9.storage.migrations

import android.content.ContentValues
import android.database.sqlite.SQLiteDatabase
import com.fsck.k9.controller.MessagingControllerCommands.PendingDelete
import com.fsck.k9.controller.MessagingControllerCommands.PendingSetFlag
import com.fsck.k9.controller.PendingCommandSerializer
import com.fsck.k9.mail.Flag


internal class MigrationTo69(private val db: SQLiteDatabase) {
    private val serializer: PendingCommandSerializer = PendingCommandSerializer.getInstance()


    fun createPendingDelete() {
        val pendingSetFlagsToConvert = mutableListOf<PendingSetFlag>()

        db.rawQuery("SELECT id, command, data FROM pending_commands WHERE command = 'set_flag'", null).use { cursor ->
            while (cursor.moveToNext()) {
                val databaseId = cursor.getLong(0)
                val commandName = cursor.getString(1)
                val data = cursor.getString(2)

                val pendingSetFlag = serializer.unserialize(databaseId, commandName, data) as PendingSetFlag
                if (pendingSetFlag.flag == Flag.DELETED && pendingSetFlag.newState) {
                    pendingSetFlagsToConvert.add(pendingSetFlag)
                }
            }
        }

        for (pendingSetFlag in pendingSetFlagsToConvert) {
            val pendingDelete = PendingDelete.create(pendingSetFlag.folder, pendingSetFlag.uids)
            val contentValues = ContentValues().apply {
                put("command", "delete")
                put("data", serializer.serialize(pendingDelete))
            }

            db.update("pending_commands", contentValues, "id = ?", arrayOf(pendingSetFlag.databaseId.toString()))
        }
    }
}
+2 −0
Original line number Diff line number Diff line
@@ -94,6 +94,8 @@ public class Migrations {
                MigrationTo67.addTypeColumnToFoldersTable(db, migrationsHelper);
            case 67:
                MigrationTo68.addOutboxStateTable(db);
            case 68:
                new MigrationTo69(db).createPendingDelete();
        }

        if (shouldBuildFtsTable) {