From 808fcd4e02e66ac2785b5ffa237753a68b3531c1 Mon Sep 17 00:00:00 2001 From: M66B Date: Sat, 26 Jun 2021 17:10:49 +0200 Subject: [PATCH] Set forwarded flag on cross account move --- .../eu/faircode/email/AdapterMessage.java | 4 ++-- app/src/main/java/eu/faircode/email/Core.java | 21 ++++++++++++++----- .../java/eu/faircode/email/EntityMessage.java | 4 ++++ .../java/eu/faircode/email/MessageHelper.java | 1 + .../java/eu/faircode/email/ServiceSend.java | 3 ++- 5 files changed, 25 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/eu/faircode/email/AdapterMessage.java b/app/src/main/java/eu/faircode/email/AdapterMessage.java index 2621ebc2d6..c863a541b3 100644 --- a/app/src/main/java/eu/faircode/email/AdapterMessage.java +++ b/app/src/main/java/eu/faircode/email/AdapterMessage.java @@ -307,8 +307,8 @@ public class AdapterMessage extends RecyclerView.Adapter IMAP_KEYWORDS_BLACKLIST = Collections.unmodifiableList(Arrays.asList( + MessageHelper.FLAG_FORWARDED.toLowerCase(Locale.ROOT), "$MDNSent".toLowerCase(Locale.ROOT), // https://tools.ietf.org/html/rfc3503 - "$Forwarded".toLowerCase(Locale.ROOT), "$SubmitPending".toLowerCase(Locale.ROOT), "$Submitted".toLowerCase(Locale.ROOT), "$Junk".toLowerCase(Locale.ROOT), @@ -1131,7 +1131,7 @@ public class AdapterMessage extends RecyclerView.Adapter 0 ? View.VISIBLE : View.GONE); if (viewType == ViewType.FOLDER) diff --git a/app/src/main/java/eu/faircode/email/Core.java b/app/src/main/java/eu/faircode/email/Core.java index 2dbac0897d..0c0e9b1c7e 100644 --- a/app/src/main/java/eu/faircode/email/Core.java +++ b/app/src/main/java/eu/faircode/email/Core.java @@ -870,7 +870,7 @@ class Core { throw new IllegalArgumentException("keyword/uid"); if (!ifolder.getPermanentFlags().contains(Flags.Flag.USER)) { - if ("$Forwarded".equals(keyword) && false) { + if (MessageHelper.FLAG_FORWARDED.equals(keyword) && false) { JSONArray janswered = new JSONArray(); janswered.put(true); onAnswered(context, janswered, folder, message, ifolder); @@ -1031,10 +1031,21 @@ class Core { imessage.saveChanges(); - imessage.setFlag(Flags.Flag.SEEN, message.ui_seen); - imessage.setFlag(Flags.Flag.ANSWERED, message.ui_answered); - imessage.setFlag(Flags.Flag.FLAGGED, message.ui_flagged); - imessage.setFlag(Flags.Flag.DELETED, message.ui_deleted); + if (flags.contains(Flags.Flag.SEEN)) + imessage.setFlag(Flags.Flag.SEEN, message.ui_seen); + if (flags.contains(Flags.Flag.ANSWERED)) + imessage.setFlag(Flags.Flag.ANSWERED, message.ui_answered); + if (flags.contains(Flags.Flag.FLAGGED)) + imessage.setFlag(Flags.Flag.FLAGGED, message.ui_flagged); + if (flags.contains(Flags.Flag.DELETED)) + imessage.setFlag(Flags.Flag.DELETED, message.ui_deleted); + + if (flags.contains(Flags.Flag.USER)) { + if (message.isForwarded()) { + Flags fwd = new Flags(MessageHelper.FLAG_FORWARDED); + imessage.setFlags(new Flags(fwd), true); + } + } } db.message().setMessageRaw(message.id, true); diff --git a/app/src/main/java/eu/faircode/email/EntityMessage.java b/app/src/main/java/eu/faircode/email/EntityMessage.java index 1963d76902..41e83901fc 100644 --- a/app/src/main/java/eu/faircode/email/EntityMessage.java +++ b/app/src/main/java/eu/faircode/email/EntityMessage.java @@ -300,6 +300,10 @@ public class EntityMessage implements Serializable { return false; } + boolean isForwarded() { + return hasKeyword(MessageHelper.FLAG_FORWARDED); + } + String checkReplyDomain(Context context) { if (from == null || from.length == 0) return null; diff --git a/app/src/main/java/eu/faircode/email/MessageHelper.java b/app/src/main/java/eu/faircode/email/MessageHelper.java index 629f09235c..2139e90ad9 100644 --- a/app/src/main/java/eu/faircode/email/MessageHelper.java +++ b/app/src/main/java/eu/faircode/email/MessageHelper.java @@ -121,6 +121,7 @@ public class MessageHelper { static final int SMALL_MESSAGE_SIZE = 192 * 1024; // bytes static final int DEFAULT_DOWNLOAD_SIZE = 4 * 1024 * 1024; // bytes static final String HEADER_CORRELATION_ID = "X-Correlation-ID"; + static final String FLAG_FORWARDED = "$Forwarded"; private static final int MAX_MESSAGE_SIZE = 10 * 1024 * 1024; // bytes private static final long ATTACHMENT_PROGRESS_UPDATE = 1500L; // milliseconds diff --git a/app/src/main/java/eu/faircode/email/ServiceSend.java b/app/src/main/java/eu/faircode/email/ServiceSend.java index edcabb9878..fc32f53d6e 100644 --- a/app/src/main/java/eu/faircode/email/ServiceSend.java +++ b/app/src/main/java/eu/faircode/email/ServiceSend.java @@ -714,7 +714,8 @@ public class ServiceSend extends ServiceBase implements SharedPreferences.OnShar if (message.wasforwardedfrom != null) { List forwardeds = db.message().getMessagesByMsgId(message.account, message.wasforwardedfrom); for (EntityMessage forwarded : forwardeds) - EntityOperation.queue(this, forwarded, EntityOperation.KEYWORD, "$Forwarded", true); + EntityOperation.queue(this, forwarded, + EntityOperation.KEYWORD, MessageHelper.FLAG_FORWARDED, true); } // Update identity