From 2902053f377752223816b72c6120f3f7f0c769eb Mon Sep 17 00:00:00 2001 From: M66B Date: Wed, 25 Jan 2023 10:33:16 +0100 Subject: [PATCH] Added shortcuts for POP3 operations --- app/src/main/java/eu/faircode/email/Core.java | 40 ------------------- .../eu/faircode/email/EntityOperation.java | 38 ++++++++++++++++++ .../java/eu/faircode/email/ServiceSend.java | 5 +-- 3 files changed, 39 insertions(+), 44 deletions(-) diff --git a/app/src/main/java/eu/faircode/email/Core.java b/app/src/main/java/eu/faircode/email/Core.java index 7cb2782bec..13376ddc55 100644 --- a/app/src/main/java/eu/faircode/email/Core.java +++ b/app/src/main/java/eu/faircode/email/Core.java @@ -411,25 +411,6 @@ class Core { messages.addAll(similar.values()); switch (op.name) { - case EntityOperation.SEEN: - onSeen(context, jargs, folder, message, (POP3Folder) ifolder); - break; - - case EntityOperation.FLAG: - onFlag(context, jargs, folder, message, (POP3Folder) ifolder); - break; - - case EntityOperation.ANSWERED: - case EntityOperation.KEYWORD: - case EntityOperation.ADD: - case EntityOperation.REPORT: - // Do nothing - break; - - case EntityOperation.EXISTS: - onExists(context, jargs, account, folder, message); - break; - case EntityOperation.MOVE: onMove(context, jargs, account, folder, messages, (POP3Folder) ifolder, (POP3Store) istore, state); break; @@ -1013,22 +994,6 @@ class Core { db.message().setMessageDeleted(message.id, set); } - private static void onSeen(Context context, JSONArray jargs, EntityFolder folder, EntityMessage message, POP3Folder ifolder) throws JSONException { - // Mark message (un)seen - DB db = DB.getInstance(context); - - boolean seen = jargs.getBoolean(0); - db.message().setMessageUiSeen(message.id, seen); - } - - private static void onFlag(Context context, JSONArray jargs, EntityFolder folder, EntityMessage message, POP3Folder ifolder) throws MessagingException, JSONException { - // Star/unstar message - DB db = DB.getInstance(context); - - boolean flagged = jargs.getBoolean(0); - db.message().setMessageFlagged(message.id, flagged); - } - private static void onAnswered(Context context, JSONArray jargs, EntityFolder folder, EntityMessage message, IMAPFolder ifolder) throws MessagingException, JSONException { // Mark message (un)answered DB db = DB.getInstance(context); @@ -2265,11 +2230,6 @@ class Core { EntityLog.log(context, "Operation attachment size=" + attachment.size); } - private static void onExists(Context context, JSONArray jargs, EntityAccount account, EntityFolder folder, EntityMessage message) { - // POP3 - EntityContact.received(context, account, folder, message); - } - private static void onExists(Context context, JSONArray jargs, EntityAccount account, EntityFolder folder, EntityMessage message, EntityOperation op, IMAPFolder ifolder) throws MessagingException, IOException { DB db = DB.getInstance(context); diff --git a/app/src/main/java/eu/faircode/email/EntityOperation.java b/app/src/main/java/eu/faircode/email/EntityOperation.java index 618bc0d155..e2a48b4010 100644 --- a/app/src/main/java/eu/faircode/email/EntityOperation.java +++ b/app/src/main/java/eu/faircode/email/EntityOperation.java @@ -543,6 +543,44 @@ public class EntityOperation { } } + if (account != null) { + EntityAccount a = db.account().getAccount(account); + if (a != null && a.protocol == EntityAccount.TYPE_POP) { + // TODO: special cases for MOVE, DELETE, PURGE + + if (SEEN.equals(name) || + FLAG.equals(name) || + ANSWERED.equals(name) || + KEYWORD.equals(name) || + ADD.equals(name) || + REPORT.equals(name)) { + Log.i("POP3: skipping op=" + name); + return; + } + + if (EXISTS.equals(name)) { + EntityFolder f = db.folder().getFolder(folder); + EntityMessage m = db.message().getMessage(message); + if (f != null && m != null) { + Log.i("POP3: inline EXISTS"); + EntityContact.received(context, a, f, m); + return; + } + } + + if (DELETE.equals(name)) { + EntityFolder f = db.folder().getFolder(folder); + if (f != null && + (EntityFolder.DRAFTS.equals(f.type) || + EntityFolder.TRASH.equals(f.type))) { + Log.i("POP3: inline DELETE folder=" + f.name); + db.message().deleteMessage(message); + return; + } + } + } + } + EntityOperation op = new EntityOperation(); op.account = account; op.folder = folder; diff --git a/app/src/main/java/eu/faircode/email/ServiceSend.java b/app/src/main/java/eu/faircode/email/ServiceSend.java index 7d05f69fcf..3551ec7d84 100644 --- a/app/src/main/java/eu/faircode/email/ServiceSend.java +++ b/app/src/main/java/eu/faircode/email/ServiceSend.java @@ -858,10 +858,7 @@ public class ServiceSend extends ServiceBase implements SharedPreferences.OnShar // Message could have been deleted EntityMessage orphan = db.message().getMessage(sid); if (orphan != null) - if (account == null || account.protocol == EntityAccount.TYPE_IMAP) - EntityOperation.queue(this, orphan, EntityOperation.EXISTS); - else if (sent != null) - EntityContact.received(this, account, sent, message); + EntityOperation.queue(this, orphan, EntityOperation.EXISTS); db.setTransactionSuccessful(); } finally {