From 5a65928e5f5be76a28f03b6495ca9a11a2a2b5a2 Mon Sep 17 00:00:00 2001 From: M66B Date: Wed, 18 Sep 2019 18:30:12 +0200 Subject: [PATCH] Replaced deleted operation by fetch with deleted check --- FAQ.md | 3 +- app/src/main/java/eu/faircode/email/Core.java | 71 +++++++------------ .../eu/faircode/email/ServiceSynchronize.java | 2 +- 3 files changed, 29 insertions(+), 47 deletions(-) diff --git a/FAQ.md b/FAQ.md index 1481eea646..d1d28770a6 100644 --- a/FAQ.md +++ b/FAQ.md @@ -313,9 +313,8 @@ The low priority status bar notification shows the number of pending operations, * *add*: add message to remote folder * *move*: move message to another remote folder * *copy*: copy message to another remote folder -* *fetch*: fetched pushed message +* *fetch*: fetch (pushed) message * *delete*: delete message from remote folder -* *deleted*: delete message from local folder * *seen*: mark message as read/unread in remote folder * *answered*: mark message as answered in remote folder * *flag*: add/remove star in remote folder diff --git a/app/src/main/java/eu/faircode/email/Core.java b/app/src/main/java/eu/faircode/email/Core.java index e8d1145c88..63502e12d7 100644 --- a/app/src/main/java/eu/faircode/email/Core.java +++ b/app/src/main/java/eu/faircode/email/Core.java @@ -165,7 +165,6 @@ class Core { if (message == null) { if (!EntityOperation.FETCH.equals(op.name) && - !EntityOperation.DELETED.equals(op.name) && !EntityOperation.SYNC.equals(op.name) && !EntityOperation.SUBSCRIBE.equals(op.name)) throw new MessageRemovedException(); @@ -242,10 +241,6 @@ class Core { onDelete(context, jargs, folder, message, (IMAPFolder) ifolder); break; - case EntityOperation.DELETED: - onDeleted(context, jargs, folder, (IMAPFolder) ifolder); - break; - case EntityOperation.HEADERS: onHeaders(context, jargs, folder, message, (IMAPFolder) ifolder); break; @@ -358,8 +353,6 @@ class Core { return; if (EntityOperation.DELETE.equals(op.name) && !TextUtils.isEmpty(message.msgid)) return; - if (EntityOperation.DELETED.equals(op.name)) - return; Log.i(folder.name + " ensure uid op=" + op.name + " msgid=" + message.msgid); @@ -700,34 +693,36 @@ class Core { long uid = jargs.getLong(0); DB db = DB.getInstance(context); - try { - EntityAccount account = db.account().getAccount(folder.account); - boolean download = db.folder().getFolderDownload(folder.id); - List rules = db.rule().getEnabledRules(folder.id); + EntityAccount account = db.account().getAccount(folder.account); + boolean download = db.folder().getFolderDownload(folder.id); + List rules = db.rule().getEnabledRules(folder.id); + try { IMAPMessage imessage = (IMAPMessage) ifolder.getMessageByUID(uid); - if (imessage == null || imessage.isExpunged()) - return; - - FetchProfile fp = new FetchProfile(); - fp.add(FetchProfile.Item.ENVELOPE); - fp.add(FetchProfile.Item.FLAGS); - fp.add(FetchProfile.Item.CONTENT_INFO); // body structure - //fp.add(UIDFolder.FetchProfileItem.UID); - fp.add(IMAPFolder.FetchProfileItem.HEADERS); - //fp.add(IMAPFolder.FetchProfileItem.MESSAGE); - fp.add(FetchProfile.Item.SIZE); - fp.add(IMAPFolder.FetchProfileItem.INTERNALDATE); - ifolder.fetch(new Message[]{imessage}, fp); - - if (imessage.isSet(Flags.Flag.DELETED)) - return; - - EntityMessage message = synchronizeMessage(context, account, folder, ifolder, imessage, false, download, rules, state); - if (download) - downloadMessage(context, folder, ifolder, imessage, message.id, state); + if (imessage == null) + throw new MessageRemovedException(); - imessage.invalidateHeaders(); + try { + FetchProfile fp = new FetchProfile(); + fp.add(FetchProfile.Item.ENVELOPE); + fp.add(FetchProfile.Item.FLAGS); + fp.add(FetchProfile.Item.CONTENT_INFO); // body structure + //fp.add(UIDFolder.FetchProfileItem.UID); + fp.add(IMAPFolder.FetchProfileItem.HEADERS); + //fp.add(IMAPFolder.FetchProfileItem.MESSAGE); + fp.add(FetchProfile.Item.SIZE); + fp.add(IMAPFolder.FetchProfileItem.INTERNALDATE); + ifolder.fetch(new Message[]{imessage}, fp); + + EntityMessage message = synchronizeMessage(context, account, folder, ifolder, imessage, false, download, rules, state); + if (download) + downloadMessage(context, folder, ifolder, imessage, message.id, state); + } finally { + imessage.invalidateHeaders(); + } + } catch (MessageRemovedException ex) { + Log.i(ex); + db.message().deleteMessage(folder.id, uid); } finally { int count = ifolder.getMessageCount(); db.folder().setFolderTotal(folder.id, count < 0 ? null : count); @@ -779,18 +774,6 @@ class Core { } } - private static void onDeleted(Context context, JSONArray jargs, EntityFolder folder, IMAPFolder ifolder) throws JSONException, MessagingException, IOException { - long uid = jargs.getLong(0); - - DB db = DB.getInstance(context); - try { - db.message().deleteMessage(folder.id, uid); - } finally { - int count = ifolder.getMessageCount(); - db.folder().setFolderTotal(folder.id, count < 0 ? null : count); - } - } - private static void onHeaders(Context context, JSONArray jargs, EntityFolder folder, EntityMessage message, IMAPFolder ifolder) throws MessagingException { // Download headers DB db = DB.getInstance(context); diff --git a/app/src/main/java/eu/faircode/email/ServiceSynchronize.java b/app/src/main/java/eu/faircode/email/ServiceSynchronize.java index 2082fe7756..dcf86384d5 100644 --- a/app/src/main/java/eu/faircode/email/ServiceSynchronize.java +++ b/app/src/main/java/eu/faircode/email/ServiceSynchronize.java @@ -888,7 +888,7 @@ public class ServiceSynchronize extends ServiceBase { for (Message imessage : e.getMessages()) { long uid = ifolder.getUID(imessage); - EntityOperation.queue(ServiceSynchronize.this, folder, EntityOperation.DELETED, uid); + EntityOperation.queue(ServiceSynchronize.this, folder, EntityOperation.FETCH, uid); } } catch (Throwable ex) { Log.e(folder.name, ex);