You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@james.apache.org by bt...@apache.org on 2022/05/04 01:11:05 UTC

[james-project] 10/12: [PERF] PopulateEmailQueryViewListener only needs to parse headers

This is an automated email from the ASF dual-hosted git repository.

btellier pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git

commit 0e66ff0c536cb05119555ed3c6e967490ea1dc97
Author: Benoit TELLIER <bt...@linagora.com>
AuthorDate: Thu Apr 28 11:06:52 2022 +0700

    [PERF] PopulateEmailQueryViewListener only needs to parse headers
---
 .../jmap/event/PopulateEmailQueryViewListener.java     | 18 ++++++++++++++----
 1 file changed, 14 insertions(+), 4 deletions(-)

diff --git a/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/event/PopulateEmailQueryViewListener.java b/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/event/PopulateEmailQueryViewListener.java
index 47a033aad2..9df59c69f4 100644
--- a/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/event/PopulateEmailQueryViewListener.java
+++ b/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/event/PopulateEmailQueryViewListener.java
@@ -25,6 +25,7 @@ import static org.apache.james.util.ReactorUtils.publishIfPresent;
 import java.io.IOException;
 import java.time.ZoneOffset;
 import java.time.ZonedDateTime;
+import java.util.Date;
 import java.util.Optional;
 
 import javax.inject.Inject;
@@ -47,7 +48,10 @@ import org.apache.james.mailbox.model.MessageId;
 import org.apache.james.mailbox.model.MessageMetaData;
 import org.apache.james.mailbox.model.MessageResult;
 import org.apache.james.mailbox.model.UpdatedFlags;
-import org.apache.james.mime4j.dom.Message;
+import org.apache.james.mime4j.codec.DecodeMonitor;
+import org.apache.james.mime4j.dom.Header;
+import org.apache.james.mime4j.dom.field.DateTimeField;
+import org.apache.james.mime4j.field.DateTimeFieldLenientImpl;
 import org.apache.james.mime4j.message.DefaultMessageBuilder;
 import org.apache.james.mime4j.stream.MimeConfig;
 import org.reactivestreams.Publisher;
@@ -163,15 +167,21 @@ public class PopulateEmailQueryViewListener implements ReactiveGroupEventListene
         ZonedDateTime receivedAt = ZonedDateTime.ofInstant(messageResult.getInternalDate().toInstant(), ZoneOffset.UTC);
 
         return Mono.fromCallable(() -> parseMessage(messageResult))
-            .map(message -> Optional.ofNullable(message.getDate()).orElse(messageResult.getInternalDate()))
+            .map(header -> date(header).orElse(messageResult.getInternalDate()))
             .map(date -> ZonedDateTime.ofInstant(date.toInstant(), ZoneOffset.UTC))
             .flatMap(sentAt -> view.save(mailboxId, sentAt, receivedAt, messageResult.getMessageId()))
             .then();
     }
 
-    private Message parseMessage(MessageResult messageResult) throws IOException, MailboxException {
+    private Header parseMessage(MessageResult messageResult) throws IOException, MailboxException {
         DefaultMessageBuilder defaultMessageBuilder = new DefaultMessageBuilder();
         defaultMessageBuilder.setMimeEntityConfig(MimeConfig.PERMISSIVE);
-        return defaultMessageBuilder.parseMessage(messageResult.getFullContent().getInputStream());
+        return defaultMessageBuilder.parseHeader(messageResult.getFullContent().getInputStream());
+    }
+
+    private Optional<Date> date(Header header) {
+        return Optional.ofNullable(header.getField("Date"))
+            .map(field -> DateTimeFieldLenientImpl.PARSER.parse(field, DecodeMonitor.SILENT))
+            .map(DateTimeField::getDate);
     }
 }


---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@james.apache.org
For additional commands, e-mail: notifications-help@james.apache.org