From 0623cd5dd2c6efef6c12f06b52e3d00224f63745 Mon Sep 17 00:00:00 2001 From: M66B Date: Fri, 7 Aug 2020 20:49:27 +0200 Subject: [PATCH] Use IMAP MOVE when available --- app/src/main/java/eu/faircode/email/Core.java | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/eu/faircode/email/Core.java b/app/src/main/java/eu/faircode/email/Core.java index be7b240ab1..c765eeb3a0 100644 --- a/app/src/main/java/eu/faircode/email/Core.java +++ b/app/src/main/java/eu/faircode/email/Core.java @@ -953,6 +953,8 @@ class Core { db.message().deleteMessage(message.id); } + boolean canMove = istore.hasCapability("MOVE"); + // Some providers do not support the COPY operation for drafts boolean draft = (EntityFolder.DRAFTS.equals(folder.type) || EntityFolder.DRAFTS.equals(target.type)); if (draft) { @@ -986,7 +988,7 @@ class Core { itarget.appendMessages(icopies.toArray(new Message[0])); } else { for (Message imessage : map.keySet()) { - Log.i("Move seen=" + seen + " unflag=" + unflag + " flags=" + imessage.getFlags()); + Log.i("Move seen=" + seen + " unflag=" + unflag + " flags=" + imessage.getFlags() + " can=" + canMove); // Mark read if (seen && flags.contains(Flags.Flag.SEEN)) @@ -997,11 +999,15 @@ class Core { imessage.setFlag(Flags.Flag.FLAGGED, false); } - ifolder.copyMessages(map.keySet().toArray(new Message[0]), itarget); + // https://tools.ietf.org/html/rfc6851 + if (!copy && canMove) + ifolder.moveMessages(map.keySet().toArray(new Message[0]), itarget); + else + ifolder.copyMessages(map.keySet().toArray(new Message[0]), itarget); } // Delete source - if (!copy) { + if (!copy && (draft || !canMove)) { try { for (Message imessage : map.keySet()) imessage.setFlag(Flags.Flag.DELETED, true);