diff --git a/app/src/main/java/eu/faircode/email/Core.java b/app/src/main/java/eu/faircode/email/Core.java index 741a279c40..b42250f081 100644 --- a/app/src/main/java/eu/faircode/email/Core.java +++ b/app/src/main/java/eu/faircode/email/Core.java @@ -441,6 +441,10 @@ class Core { onRaw(context, jargs, folder, message, (POP3Store) istore, (POP3Folder) ifolder); break; + case EntityOperation.BODY: + onBody(context, jargs, folder, message, (POP3Folder) ifolder, (POP3Store) istore); + break; + case EntityOperation.ATTACHMENT: onAttachment(context, jargs, folder, message, (POP3Folder) ifolder, (POP3Store) istore); break; @@ -2200,6 +2204,36 @@ class Core { EntityLog.log(context, "Operation attachment size=" + attachment.size); } + private static void onBody(Context context, JSONArray jargs, EntityFolder folder, EntityMessage message, POP3Folder ifolder, POP3Store istore) throws MessagingException, IOException { + if (!EntityFolder.INBOX.equals(folder.type)) + throw new IllegalArgumentException("Not INBOX"); + + Map map = findMessages(context, folder, Arrays.asList(message), istore, ifolder); + if (map.size() == 0) + throw new MessageRemovedException("Message not found"); + + SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); + boolean download_plain = prefs.getBoolean("download_plain", false); + + MessageHelper helper = new MessageHelper((MimeMessage) map.entrySet().iterator().next().getValue(), context); + MessageHelper.MessageParts parts = helper.getMessageParts(); + + String body = parts.getHtml(context, download_plain); + File file = message.getFile(context); + Helper.writeText(file, body); + String text = HtmlHelper.getFullText(body); + message.preview = HtmlHelper.getPreview(text); + message.language = HtmlHelper.getLanguage(context, message.subject, text); + + DB db = DB.getInstance(context); + db.message().setMessageContent(message.id, + true, + message.language, + parts.isPlainOnly(download_plain), + message.preview, + parts.getWarnings(message.warning)); + } + private static void onAttachment(Context context, JSONArray jargs, EntityFolder folder, EntityMessage message, POP3Folder ifolder, POP3Store istore) throws JSONException, MessagingException, IOException { long id = jargs.getLong(0); diff --git a/app/src/main/java/eu/faircode/email/FragmentMessages.java b/app/src/main/java/eu/faircode/email/FragmentMessages.java index 52b080385a..fb8c42f9fe 100644 --- a/app/src/main/java/eu/faircode/email/FragmentMessages.java +++ b/app/src/main/java/eu/faircode/email/FragmentMessages.java @@ -7003,10 +7003,11 @@ public class FragmentMessages extends FragmentBase if (account.protocol != EntityAccount.TYPE_IMAP) { if (account.auto_seen) EntityOperation.queue(context, message, EntityOperation.SEEN, true); + if (!message.content) + EntityOperation.queue(context, message, EntityOperation.BODY); } else if (message.uid != null) { if (account.auto_seen) EntityOperation.queue(context, message, EntityOperation.SEEN, true); - if (!message.content) EntityOperation.queue(context, message, EntityOperation.BODY); }