diff --git a/app/src/main/java/eu/faircode/email/DaoMessage.java b/app/src/main/java/eu/faircode/email/DaoMessage.java index 5491a0107c..aae0e4e969 100644 --- a/app/src/main/java/eu/faircode/email/DaoMessage.java +++ b/app/src/main/java/eu/faircode/email/DaoMessage.java @@ -250,9 +250,9 @@ public interface DaoMessage { @Query("SELECT uid FROM message" + " WHERE folder = :folder" + - " AND received >= :received" + + " AND (received IS NULL OR received >= :received)" + " AND NOT uid IS NULL") - List getUids(long folder, long received); + List getUids(long folder, Long received); @Insert long insertMessage(EntityMessage message); diff --git a/app/src/main/java/eu/faircode/email/ServiceSynchronize.java b/app/src/main/java/eu/faircode/email/ServiceSynchronize.java index d7b719309a..812b32619e 100644 --- a/app/src/main/java/eu/faircode/email/ServiceSynchronize.java +++ b/app/src/main/java/eu/faircode/email/ServiceSynchronize.java @@ -2090,7 +2090,7 @@ public class ServiceSynchronize extends LifecycleService { Log.i(folder.name + " local old=" + old); // Get list of local uids - List uids = db.message().getUids(folder.id, sync_time); + List uids = db.message().getUids(folder.id, null); Log.i(folder.name + " local count=" + uids.size()); // Reduce list of local uids @@ -2123,6 +2123,15 @@ public class ServiceSynchronize extends LifecycleService { db.folder().setFolderError(folder.id, Helper.formatThrowable(ex)); } + long[] auids = Helper.toLongArray(uids); + Message[] iuids = ifolder.getMessagesByUID(auids); + for (int i = 0; i < iuids.length; i++) + if (iuids[i] != null) + uids.remove(auids[i]); + + long getuid = SystemClock.elapsedRealtime(); + Log.i(folder.name + " remote getuid=" + (SystemClock.elapsedRealtime() - getuid) + " ms"); + // Delete local messages not at remote Log.i(folder.name + " delete=" + uids.size()); for (Long uid : uids) {