From 5873f89efd84e6985e61c481e250c941b90f13a2 Mon Sep 17 00:00:00 2001 From: M66B Date: Wed, 13 May 2020 14:33:47 +0200 Subject: [PATCH] Fix POP3 uidls --- app/src/main/java/eu/faircode/email/Core.java | 19 +++++++++++++++---- .../java/eu/faircode/email/DaoMessage.java | 6 ++++-- 2 files changed, 19 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/eu/faircode/email/Core.java b/app/src/main/java/eu/faircode/email/Core.java index eb06732118..b4afa3a7fb 100644 --- a/app/src/main/java/eu/faircode/email/Core.java +++ b/app/src/main/java/eu/faircode/email/Core.java @@ -1536,12 +1536,14 @@ class Core { List ids = db.message().getUidls(folder.id); Log.i(folder.name + " POP existing=" + ids.size()); + // Map identifiers Map uidls = new HashMap<>(); + Map msgids = new HashMap<>(); for (TupleUidl id : ids) - if (id.uidl == null) - db.message().deleteMessage(id.id); - else + if (id.uidl != null) uidls.put(id.uidl, id); + else if (id.msgid != null) + msgids.put(id.msgid, id); for (Message imessage : imessages) try { @@ -1560,10 +1562,19 @@ class Core { if (uidls.containsKey(uidl)) { uidls.remove(uidl); - Log.i(folder.name + " POP having=" + uidl); + Log.i(folder.name + " POP having uidl=" + uidl); continue; } + if (caps.containsKey("UIDL")) { + String msgid = helper.getMessageID(); + if (msgids.containsKey(msgid)) { + Log.i(folder.name + " POP having msgid=" + msgid); + db.message().setMessageUidl(msgids.get(msgid).id, uidl); + continue; + } + } + try { Log.i(folder.name + " POP sync=" + uidl); diff --git a/app/src/main/java/eu/faircode/email/DaoMessage.java b/app/src/main/java/eu/faircode/email/DaoMessage.java index 1088184178..c38cf40a8d 100644 --- a/app/src/main/java/eu/faircode/email/DaoMessage.java +++ b/app/src/main/java/eu/faircode/email/DaoMessage.java @@ -664,10 +664,12 @@ public interface DaoMessage { @Query("UPDATE message SET ui_found = 0") int resetSearch(); - @Query("UPDATE message SET ui_snoozed = :wakeup" + - " WHERE id = :id") + @Query("UPDATE message SET ui_snoozed = :wakeup WHERE id = :id") int setMessageSnoozed(long id, Long wakeup); + @Query("UPDATE message SET uidl = :uidl WHERE id = :id") + int setMessageUidl(long id, String uidl); + @Query("UPDATE message SET notifying = 0") int clearNotifyingMessages();