Loading k9mail-library/src/main/java/com/fsck/k9/mail/internet/MessageExtractor.java +10 −4 Original line number Diff line number Diff line Loading @@ -20,11 +20,13 @@ import com.fsck.k9.mail.Message; import com.fsck.k9.mail.MessagingException; import com.fsck.k9.mail.Multipart; import com.fsck.k9.mail.Part; import com.fsck.k9.mail.internet.Viewable.Flowed; import org.apache.commons.io.input.BoundedInputStream; import static com.fsck.k9.mail.K9MailLib.LOG_TAG; import static com.fsck.k9.mail.internet.CharsetSupport.fixupCharset; import static com.fsck.k9.mail.internet.MimeUtility.getHeaderParameter; import static com.fsck.k9.mail.internet.MimeUtility.isFormatFlowed; import static com.fsck.k9.mail.internet.MimeUtility.isSameMimeType; import static com.fsck.k9.mail.internet.Viewable.Alternative; import static com.fsck.k9.mail.internet.Viewable.Html; Loading Loading @@ -188,13 +190,17 @@ public class MessageExtractor { return; } String mimeType = part.getMimeType(); Viewable viewable; if (isSameMimeType(mimeType, "text/plain")) { Text text = new Text(part); outputViewableParts.add(text); if (isFormatFlowed(part.getContentType())) { viewable = new Flowed(part); } else { Html html = new Html(part); outputViewableParts.add(html); viewable = new Text(part); } } else { viewable = new Html(part); } outputViewableParts.add(viewable); } else if (isSameMimeType(part.getMimeType(), "application/pgp-signature")) { // ignore this type explicitly } else { Loading k9mail-library/src/main/java/com/fsck/k9/mail/internet/MimeUtility.java +12 −0 Original line number Diff line number Diff line Loading @@ -25,6 +25,9 @@ import org.apache.james.mime4j.util.MimeUtil; public class MimeUtility { public static final String DEFAULT_ATTACHMENT_MIME_TYPE = "application/octet-stream"; public static final String K9_SETTINGS_MIME_TYPE = "application/x-k9settings"; private static final String TEXT_PLAIN = "text/plain"; private static final String HEADER_PARAM_FORMAT = "format"; private static final String HEADER_FORMAT_FLOWED = "flowed"; /* * http://www.w3schools.com/media/media_mimeref.asp Loading Loading @@ -1137,4 +1140,13 @@ public class MimeUtility { public static boolean isSameMimeType(String mimeType, String otherMimeType) { return mimeType != null && mimeType.equalsIgnoreCase(otherMimeType); } static boolean isFormatFlowed(String contentType) { String mimeType = getHeaderParameter(contentType, null); if (isSameMimeType(TEXT_PLAIN, mimeType)) { String formatParameter = getHeaderParameter(contentType, HEADER_PARAM_FORMAT); return HEADER_FORMAT_FLOWED.equalsIgnoreCase(formatParameter); } return false; } } k9mail-library/src/main/java/com/fsck/k9/mail/internet/Viewable.java +6 −0 Original line number Diff line number Diff line Loading @@ -41,6 +41,12 @@ public interface Viewable { } } class Flowed extends Textual { public Flowed(Part part) { super(part); } } /** * Class representing a {@code text/html} part of a message. */ Loading k9mail-library/src/test/java/com/fsck/k9/mail/internet/MimeUtilityTest.java +15 −0 Original line number Diff line number Diff line Loading @@ -133,4 +133,19 @@ public class MimeUtilityTest { public void isSameMimeType_withSecondArgumentBeingNull_shouldReturnFalse() throws Exception { assertFalse(MimeUtility.isSameMimeType("text/html", null)); } @Test public void isFormatFlowed_withTextPlainFormatFlowed__shouldReturnTrue() throws Exception { assertTrue(MimeUtility.isFormatFlowed("text/plain; format=flowed")); } @Test public void isFormatFlowed_withTextPlain__shouldReturnFalse() throws Exception { assertFalse(MimeUtility.isFormatFlowed("text/plain")); } @Test public void isFormatFlowed_withTextHtmlFormatFlowed__shouldReturnFalse() throws Exception { assertFalse(MimeUtility.isFormatFlowed("text/html; format=flowed")); } } k9mail/src/main/java/com/fsck/k9/mailstore/MessageViewInfoExtractor.java +11 −0 Original line number Diff line number Diff line Loading @@ -21,6 +21,8 @@ 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.Viewable; import com.fsck.k9.mail.internet.Viewable.Flowed; import com.fsck.k9.mailstore.util.FlowedMessageUtils; import com.fsck.k9.message.extractors.AttachmentInfoExtractor; import com.fsck.k9.ui.crypto.MessageCryptoAnnotations; import com.fsck.k9.ui.crypto.MessageCryptoSplitter; Loading Loading @@ -224,8 +226,13 @@ public class MessageViewInfoExtractor { String t = MessageExtractor.getTextFromPart(part); if (t == null) { t = ""; } else if (viewable instanceof Flowed) { t = FlowedMessageUtils.deflow(t, false); t = HtmlConverter.textToHtml(t); } else if (viewable instanceof Text) { t = HtmlConverter.textToHtml(t); } else if (!(viewable instanceof Html)) { throw new IllegalStateException("unhandled case!"); } html.append(t); } else if (viewable instanceof Alternative) { Loading Loading @@ -257,6 +264,10 @@ public class MessageViewInfoExtractor { t = ""; } else if (viewable instanceof Html) { t = HtmlConverter.htmlToText(t); } else if (viewable instanceof Flowed) { t = FlowedMessageUtils.deflow(t, false); } else if (!(viewable instanceof Text)) { throw new IllegalStateException("unhandled case!"); } text.append(t); } else if (viewable instanceof Alternative) { Loading Loading
k9mail-library/src/main/java/com/fsck/k9/mail/internet/MessageExtractor.java +10 −4 Original line number Diff line number Diff line Loading @@ -20,11 +20,13 @@ import com.fsck.k9.mail.Message; import com.fsck.k9.mail.MessagingException; import com.fsck.k9.mail.Multipart; import com.fsck.k9.mail.Part; import com.fsck.k9.mail.internet.Viewable.Flowed; import org.apache.commons.io.input.BoundedInputStream; import static com.fsck.k9.mail.K9MailLib.LOG_TAG; import static com.fsck.k9.mail.internet.CharsetSupport.fixupCharset; import static com.fsck.k9.mail.internet.MimeUtility.getHeaderParameter; import static com.fsck.k9.mail.internet.MimeUtility.isFormatFlowed; import static com.fsck.k9.mail.internet.MimeUtility.isSameMimeType; import static com.fsck.k9.mail.internet.Viewable.Alternative; import static com.fsck.k9.mail.internet.Viewable.Html; Loading Loading @@ -188,13 +190,17 @@ public class MessageExtractor { return; } String mimeType = part.getMimeType(); Viewable viewable; if (isSameMimeType(mimeType, "text/plain")) { Text text = new Text(part); outputViewableParts.add(text); if (isFormatFlowed(part.getContentType())) { viewable = new Flowed(part); } else { Html html = new Html(part); outputViewableParts.add(html); viewable = new Text(part); } } else { viewable = new Html(part); } outputViewableParts.add(viewable); } else if (isSameMimeType(part.getMimeType(), "application/pgp-signature")) { // ignore this type explicitly } else { Loading
k9mail-library/src/main/java/com/fsck/k9/mail/internet/MimeUtility.java +12 −0 Original line number Diff line number Diff line Loading @@ -25,6 +25,9 @@ import org.apache.james.mime4j.util.MimeUtil; public class MimeUtility { public static final String DEFAULT_ATTACHMENT_MIME_TYPE = "application/octet-stream"; public static final String K9_SETTINGS_MIME_TYPE = "application/x-k9settings"; private static final String TEXT_PLAIN = "text/plain"; private static final String HEADER_PARAM_FORMAT = "format"; private static final String HEADER_FORMAT_FLOWED = "flowed"; /* * http://www.w3schools.com/media/media_mimeref.asp Loading Loading @@ -1137,4 +1140,13 @@ public class MimeUtility { public static boolean isSameMimeType(String mimeType, String otherMimeType) { return mimeType != null && mimeType.equalsIgnoreCase(otherMimeType); } static boolean isFormatFlowed(String contentType) { String mimeType = getHeaderParameter(contentType, null); if (isSameMimeType(TEXT_PLAIN, mimeType)) { String formatParameter = getHeaderParameter(contentType, HEADER_PARAM_FORMAT); return HEADER_FORMAT_FLOWED.equalsIgnoreCase(formatParameter); } return false; } }
k9mail-library/src/main/java/com/fsck/k9/mail/internet/Viewable.java +6 −0 Original line number Diff line number Diff line Loading @@ -41,6 +41,12 @@ public interface Viewable { } } class Flowed extends Textual { public Flowed(Part part) { super(part); } } /** * Class representing a {@code text/html} part of a message. */ Loading
k9mail-library/src/test/java/com/fsck/k9/mail/internet/MimeUtilityTest.java +15 −0 Original line number Diff line number Diff line Loading @@ -133,4 +133,19 @@ public class MimeUtilityTest { public void isSameMimeType_withSecondArgumentBeingNull_shouldReturnFalse() throws Exception { assertFalse(MimeUtility.isSameMimeType("text/html", null)); } @Test public void isFormatFlowed_withTextPlainFormatFlowed__shouldReturnTrue() throws Exception { assertTrue(MimeUtility.isFormatFlowed("text/plain; format=flowed")); } @Test public void isFormatFlowed_withTextPlain__shouldReturnFalse() throws Exception { assertFalse(MimeUtility.isFormatFlowed("text/plain")); } @Test public void isFormatFlowed_withTextHtmlFormatFlowed__shouldReturnFalse() throws Exception { assertFalse(MimeUtility.isFormatFlowed("text/html; format=flowed")); } }
k9mail/src/main/java/com/fsck/k9/mailstore/MessageViewInfoExtractor.java +11 −0 Original line number Diff line number Diff line Loading @@ -21,6 +21,8 @@ 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.Viewable; import com.fsck.k9.mail.internet.Viewable.Flowed; import com.fsck.k9.mailstore.util.FlowedMessageUtils; import com.fsck.k9.message.extractors.AttachmentInfoExtractor; import com.fsck.k9.ui.crypto.MessageCryptoAnnotations; import com.fsck.k9.ui.crypto.MessageCryptoSplitter; Loading Loading @@ -224,8 +226,13 @@ public class MessageViewInfoExtractor { String t = MessageExtractor.getTextFromPart(part); if (t == null) { t = ""; } else if (viewable instanceof Flowed) { t = FlowedMessageUtils.deflow(t, false); t = HtmlConverter.textToHtml(t); } else if (viewable instanceof Text) { t = HtmlConverter.textToHtml(t); } else if (!(viewable instanceof Html)) { throw new IllegalStateException("unhandled case!"); } html.append(t); } else if (viewable instanceof Alternative) { Loading Loading @@ -257,6 +264,10 @@ public class MessageViewInfoExtractor { t = ""; } else if (viewable instanceof Html) { t = HtmlConverter.htmlToText(t); } else if (viewable instanceof Flowed) { t = FlowedMessageUtils.deflow(t, false); } else if (!(viewable instanceof Text)) { throw new IllegalStateException("unhandled case!"); } text.append(t); } else if (viewable instanceof Alternative) { Loading