From 33800c221b24be5fb9b320a3bb2e4954d26c0e65 Mon Sep 17 00:00:00 2001 From: M66B Date: Sat, 9 May 2020 08:49:04 +0200 Subject: [PATCH] Map uidl/msgid --- app/build.gradle | 4 +-- app/src/main/java/eu/faircode/email/Core.java | 17 ++++++++----- .../java/eu/faircode/email/DaoMessage.java | 4 +-- .../java/eu/faircode/email/TupleUidl.java | 25 +++++++++++++++++++ 4 files changed, 40 insertions(+), 10 deletions(-) create mode 100644 app/src/main/java/eu/faircode/email/TupleUidl.java diff --git a/app/build.gradle b/app/build.gradle index cac41c4d66..0627253c4a 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -13,8 +13,8 @@ android { applicationId "eu.faircode.email" minSdkVersion 21 targetSdkVersion 29 - versionCode 1148 - versionName "1.1148" + versionCode 1149 + versionName "1.1149" archivesBaseName = "FairEmail-v$versionName" // https://en.wikipedia.org/wiki/List_of_dinosaur_genera diff --git a/app/src/main/java/eu/faircode/email/Core.java b/app/src/main/java/eu/faircode/email/Core.java index e28d6a10a8..e4672d534f 100644 --- a/app/src/main/java/eu/faircode/email/Core.java +++ b/app/src/main/java/eu/faircode/email/Core.java @@ -1529,8 +1529,13 @@ class Core { db.folder().setFolderSyncState(folder.id, "downloading"); - List uidls = db.message().getUidls(folder.id); - Log.i(folder.name + " POP existing=" + uidls.size()); + List ids = db.message().getUidls(folder.id); + Log.i(folder.name + " POP existing=" + ids.size()); + + Map uidls = new HashMap<>(); + for (TupleUidl id : ids) + if (id.uidl != null) + uidls.put(id.uidl, id); for (Message imessage : imessages) try { @@ -1547,7 +1552,7 @@ class Core { continue; } - if (uidls.contains(uidl)) { + if (uidls.containsKey(uidl)) { uidls.remove(uidl); Log.i(folder.name + " POP having=" + uidl); continue; @@ -1671,9 +1676,9 @@ class Core { } if (!account.leave_on_device) - for (String msgid : uidls) { - Log.i(folder.name + " POP deleted=" + msgid); - db.message().deleteMessage(folder.id, msgid); + for (TupleUidl id : uidls.values()) { + Log.i(folder.name + " POP deleting=" + id.msgid); + db.message().deleteMessage(folder.id, id.msgid); } Log.i(folder.name + " POP done"); diff --git a/app/src/main/java/eu/faircode/email/DaoMessage.java b/app/src/main/java/eu/faircode/email/DaoMessage.java index 1a01f97f65..ad2fbe4bd8 100644 --- a/app/src/main/java/eu/faircode/email/DaoMessage.java +++ b/app/src/main/java/eu/faircode/email/DaoMessage.java @@ -483,9 +483,9 @@ public interface DaoMessage { " AND NOT uid IS NULL") List getUids(long folder, Long received); - @Query("SELECT uidl FROM message" + + @Query("SELECT uidl, msgid FROM message" + " WHERE folder = :folder") - List getUidls(long folder); + List getUidls(long folder); @Query("SELECT * FROM message" + " WHERE folder = :folder" + diff --git a/app/src/main/java/eu/faircode/email/TupleUidl.java b/app/src/main/java/eu/faircode/email/TupleUidl.java new file mode 100644 index 0000000000..d78dab7805 --- /dev/null +++ b/app/src/main/java/eu/faircode/email/TupleUidl.java @@ -0,0 +1,25 @@ +package eu.faircode.email; + +/* + This file is part of FairEmail. + + FairEmail is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + FairEmail is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with FairEmail. If not, see . + + Copyright 2018-2020 by Marcel Bokhorst (M66B) +*/ + +public class TupleUidl { + String uidl; + String msgid; +}