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

Reply via email to