JAMES-1985 Allow JMAP text display of messages with only inlined text without CID
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/d118b167 Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/d118b167 Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/d118b167 Branch: refs/heads/master Commit: d118b167ab5bbd56fa7d447223401d42f5b12acc Parents: e202cfc Author: benwa <btell...@linagora.com> Authored: Tue Apr 4 10:18:00 2017 +0700 Committer: benwa <btell...@linagora.com> Committed: Wed Apr 5 08:51:22 2017 +0700 ---------------------------------------------------------------------- .../jmap/model/MessageContentExtractor.java | 11 +++++++--- .../jmap/model/MessageContentExtractorTest.java | 22 ++++++++++++++++++++ 2 files changed, 30 insertions(+), 3 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/james-project/blob/d118b167/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/MessageContentExtractor.java ---------------------------------------------------------------------- diff --git a/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/MessageContentExtractor.java b/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/MessageContentExtractor.java index 08e9dc4..306f8c3 100644 --- a/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/MessageContentExtractor.java +++ b/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/MessageContentExtractor.java @@ -107,12 +107,17 @@ public class MessageContentExtractor { } private MessageContent retrieveFirstReadablePart(Multipart multipart) throws IOException { + return retrieveFirstReadablePartMatching(multipart, this::isNotAttachment) + .orElseGet(() -> retrieveFirstReadablePartMatching(multipart, this::isInlinedWithoutCid) + .orElse(MessageContent.empty())); + } + + private Optional<MessageContent> retrieveFirstReadablePartMatching(Multipart multipart, Predicate<Entity> predicate) { return multipart.getBodyParts() .stream() - .filter(this::isNotAttachment) + .filter(predicate) .flatMap(Throwing.function(this::extractContentIfReadable).sneakyThrow()) - .findFirst() - .orElse(MessageContent.empty()); + .findFirst(); } private Stream<MessageContent> extractContentIfReadable(Entity entity) throws IOException { http://git-wip-us.apache.org/repos/asf/james-project/blob/d118b167/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/MessageContentExtractorTest.java ---------------------------------------------------------------------- diff --git a/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/MessageContentExtractorTest.java b/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/MessageContentExtractorTest.java index 0182e63..f40b94f 100644 --- a/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/MessageContentExtractorTest.java +++ b/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/MessageContentExtractorTest.java @@ -180,6 +180,28 @@ public class MessageContentExtractorTest { } @Test + public void extractShouldReturnInlinedTextBodyWithoutCIDWhenNoOtherValidParts() throws IOException { + String textBody = "body 1"; + Multipart multipart = MultipartBuilder.create("report") + .addBodyPart(BodyPartBuilder.create() + .setBody(textBody, "plain", Charsets.UTF_8) + .setContentDisposition("inline") + .build()) + .addBodyPart(BodyPartBuilder.create() + .setBody("body 2", "rfc822-headers", Charsets.UTF_8) + .setContentDisposition("inline") + .build()) + .build(); + Message message = MessageBuilder.create() + .setBody(multipart) + .build(); + + MessageContent actual = testee.extract(message); + + assertThat(actual.getTextBody()).contains(textBody); + } + + @Test public void extractShouldReturnEmptyWhenMultipartMixedAndFirstPartIsATextAttachment() throws IOException { Multipart multipart = MultipartBuilder.create("mixed") .addBodyPart(textAttachment) --------------------------------------------------------------------- To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org