From cced35b3b890770129d2ecbc6f173d1c3ee797aa Mon Sep 17 00:00:00 2001 From: Vincent Breitmoser Date: Wed, 28 Jan 2015 14:35:18 +0100 Subject: [PATCH] parse MessageViewContainers from Parts (from dummy mime structure) --- .../mailstore/LocalMessageExtractorTest.java | 15 +++++-- .../k9/mailstore/LocalMessageExtractor.java | 39 +++++++++++++++---- .../fsck/k9/mailstore/MessageViewInfo.java | 8 +++- 3 files changed, 50 insertions(+), 12 deletions(-) diff --git a/k9mail/src/androidTest/java/com/fsck/k9/mailstore/LocalMessageExtractorTest.java b/k9mail/src/androidTest/java/com/fsck/k9/mailstore/LocalMessageExtractorTest.java index 6086118af..ba2c0471d 100644 --- a/k9mail/src/androidTest/java/com/fsck/k9/mailstore/LocalMessageExtractorTest.java +++ b/k9mail/src/androidTest/java/com/fsck/k9/mailstore/LocalMessageExtractorTest.java @@ -1,5 +1,6 @@ package com.fsck.k9.mailstore; +import java.util.ArrayList; import java.util.Date; import java.util.Locale; import java.util.TimeZone; @@ -11,6 +12,8 @@ import com.fsck.k9.activity.K9ActivityCommon; import com.fsck.k9.mail.Address; import com.fsck.k9.mail.Message.RecipientType; import com.fsck.k9.mail.MessagingException; +import com.fsck.k9.mail.Part; +import com.fsck.k9.mail.internet.MessageExtractor; import com.fsck.k9.mail.internet.MimeBodyPart; import com.fsck.k9.mail.internet.MimeMessage; import com.fsck.k9.mail.internet.MimeMessageHelper; @@ -38,7 +41,8 @@ public class LocalMessageExtractorTest { MimeMessageHelper.setBody(message, body); // Extract text - ViewableContainer container = extractTextAndAttachments(InstrumentationRegistry.getTargetContext(), message); + ViewableContainer container = extractTextAndAttachments(InstrumentationRegistry.getTargetContext(), + MessageExtractor.getViewables(message, attachments), new ArrayList()); String expectedText = bodyText; String expectedHtml = @@ -63,7 +67,8 @@ public class LocalMessageExtractorTest { MimeMessageHelper.setBody(message, body); // Extract text - ViewableContainer container = extractTextAndAttachments(InstrumentationRegistry.getTargetContext(), message); + ViewableContainer container = extractTextAndAttachments(InstrumentationRegistry.getTargetContext(), + MessageExtractor.getViewables(message, attachments), new ArrayList()); String expectedText = "K-9 Mail rocks :>"; String expectedHtml = @@ -94,7 +99,8 @@ public class LocalMessageExtractorTest { MimeMessageHelper.setBody(message, multipart); // Extract text - ViewableContainer container = extractTextAndAttachments(InstrumentationRegistry.getTargetContext(), message); + ViewableContainer container = extractTextAndAttachments(InstrumentationRegistry.getTargetContext(), + MessageExtractor.getViewables(message, attachments), new ArrayList()); String expectedText = bodyText1 + "\r\n\r\n" + @@ -151,7 +157,8 @@ public class LocalMessageExtractorTest { MimeMessageHelper.setBody(message, multipart); // Extract text - ViewableContainer container = extractTextAndAttachments(InstrumentationRegistry.getTargetContext(), message); + ViewableContainer container = extractTextAndAttachments(InstrumentationRegistry.getTargetContext(), + MessageExtractor.getViewables(message, attachments), new ArrayList()); String expectedText = bodyText + diff --git a/k9mail/src/main/java/com/fsck/k9/mailstore/LocalMessageExtractor.java b/k9mail/src/main/java/com/fsck/k9/mailstore/LocalMessageExtractor.java index 137435394..5c2eeeb39 100644 --- a/k9mail/src/main/java/com/fsck/k9/mailstore/LocalMessageExtractor.java +++ b/k9mail/src/main/java/com/fsck/k9/mailstore/LocalMessageExtractor.java @@ -13,7 +13,9 @@ import com.fsck.k9.mail.internet.MessageExtractor; import com.fsck.k9.mail.internet.MimeHeader; import com.fsck.k9.mail.internet.MimeUtility; import com.fsck.k9.mail.internet.Viewable; +import com.fsck.k9.mailstore.MessageViewInfo.MessageViewContainer; import com.fsck.k9.provider.AttachmentProvider; +import org.openintents.openpgp.OpenPgpSignatureResult; import java.util.ArrayList; import java.util.Date; @@ -40,18 +42,19 @@ public class LocalMessageExtractor { * Extract the viewable textual parts of a message and return the rest as attachments. * * @param context A {@link android.content.Context} instance that will be used to get localized strings. + * @param viewables + * @param attachments * @return A {@link ViewableContainer} instance containing the textual parts of the message as * plain text and HTML, and a list of message parts considered attachments. * * @throws com.fsck.k9.mail.MessagingException * In case of an error. */ - public static ViewableContainer extractTextAndAttachments(Context context, Message message) throws MessagingException { + public static ViewableContainer extractTextAndAttachments(Context context, List viewables, + List attachments) throws MessagingException { try { - List attachments = new ArrayList(); // Collect all viewable parts - List viewables = MessageExtractor.getViewables(message, attachments); /* * Convert the tree of viewable parts into text and HTML @@ -412,10 +415,32 @@ public class LocalMessageExtractor { } public static MessageViewInfo decodeMessageForView(Context context, Message message) throws MessagingException { - //TODO: Modify extractTextAndAttachments() to only extract the text type (plain vs. HTML) we currently need. - ViewableContainer viewable = LocalMessageExtractor.extractTextAndAttachments(context, message); - List attachments = extractAttachmentInfos(viewable.attachments); - return new MessageViewInfo(viewable.html, attachments, message); + + // 1. break mime structure on encryption/signature boundaries + ArrayList parts = new ArrayList(); + // TODO: actually break it down + parts.add(message); +// parts.add(message); + + // 2. extract viewables/attachments of parts + ArrayList containers = new ArrayList(); + for (Part part : parts) { + ArrayList attachments = new ArrayList(); + List viewables = MessageExtractor.getViewables(part, attachments); + + // 3. parse viewables into html string + ViewableContainer viewable = LocalMessageExtractor.extractTextAndAttachments(context, viewables, + attachments); + List attachmentInfos = extractAttachmentInfos(attachments); + + // TODO correctly extract OpenPgpSignatureResult and add to MessageViewContainer + OpenPgpSignatureResult result = null; +// result = new OpenPgpSignatureResult(OpenPgpSignatureResult.SIGNATURE_SUCCESS_CERTIFIED, "lul", false, 0x123); + containers.add(new MessageViewContainer(viewable.html, attachmentInfos, result, true, null)); + + } + + return new MessageViewInfo(containers, message); } private static List extractAttachmentInfos(List attachmentParts) diff --git a/k9mail/src/main/java/com/fsck/k9/mailstore/MessageViewInfo.java b/k9mail/src/main/java/com/fsck/k9/mailstore/MessageViewInfo.java index 05a1b3d77..39509fd0e 100644 --- a/k9mail/src/main/java/com/fsck/k9/mailstore/MessageViewInfo.java +++ b/k9mail/src/main/java/com/fsck/k9/mailstore/MessageViewInfo.java @@ -13,14 +13,20 @@ import org.openintents.openpgp.OpenPgpSignatureResult; public class MessageViewInfo { public final Message message; - public final List containers = new ArrayList(); + public final List containers; @Deprecated public MessageViewInfo(String text, List attachments, Message message) { + containers = new ArrayList(); containers.add(new MessageViewContainer(text, attachments)); this.message = message; } + public MessageViewInfo(List containers, Message message) { + this.containers = containers; + this.message = message; + } + public static class MessageViewContainer { final public String text;