From 194d09436b39eb46f321cd0545aa1cccb9c78177 Mon Sep 17 00:00:00 2001 From: M66B Date: Wed, 29 May 2024 13:30:25 +0200 Subject: [PATCH] Skip similar messages with the same ID --- .../eu/faircode/email/EntityOperation.java | 29 +++++++++++++++++-- 1 file changed, 26 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/eu/faircode/email/EntityOperation.java b/app/src/main/java/eu/faircode/email/EntityOperation.java index 0009e2d02a..2e39a069e2 100644 --- a/app/src/main/java/eu/faircode/email/EntityOperation.java +++ b/app/src/main/java/eu/faircode/email/EntityOperation.java @@ -123,22 +123,34 @@ public class EntityOperation { if (SEEN.equals(name)) { boolean seen = jargs.getBoolean(0); boolean ignore = jargs.optBoolean(1, true); - for (EntityMessage similar : db.message().getMessagesBySimilarity(message.account, message.id, message.msgid, message.hash)) + EntityAccount account = db.account().getAccount(message.id); + for (EntityMessage similar : db.message().getMessagesBySimilarity(message.account, message.id, message.msgid, message.hash)) { + if ((account != null && !account.isGmail()) && + !Objects.equals(message.id, similar.id) && + Objects.equals(message.msgid, similar.msgid)) + continue; if (similar.ui_seen != seen || similar.ui_ignored != ignore) { db.message().setMessageUiSeen(similar.id, seen); db.message().setMessageUiIgnored(similar.id, ignore); queue(context, similar.account, similar.folder, similar.id, name, jargs); } + } return; } else if (FLAG.equals(name)) { boolean flagged = jargs.getBoolean(0); Integer color = (jargs.length() > 1 && !jargs.isNull(1) ? jargs.getInt(1) : null); - for (EntityMessage similar : db.message().getMessagesBySimilarity(message.account, message.id, message.msgid, message.hash)) + EntityAccount account = db.account().getAccount(message.id); + for (EntityMessage similar : db.message().getMessagesBySimilarity(message.account, message.id, message.msgid, message.hash)) { + if ((account != null && !account.isGmail()) && + !Objects.equals(message.id, similar.id) && + Objects.equals(message.msgid, similar.msgid)) + continue; if (similar.ui_flagged != flagged || !Objects.equals(similar.color, color)) { db.message().setMessageUiFlagged(similar.id, flagged, flagged ? color : null); queue(context, similar.account, similar.folder, similar.id, name, jargs); } + } SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); boolean auto_important = prefs.getBoolean("auto_important", false); @@ -151,7 +163,12 @@ public class EntityOperation { return; } else if (ANSWERED.equals(name)) { + EntityAccount account = db.account().getAccount(message.id); for (EntityMessage similar : db.message().getMessagesBySimilarity(message.account, message.id, message.msgid, message.hash)) { + if ((account != null && !account.isGmail()) && + !Objects.equals(message.id, similar.id) && + Objects.equals(message.msgid, similar.msgid)) + continue; db.message().setMessageUiAnswered(similar.id, jargs.getBoolean(0)); queue(context, similar.account, similar.folder, similar.id, name, jargs); } @@ -280,8 +297,13 @@ public class EntityOperation { " target=" + target.id + ":" + target.type + ":" + target.name + " auto read=" + autoread + " flag=" + autounflag + " importance=" + reset_importance); - if (autoread || autounflag || reset_importance) + if (autoread || autounflag || reset_importance) { + EntityAccount account = db.account().getAccount(message.account); for (EntityMessage similar : db.message().getMessagesBySimilarity(message.account, message.id, message.msgid, message.hash)) { + if ((account != null && !account.isGmail()) && + !Objects.equals(message.id, similar.id) && + Objects.equals(message.msgid, similar.msgid)) + continue; if (autoread) queue(context, similar, SEEN, true); if (autounflag) @@ -292,6 +314,7 @@ public class EntityOperation { queue(context, similar, KEYWORD, MessageHelper.FLAG_HIGH_IMPORTANCE, false); } } + } if (message.ui_found) db.message().setMessageFound(message.id, false);