From 95079b7b70b54426cf20d2df2d11853f1535b33e Mon Sep 17 00:00:00 2001 From: M66B Date: Mon, 17 Apr 2023 09:21:02 +0200 Subject: [PATCH] Added solution for draft orphans --- app/src/main/java/eu/faircode/email/DaoMessage.java | 8 ++++++++ .../main/java/eu/faircode/email/EntityOperation.java | 12 ++++++++++++ 2 files changed, 20 insertions(+) diff --git a/app/src/main/java/eu/faircode/email/DaoMessage.java b/app/src/main/java/eu/faircode/email/DaoMessage.java index 332bf74582..343b95ccbe 100644 --- a/app/src/main/java/eu/faircode/email/DaoMessage.java +++ b/app/src/main/java/eu/faircode/email/DaoMessage.java @@ -984,6 +984,14 @@ public interface DaoMessage { ) int deleteOrphans(long folder, long now); + @Query("SELECT * FROM message" + + " WHERE folder = :folder" + + " AND uid IS NULL" + + " AND NOT EXISTS" + + " (SELECT * FROM operation" + + " WHERE operation.message = message.id)") + List getDraftOrphans(long folder); + @Query("SELECT * FROM message" + " WHERE folder = :folder" + " AND uid IS NULL" + diff --git a/app/src/main/java/eu/faircode/email/EntityOperation.java b/app/src/main/java/eu/faircode/email/EntityOperation.java index c32b0ed079..d0420d3e98 100644 --- a/app/src/main/java/eu/faircode/email/EntityOperation.java +++ b/app/src/main/java/eu/faircode/email/EntityOperation.java @@ -795,6 +795,18 @@ public class EntityOperation { if (foreground && folder.sync_state == null) // Show spinner db.folder().setFolderSyncState(fid, "requested"); + if (force && foreground && EntityFolder.DRAFTS.equals(folder.type)) { + EntityAccount account = db.account().getAccount(folder.account); + if (account.protocol == EntityAccount.TYPE_IMAP) { + List orphans = db.message().getDraftOrphans(folder.id); + if (orphans != null) { + EntityLog.log(context, "Draft orphans=" + orphans.size()); + for (EntityMessage orphan : orphans) + EntityOperation.queue(context, orphan, EntityOperation.ADD); + } + } + } + if (foreground && EntityFolder.SENT.equals(folder.type)) { EntityAccount account = db.account().getAccount(folder.account); if (account.protocol == EntityAccount.TYPE_IMAP) {