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

Commit 63c16c13 authored by cketti's avatar cketti
Browse files

Use folder database ID for PendingDelete

parent 4e2d0844
Loading
Loading
Loading
Loading
+9 −10
Original line number Diff line number Diff line
@@ -927,20 +927,18 @@ public class MessagingController {
        backend.setFlag(command.folder, command.uids, command.flag, command.newState);
    }

    private void queueDelete(final Account account, final String folderServerId, final List<String> uids) {
        putBackground("queueDelete " + account.getDescription() + ":" + folderServerId, null, new Runnable() {
            @Override
            public void run() {
                PendingCommand command = PendingDelete.create(folderServerId, uids);
    private void queueDelete(Account account, long folderId, List<String> uids) {
        putBackground("queueDelete", null, () -> {
            PendingCommand command = PendingDelete.create(folderId, uids);
            queuePendingCommand(account, command);
            processPendingCommands(account);
            }
        });
    }

    void processPendingDelete(PendingDelete command, Account account) throws MessagingException {
        Backend backend = getBackend(account);
        backend.deleteMessages(command.folder, command.uids);
        String folderServerId = getFolderServerId(account, command.folderId);
        backend.deleteMessages(folderServerId, command.uids);
    }

    private void queueExpunge(Account account, long folderId) {
@@ -2080,7 +2078,8 @@ public class MessagingController {
                if (account.getDeletePolicy() == DeletePolicy.ON_DELETE) {
                    if (!account.hasTrashFolder() || folder.equals(account.getTrashFolder()) ||
                            !backend.isDeleteMoveToTrash()) {
                        queueDelete(account, folder, syncedMessageUids);
                        long folderId = localFolder.getDatabaseId();
                        queueDelete(account, folderId, syncedMessageUids);
                    } else if (account.isMarkMessageAsReadOnDelete()) {
                        queueMoveOrCopy(account, folder, account.getTrashFolder(),
                                MoveOrCopyFlavor.MOVE_AND_MARK_AS_READ, uidMap);
+5 −6
Original line number Diff line number Diff line
@@ -201,18 +201,17 @@ public class MessagingControllerCommands {
    }

    public static class PendingDelete extends PendingCommand {
        public final String folder;
        public final long folderId;
        public final List<String> uids;


        public static PendingDelete create(String folder, List<String> uids) {
            checkNotNull(folder);
        public static PendingDelete create(long folderId, List<String> uids) {
            requireValidUids(uids);
            return new PendingDelete(folder, uids);
            return new PendingDelete(folderId, uids);
        }

        private PendingDelete(String folder, List<String> uids) {
            this.folder = folder;
        private PendingDelete(long folderId, List<String> uids) {
            this.folderId = folderId;
            this.uids = uids;
        }

+1 −0
Original line number Diff line number Diff line
@@ -10,6 +10,7 @@ dependencies {
    implementation project(":app:core")
    implementation "com.jakewharton.timber:timber:${versions.timber}"
    implementation "org.apache.james:apache-mime4j-core:${versions.mime4j}"
    implementation "com.squareup.moshi:moshi:${versions.moshi}"

    testImplementation project(':mail:testing')
    testImplementation project(':app:testing')
+23 −0
Original line number Diff line number Diff line
package com.fsck.k9.storage.migrations;

import java.util.List;

import static com.fsck.k9.controller.Preconditions.requireValidUids;
import static com.fsck.k9.helper.Preconditions.checkNotNull;

class LegacyPendingDelete {
    public final String folder;
    public final List<String> uids;


    static LegacyPendingDelete create(String folder, List<String> uids) {
        checkNotNull(folder);
        requireValidUids(uids);
        return new LegacyPendingDelete(folder, uids);
    }

    private LegacyPendingDelete(String folder, List<String> uids) {
        this.folder = folder;
        this.uids = uids;
    }
}
+6 −3
Original line number Diff line number Diff line
@@ -2,10 +2,10 @@ 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
import com.squareup.moshi.Moshi

internal class MigrationTo69(private val db: SQLiteDatabase) {
    private val serializer: PendingCommandSerializer = PendingCommandSerializer.getInstance()
@@ -26,11 +26,14 @@ internal class MigrationTo69(private val db: SQLiteDatabase) {
            }
        }

        val moshi = Moshi.Builder().build()
        val adapter = moshi.adapter(LegacyPendingDelete::class.java)

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

            db.update("pending_commands", contentValues, "id = ?", arrayOf(pendingSetFlag.databaseId.toString()))