From c6bd6659d3ab236756a86a64bd0967f5ca61180d Mon Sep 17 00:00:00 2001 From: M66B Date: Sat, 21 Oct 2023 19:24:11 +0200 Subject: [PATCH] POP3 delete local hidden messages not on server anymore --- app/src/main/java/eu/faircode/email/Core.java | 76 ++++++++++--------- 1 file changed, 41 insertions(+), 35 deletions(-) diff --git a/app/src/main/java/eu/faircode/email/Core.java b/app/src/main/java/eu/faircode/email/Core.java index 30ea5f63ef..c1a93a4bf8 100644 --- a/app/src/main/java/eu/faircode/email/Core.java +++ b/app/src/main/java/eu/faircode/email/Core.java @@ -3289,45 +3289,51 @@ class Core { ifolder.fetch(imessages, ifetch); } - if (!account.leave_on_device) { - if (hasUidl) { - Map known = new HashMap<>(); - for (TupleUidl id : ids) - if (id.uidl != null) - known.put(id.uidl, id); - - for (Message imessage : imessages) { - String uidl = ifolder.getUID(imessage); - if (TextUtils.isEmpty(uidl)) - known.clear(); // better safe than sorry - else - known.remove(uidl); - } + long now = new Date().getTime(); - for (TupleUidl uidl : known.values()) - if (!uidl.ui_flagged) { - EntityLog.log(context, account.name + " POP purging uidl=" + uidl.uidl); - db.message().deleteMessage(uidl.id); - } - } else { - Map known = new HashMap<>(); - for (TupleUidl id : ids) - if (id.msgid != null) - known.put(id.msgid, id); - - for (int i = imessages.length - max; i < imessages.length; i++) { - Message imessage = imessages[i]; - MessageHelper helper = new MessageHelper((MimeMessage) imessage, context); - String msgid = helper.getPOP3MessageID(); // expensive! - known.remove(msgid); + if (hasUidl) { + Map known = new HashMap<>(); + for (TupleUidl id : ids) + if (id.uidl != null) + known.put(id.uidl, id); + + for (Message imessage : imessages) { + String uidl = ifolder.getUID(imessage); + if (TextUtils.isEmpty(uidl)) + known.clear(); // better safe than sorry + else + known.remove(uidl); + } + + for (TupleUidl uidl : known.values()) + if (!uidl.ui_flagged && + (!account.leave_on_device || + (uidl.ui_hide && (uidl.ui_busy == null || uidl.ui_busy < now)))) { + EntityLog.log(context, account.name + " POP purging" + + " uidl=" + uidl.uidl + " hidden=" + uidl.ui_hide); + db.message().deleteMessage(uidl.id); } + } else { + Map known = new HashMap<>(); + for (TupleUidl id : ids) + if (id.msgid != null) + known.put(id.msgid, id); - for (TupleUidl uidl : known.values()) - if (!uidl.ui_flagged) { - EntityLog.log(context, account.name + " POP purging msgid=" + uidl.msgid); - db.message().deleteMessage(uidl.id); - } + for (int i = imessages.length - max; i < imessages.length; i++) { + Message imessage = imessages[i]; + MessageHelper helper = new MessageHelper((MimeMessage) imessage, context); + String msgid = helper.getPOP3MessageID(); // expensive! + known.remove(msgid); } + + for (TupleUidl uidl : known.values()) + if (!uidl.ui_flagged && + (!account.leave_on_device || + (uidl.ui_hide && (uidl.ui_busy == null || uidl.ui_busy < now)))) { + EntityLog.log(context, account.name + " POP purging" + + " msgid=" + uidl.msgid + " hidden=" + uidl.ui_hide); + db.message().deleteMessage(uidl.id); + } } boolean _new = true;