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/04/19 04:04:32 UTC
[james-project] 41/49: JAMES-3737 Refactor slightly SearchProcessor
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 92a25f1c03bceb132d535b1808d616946e269076
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Thu Apr 7 13:33:25 2022 +0700
JAMES-3737 Refactor slightly SearchProcessor
---
.../james/imap/processor/SearchProcessor.java | 33 +++++++++++-----------
1 file changed, 16 insertions(+), 17 deletions(-)
diff --git a/protocols/imap/src/main/java/org/apache/james/imap/processor/SearchProcessor.java b/protocols/imap/src/main/java/org/apache/james/imap/processor/SearchProcessor.java
index 3a38a57d04..0e518c77dd 100644
--- a/protocols/imap/src/main/java/org/apache/james/imap/processor/SearchProcessor.java
+++ b/protocols/imap/src/main/java/org/apache/james/imap/processor/SearchProcessor.java
@@ -87,24 +87,20 @@ public class SearchProcessor extends AbstractMailboxProcessor<SearchRequest> imp
protected Mono<Void> processRequestReactive(SearchRequest request, ImapSession session, Responder responder) {
SearchOperation operation = request.getSearchOperation();
SearchKey searchKey = operation.getSearchKey();
- boolean useUids = request.isUseUids();
- List<SearchResultOption> resultOptions = operation.getResultOptions();
try {
MailboxSession msession = session.getMailboxSession();
SearchQuery query = toQuery(searchKey, session);
+ boolean useUids = request.isUseUids();
boolean omitExpunged = (!useUids);
return getSelectedMailboxReactive(session)
.switchIfEmpty(Mono.error(() -> new MailboxException("Session not in SELECTED state")))
.flatMap(Throwing.function(mailbox -> performUidSearch(mailbox, query, msession)
- .flatMap(uids -> {
- Collection<Long> results = asResults(session, useUids, uids);
- return computeHighestModSeqIfNeeded(session, responder, mailbox, msession, uids)
- .doOnNext(highestModSeq -> {
- ImapResponseMessage response = toResponse(request, session, useUids, resultOptions, uids, results, highestModSeq);
- responder.respond(response);
- });
- })
+ .flatMap(uids -> computeHighestModSeqIfNeeded(session, responder, mailbox, msession, uids)
+ .doOnNext(highestModSeq -> {
+ ImapResponseMessage response = toResponse(request, session, uids, highestModSeq);
+ responder.respond(response);
+ }))
.then(unsolicitedResponses(session, responder, omitExpunged, useUids))))
.then(Mono.fromRunnable(() -> okComplete(request, responder)))
.then()
@@ -113,7 +109,7 @@ public class SearchProcessor extends AbstractMailboxProcessor<SearchRequest> imp
LOGGER.error("Search failed in mailbox {}", session.getSelected().getMailboxId(), e);
no(request, responder, HumanReadableText.SEARCH_FAILED);
- if (resultOptions.contains(SearchResultOption.SAVE)) {
+ if (request.getSearchOperation().getResultOptions().contains(SearchResultOption.SAVE)) {
// Reset the saved sequence-set on a BAD response if the SAVE option was used.
//
// See RFC5182 2.1.Normative Description of the SEARCHRES Extension
@@ -149,17 +145,20 @@ public class SearchProcessor extends AbstractMailboxProcessor<SearchRequest> imp
}
}
- private ImapResponseMessage toResponse(SearchRequest request, ImapSession session, boolean useUids, List<SearchResultOption> resultOptions, Collection<MessageUid> uids, Collection<Long> results, Optional<ModSeq> highestModSeq) {
- final long[] ids = toArray(results);
+ private ImapResponseMessage toResponse(SearchRequest request, ImapSession session, Collection<MessageUid> uids, Optional<ModSeq> highestModSeq) {
+ Collection<Long> results = asResults(session, request.isUseUids(), uids);
+ long[] ids = toArray(results);
+ List<SearchResultOption> resultOptions = request.getSearchOperation().getResultOptions();
if (resultOptions == null || resultOptions.isEmpty()) {
return new SearchResponse(ids, highestModSeq.orElse(null));
} else {
- return handleResultOptions(request, session, useUids, resultOptions, uids, highestModSeq.orElse(null), ids);
+ return handleResultOptions(request, session, uids, highestModSeq.orElse(null), ids);
}
}
- private ImapResponseMessage handleResultOptions(SearchRequest request, ImapSession session, boolean useUids, List<SearchResultOption> resultOptions, Collection<MessageUid> uids, ModSeq highestModSeq, long[] ids) {
+ private ImapResponseMessage handleResultOptions(SearchRequest request, ImapSession session, Collection<MessageUid> uids, ModSeq highestModSeq, long[] ids) {
+ List<SearchResultOption> resultOptions = request.getSearchOperation().getResultOptions();
List<Long> idList = new ArrayList<>(ids.length);
for (long id : ids) {
idList.add(id);
@@ -214,7 +213,7 @@ public class SearchProcessor extends AbstractMailboxProcessor<SearchRequest> imp
SearchResUtil.saveSequenceSet(session, savedRanges.toArray(IdRange[]::new));
}
}
- return new ESearchResponse(min, max, count, idRanges, uidRanges, highestModSeq, request.getTag(), useUids, resultOptions);
+ return new ESearchResponse(min, max, count, idRanges, uidRanges, highestModSeq, request.getTag(), request.isUseUids(), resultOptions);
} else {
// Just save the returned sequence-set as this is not SEARCHRES + ESEARCH
SearchResUtil.saveSequenceSet(session, idRanges);
@@ -264,7 +263,7 @@ public class SearchProcessor extends AbstractMailboxProcessor<SearchRequest> imp
}
return b;
}).map(Optional::of)
- .switchIfEmpty(Mono.fromCallable(() -> Optional.empty()));
+ .switchIfEmpty(Mono.fromCallable(Optional::empty));
}
private SearchQuery toQuery(SearchKey key, ImapSession session) throws MessageRangeException {
---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@james.apache.org
For additional commands, e-mail: notifications-help@james.apache.org