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 6c3c65c7398f3ec0ff558fbfcdcfd1cf1e84a6e8 Author: Benoit TELLIER <[email protected]> AuthorDate: Mon Dec 1 15:54:32 2025 +0100 JAMES-3340 Drop irrelevant sort by sentAt, limit on received --- .../projections/CassandraEmailQueryView.java | 26 ------- .../projections/PostgresEmailQueryView.java | 5 -- .../projections/PostgresEmailQueryViewDAO.java | 11 --- .../james/jmap/api/projections/EmailQueryView.java | 23 ------ .../memory/projections/MemoryEmailQueryView.java | 13 ---- .../api/projections/EmailQueryViewContract.java | 81 ---------------------- .../DistributedEmailQueryMethodNoViewTest.java | 6 -- .../contract/EmailQueryMethodContract.scala | 73 ------------------- .../memory/MemoryEmailQueryMethodNoViewTest.java | 6 -- .../james/jmap/method/EmailQueryMethod.scala | 18 ----- 10 files changed, 262 deletions(-) diff --git a/server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/projections/CassandraEmailQueryView.java b/server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/projections/CassandraEmailQueryView.java index 5673f459cf..68d6dcfdf7 100644 --- a/server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/projections/CassandraEmailQueryView.java +++ b/server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/projections/CassandraEmailQueryView.java @@ -35,7 +35,6 @@ import static org.apache.james.jmap.cassandra.projections.table.CassandraEmailQu import java.time.Instant; import java.time.ZonedDateTime; -import java.util.Comparator; import java.util.UUID; import java.util.function.Function; @@ -59,7 +58,6 @@ import com.datastax.oss.driver.api.core.cql.PreparedStatement; import com.datastax.oss.driver.api.core.cql.Row; import com.datastax.oss.driver.api.core.type.codec.TypeCodecs; import com.datastax.oss.driver.api.querybuilder.QueryBuilder; -import com.google.common.base.Preconditions; import reactor.core.publisher.Flux; import reactor.core.publisher.Mono; @@ -206,30 +204,6 @@ public class CassandraEmailQueryView implements EmailQueryView { .map(asEmailEntry(RECEIVED_AT))); } - @Override - public Flux<MessageId> listMailboxContentSinceAfterSortedBySentAt(MailboxId mailboxId, ZonedDateTime since, Limit limit, boolean collapseThreads) { - Preconditions.checkArgument(!limit.isUnlimited(), "Limit should be defined"); - - CassandraId cassandraId = (CassandraId) mailboxId; - - Flux<EmailEntry> baseEntries = executor.executeRows(listMailboxContentSinceReceivedAt.bind() - .set(MAILBOX_ID, cassandraId.asUuid(), TypeCodecs.UUID) - .setInstant(RECEIVED_AT, since.toInstant())) - .map(asEmailEntry(SENT_AT)); - - if (collapseThreads) { - return baseEntries.groupBy(EmailEntry::threadId) - .flatMap(group -> group.reduce((e1, e2) -> - e1.messageDate().isAfter(e2.messageDate()) ? e1 : e2)) - .sort(Comparator.comparing(EmailEntry::messageDate).reversed()) - .map(EmailEntry::messageId) - .take(limit.getLimit().get()); - } - return baseEntries.sort(Comparator.comparing(EmailEntry::messageDate).reversed()) - .map(EmailEntry::messageId) - .take(limit.getLimit().get()); - } - @Override public Flux<MessageId> listMailboxContentSinceAfterSortedByReceivedAt(MailboxId mailboxId, ZonedDateTime since, Limit limit, boolean collapseThreads) { CassandraId cassandraId = (CassandraId) mailboxId; diff --git a/server/data/data-jmap-postgres/src/main/java/org/apache/james/jmap/postgres/projections/PostgresEmailQueryView.java b/server/data/data-jmap-postgres/src/main/java/org/apache/james/jmap/postgres/projections/PostgresEmailQueryView.java index 5398ef41c5..503b2418f8 100644 --- a/server/data/data-jmap-postgres/src/main/java/org/apache/james/jmap/postgres/projections/PostgresEmailQueryView.java +++ b/server/data/data-jmap-postgres/src/main/java/org/apache/james/jmap/postgres/projections/PostgresEmailQueryView.java @@ -52,11 +52,6 @@ public class PostgresEmailQueryView implements EmailQueryView { return emailQueryViewDAO.listMailboxContentSortedByReceivedAt(PostgresMailboxId.class.cast(mailboxId), limit, collapseThreads); } - @Override - public Flux<MessageId> listMailboxContentSinceAfterSortedBySentAt(MailboxId mailboxId, ZonedDateTime since, Limit limit, boolean collapseThreads) { - return emailQueryViewDAO.listMailboxContentSinceAfterSortedBySentAt(PostgresMailboxId.class.cast(mailboxId), since, limit, collapseThreads); - } - @Override public Flux<MessageId> listMailboxContentSinceAfterSortedByReceivedAt(MailboxId mailboxId, ZonedDateTime since, Limit limit, boolean collapseThreads) { return emailQueryViewDAO.listMailboxContentSinceAfterSortedByReceivedAt(PostgresMailboxId.class.cast(mailboxId), since, limit, collapseThreads); diff --git a/server/data/data-jmap-postgres/src/main/java/org/apache/james/jmap/postgres/projections/PostgresEmailQueryViewDAO.java b/server/data/data-jmap-postgres/src/main/java/org/apache/james/jmap/postgres/projections/PostgresEmailQueryViewDAO.java index 4074f8a6a9..6e05589ba7 100644 --- a/server/data/data-jmap-postgres/src/main/java/org/apache/james/jmap/postgres/projections/PostgresEmailQueryViewDAO.java +++ b/server/data/data-jmap-postgres/src/main/java/org/apache/james/jmap/postgres/projections/PostgresEmailQueryViewDAO.java @@ -78,17 +78,6 @@ public class PostgresEmailQueryViewDAO { .map(asEmailEntry(RECEIVED_AT))); } - public Flux<MessageId> listMailboxContentSinceAfterSortedBySentAt(PostgresMailboxId mailboxId, ZonedDateTime since, Limit limit, boolean collapseThreads) { - return EmailQueryViewUtils.QueryViewExtender.of(limit, collapseThreads) - .resolve(backendFetchLimit -> postgresExecutor.executeRows(dslContext -> Flux.from(dslContext.select(MESSAGE_ID, SENT_AT, THREAD_ID) - .from(TABLE_NAME) - .where(MAILBOX_ID.eq(mailboxId.asUuid())) - .and(RECEIVED_AT.greaterOrEqual(since.toOffsetDateTime())) - .orderBy(SENT_AT.desc()) - .limit(backendFetchLimit.getLimit().get()))) - .map(asEmailEntry(SENT_AT))); - } - public Flux<MessageId> listMailboxContentSinceAfterSortedByReceivedAt(PostgresMailboxId mailboxId, ZonedDateTime since, Limit limit, boolean collapseThreads) { return EmailQueryViewUtils.QueryViewExtender.of(limit, collapseThreads) .resolve(backendFetchLimit -> postgresExecutor.executeRows(dslContext -> Flux.from(dslContext.select(MESSAGE_ID, RECEIVED_AT, THREAD_ID) diff --git a/server/data/data-jmap/src/main/java/org/apache/james/jmap/api/projections/EmailQueryView.java b/server/data/data-jmap/src/main/java/org/apache/james/jmap/api/projections/EmailQueryView.java index 57112768ed..a561b25ed3 100644 --- a/server/data/data-jmap/src/main/java/org/apache/james/jmap/api/projections/EmailQueryView.java +++ b/server/data/data-jmap/src/main/java/org/apache/james/jmap/api/projections/EmailQueryView.java @@ -136,29 +136,6 @@ public interface EmailQueryView { */ Flux<MessageId> listMailboxContentSortedByReceivedAt(MailboxId mailboxId, Limit limit, boolean collapseThreads); - /** - * Sample JMAP requests: - * - * - RFC-8621: - * - * ["Email/query", - * { - * "accountId": "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6", - * "filter: { - * "inMailbox":"abcd", - * "after":"aDate" - * } - * "sort": [{ - * "property":"sentAt", - * "isAscending": false - * }] - * }, - * "c1"] - * - * @return messageIds of the messages in this mailbox, since being "after". Sorted by sentAt. - */ - Flux<MessageId> listMailboxContentSinceAfterSortedBySentAt(MailboxId mailboxId, ZonedDateTime since, Limit limit, boolean collapseThreads); - /** * Sample JMAP requests: * diff --git a/server/data/data-jmap/src/main/java/org/apache/james/jmap/memory/projections/MemoryEmailQueryView.java b/server/data/data-jmap/src/main/java/org/apache/james/jmap/memory/projections/MemoryEmailQueryView.java index 71d3cb6e1c..88cfdbd002 100644 --- a/server/data/data-jmap/src/main/java/org/apache/james/jmap/memory/projections/MemoryEmailQueryView.java +++ b/server/data/data-jmap/src/main/java/org/apache/james/jmap/memory/projections/MemoryEmailQueryView.java @@ -72,19 +72,6 @@ public class MemoryEmailQueryView implements EmailQueryView { .take(limit.getLimit().get()); } - @Override - public Flux<MessageId> listMailboxContentSinceAfterSortedBySentAt(MailboxId mailboxId, ZonedDateTime since, Limit limit, boolean collapseThreads) { - Preconditions.checkArgument(!limit.isUnlimited(), "Limit should be defined"); - - Flux<Entry> baseEntries = Flux.fromIterable(entries.row(mailboxId).values()) - .filter(e -> e.getReceivedAt().isAfter(since) || e.getReceivedAt().isEqual(since)); - - return maybeCollapseThreads(Entry::getSentAt, collapseThreads).apply(baseEntries) - .sort(Comparator.comparing(Entry::getSentAt).reversed()) - .map(Entry::getMessageId) - .take(limit.getLimit().get()); - } - @Override public Flux<MessageId> listMailboxContentSortedByReceivedAt(MailboxId mailboxId, Limit limit, boolean collapseThreads) { Flux<Entry> baseEntries = Flux.fromIterable(entries.row(mailboxId).values()); diff --git a/server/data/data-jmap/src/test/java/org/apache/james/jmap/api/projections/EmailQueryViewContract.java b/server/data/data-jmap/src/test/java/org/apache/james/jmap/api/projections/EmailQueryViewContract.java index e24e534d95..ab62b44170 100644 --- a/server/data/data-jmap/src/test/java/org/apache/james/jmap/api/projections/EmailQueryViewContract.java +++ b/server/data/data-jmap/src/test/java/org/apache/james/jmap/api/projections/EmailQueryViewContract.java @@ -85,36 +85,6 @@ public interface EmailQueryViewContract { .containsExactly(messageId2(), messageId3()); } - @Test - default void listMailboxContentSinceReceivedAtShouldExcludeTooOldItems() { - testee().save(mailboxId1(), DATE_1, DATE_2, messageId1(), threadId1()).block(); - testee().save(mailboxId1(), DATE_3, DATE_4, messageId2(), threadId1()).block(); - testee().save(mailboxId1(), DATE_5, DATE_6, messageId3(), threadId1()).block(); - - assertThat(testee().listMailboxContentSinceAfterSortedBySentAt(mailboxId1(), DATE_3, Limit.limit(12), !COLLAPSE_THREAD).collectList().block()) - .containsExactly(messageId3(), messageId2()); - } - - @Test - default void listMailboxContentSinceReceivedAtShouldReturnEmptyWhenNoneMatch() { - testee().save(mailboxId1(), DATE_1, DATE_2, messageId1(), threadId1()).block(); - testee().save(mailboxId1(), DATE_3, DATE_4, messageId2(), threadId1()).block(); - testee().save(mailboxId1(), DATE_5, DATE_6, messageId3(), threadId1()).block(); - - assertThat(testee().listMailboxContentSinceAfterSortedBySentAt(mailboxId1(), DATE_7, Limit.limit(12), !COLLAPSE_THREAD).collectList().block()) - .isEmpty(); - } - - @Test - default void listMailboxContentSinceReceivedAtAtShouldApplyLimit() { - testee().save(mailboxId1(), DATE_1, DATE_2, messageId1(), threadId1()).block(); - testee().save(mailboxId1(), DATE_3, DATE_4, messageId2(), threadId1()).block(); - testee().save(mailboxId1(), DATE_5, DATE_6, messageId3(), threadId1()).block(); - - assertThat(testee().listMailboxContentSinceAfterSortedBySentAt(mailboxId1(), DATE_1, Limit.limit(2), !COLLAPSE_THREAD).collectList().block()) - .containsExactly(messageId3(), messageId2()); - } - @Test default void listMailboxContentSinceSentdAtShouldExcludeTooOldItems() { testee().save(mailboxId1(), DATE_1, DATE_2, messageId1(), threadId1()).block(); @@ -169,18 +139,6 @@ public interface EmailQueryViewContract { .containsExactly(messageId3(), messageId1()); } - @Test - default void listMailboxContentSinceReceivedAtShouldNotReturnClearedContent() { - testee().save(mailboxId1(), DATE_1, DATE_2, messageId1(), threadId1()).block(); - testee().save(mailboxId1(), DATE_3, DATE_4, messageId2(), threadId1()).block(); - testee().save(mailboxId1(), DATE_5, DATE_6, messageId3(), threadId1()).block(); - - testee().delete(mailboxId1()).block(); - - assertThat(testee().listMailboxContentSinceAfterSortedBySentAt(mailboxId1(), DATE_4, Limit.limit(12), !COLLAPSE_THREAD).collectList().block()) - .isEmpty(); - } - @Test default void listMailboxContentSinceSentAtShouldNotReturnClearedContent() { testee().save(mailboxId1(), DATE_1, DATE_2, messageId1(), threadId1()).block(); @@ -211,18 +169,6 @@ public interface EmailQueryViewContract { .containsExactlyInAnyOrder(messageId1(), messageId2()); } - @Test - default void listMailboxContentSinceReceivedAtShouldNotReturnDeletedContent() { - testee().save(mailboxId1(), DATE_1, DATE_2, messageId1(), threadId1()).block(); - testee().save(mailboxId1(), DATE_3, DATE_4, messageId2(), threadId1()).block(); - testee().save(mailboxId1(), DATE_5, DATE_6, messageId3(), threadId1()).block(); - - testee().delete(mailboxId1(), messageId2()).block(); - - assertThat(testee().listMailboxContentSinceAfterSortedBySentAt(mailboxId1(), DATE_3, Limit.limit(12), !COLLAPSE_THREAD).collectList().block()) - .containsExactly(messageId3()); - } - @Test default void listMailboxContentSinceSentAtShouldNotReturnDeletedContent() { testee().save(mailboxId1(), DATE_1, DATE_2, messageId1(), threadId1()).block(); @@ -287,12 +233,6 @@ public interface EmailQueryViewContract { .isInstanceOf(IllegalArgumentException.class); } - @Test - default void listMailboxContentSinceReceivedAtShouldThrowOnUndefinedLimit() { - assertThatThrownBy(() -> testee().listMailboxContentSinceAfterSortedBySentAt(mailboxId1(), DATE_3, Limit.unlimited(), !COLLAPSE_THREAD).blockLast()) - .isInstanceOf(IllegalArgumentException.class); - } - @Test default void listMailboxContentSortedBySentAtShouldReturnLatestMessageOfThreadWhenCollapseThreads() { @@ -315,27 +255,6 @@ public interface EmailQueryViewContract { .containsExactly(messageId4(), messageId3()); } - @Test - default void listMailboxContentSinceReceivedAtShouldReturnLatestMessageOfThreadWhenCollapseThreads() { - testee().save(mailboxId1(), DATE_1, DATE_2, messageId1(), threadId1()).block(); - testee().save(mailboxId1(), DATE_3, DATE_4, messageId2(), threadId1()).block(); - testee().save(mailboxId1(), DATE_5, DATE_6, messageId3(), threadId1()).block(); - - assertThat(testee().listMailboxContentSinceAfterSortedBySentAt(mailboxId1(), DATE_3, Limit.limit(12), COLLAPSE_THREAD).collectList().block()) - .containsExactly(messageId3()); - } - - @Test - default void listMailboxContentSinceReceivedAtShouldApplyLimitWithCollapseThreads() { - testee().save(mailboxId1(), DATE_1, DATE_2, messageId1(), threadId2()).block(); - testee().save(mailboxId1(), DATE_3, DATE_4, messageId2(), threadId3()).block(); - testee().save(mailboxId1(), DATE_5, DATE_6, messageId3(), threadId1()).block(); - testee().save(mailboxId1(), DATE_4, DATE_5, messageId4(), threadId1()).block(); - - assertThat(testee().listMailboxContentSinceAfterSortedBySentAt(mailboxId1(), DATE_1, Limit.limit(2), COLLAPSE_THREAD).collectList().block()) - .containsExactly(messageId3(), messageId2()); - } - @Test default void listMailboxContentSinceSentdAtShouldReturnLatestMessageOfThreadWhenCollapseThreads() { testee().save(mailboxId1(), DATE_1, DATE_2, messageId1(), threadId1()).block(); diff --git a/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedEmailQueryMethodNoViewTest.java b/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedEmailQueryMethodNoViewTest.java index 9d348d5267..2308cc0c0a 100644 --- a/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedEmailQueryMethodNoViewTest.java +++ b/server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedEmailQueryMethodNoViewTest.java @@ -76,12 +76,6 @@ public class DistributedEmailQueryMethodNoViewTest implements EmailQueryMethodCo public void inMailboxSortedByReceivedAtShouldCollapseThreads(GuiceJamesServer server) { } - @Test - @Override - @Disabled("JAMES-3340 Not supported for no email query view") - public void inMailboxAfterSortedBySentAtShouldCollapseThreads(GuiceJamesServer server) { - } - @Test @Override @Disabled("JAMES-3340 Not supported for no email query view") diff --git a/server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/EmailQueryMethodContract.scala b/server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/EmailQueryMethodContract.scala index 8ebaa69b5f..aded2f76cf 100644 --- a/server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/EmailQueryMethodContract.scala +++ b/server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/EmailQueryMethodContract.scala @@ -7613,79 +7613,6 @@ trait EmailQueryMethodContract { } } - @Test - def inMailboxAfterSortedBySentAtShouldCollapseThreads(server: GuiceJamesServer): Unit = { - val message1: Message = buildTestThreadMessage("test", "Message-ID") - val message2: Message = buildTestThreadMessage("BTW", "Message-ID-2") - val message3: Message = buildTestThreadMessage("Hello again", "Message-ID-3") - - val beforeRequestDate1 = Date.from(ZonedDateTime.now().minusDays(3).toInstant) - val requestDate = ZonedDateTime.now().minusDays(1) - val afterRequestDate1 = Date.from(ZonedDateTime.now().toInstant) - val afterRequestDate2 = Date.from(ZonedDateTime.now().plusDays(1).toInstant) - val afterRequestDate3 = Date.from(ZonedDateTime.now().plusDays(2).toInstant) - val mailboxProbe = server.getProbe(classOf[MailboxProbeImpl]) - val mailboxId = mailboxProbe.createMailbox(MailboxPath.inbox(BOB)) - - val messageId1: MessageId = sendMessageToBobInbox(server, message1, beforeRequestDate1) - val messageId2: MessageId = sendMessageToBobInbox(server, message2, afterRequestDate1) - val messageId3: MessageId = sendMessageToBobInbox(server, message3, afterRequestDate2) - val messageId4: MessageId = sendMessageToBobInbox(server, message3, afterRequestDate3) - - val request = - s"""{ - | "using": [ - | "urn:ietf:params:jmap:core", - | "urn:ietf:params:jmap:mail"], - | "methodCalls": [[ - | "Email/query", - | { - | "accountId": "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6", - | "filter": { - | "inMailbox": "${mailboxId.serialize()}", - | "after": "${UTCDate(requestDate).asUTC.format(UTC_DATE_FORMAT)}" - | }, - | "sort": [{ - | "property":"sentAt", - | "isAscending": false - | }], - | "collapseThreads": true - | }, - | "c1"]] - |}""".stripMargin - - awaitAtMostTenSeconds.untilAsserted { () => - val response = `given` - .header(ACCEPT.toString, ACCEPT_RFC8621_VERSION_HEADER) - .body(request) - .when - .post - .`then` - .statusCode(SC_OK) - .contentType(JSON) - .extract - .body - .asString - - assertThatJson(response).isEqualTo( - s"""{ - | "sessionState": "${SESSION_STATE.value}", - | "methodResponses": [[ - | "Email/query", - | { - | "accountId": "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6", - | "queryState": "${generateQueryState(messageId4, messageId2)}", - | "canCalculateChanges": false, - | "position": 0, - | "limit": 256, - | "ids": ["${messageId4.serialize}", "${messageId2.serialize}"] - | }, - | "c1" - | ]] - |}""".stripMargin) - } - } - @Test def inMailboxSortedBySentAtShouldCollapseThreads(server: GuiceJamesServer): Unit = { val message1: Message = buildTestThreadMessage("test", "Message-ID") diff --git a/server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/memory/MemoryEmailQueryMethodNoViewTest.java b/server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/memory/MemoryEmailQueryMethodNoViewTest.java index a6603bac6c..49cd6cc5b3 100644 --- a/server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/memory/MemoryEmailQueryMethodNoViewTest.java +++ b/server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/memory/MemoryEmailQueryMethodNoViewTest.java @@ -90,12 +90,6 @@ public class MemoryEmailQueryMethodNoViewTest implements EmailQueryMethodContrac public void inMailboxSortedByReceivedAtShouldCollapseThreads(GuiceJamesServer server) { } - @Test - @Override - @Disabled("JAMES-3340 Not supported for no email query view") - public void inMailboxAfterSortedBySentAtShouldCollapseThreads(GuiceJamesServer server) { - } - @Test @Override @Disabled("JAMES-3340 Not supported for no email query view") diff --git a/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/EmailQueryMethod.scala b/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/EmailQueryMethod.scala index 5da2a03994..e164e3bba3 100644 --- a/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/EmailQueryMethod.scala +++ b/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/EmailQueryMethod.scala @@ -95,8 +95,6 @@ class EmailQueryMethod @Inject() (serializer: EmailQuerySerializer, val ids: SMono[Seq[MessageId]] = request match { case request: EmailQueryRequest if matchesInMailboxSortedBySentAt(request) => queryViewForListingSortedBySentAt(session, position, limit, request, searchQuery.getNamespace) - case request: EmailQueryRequest if matchesInMailboxAfterSortedBySentAt(request) => - queryViewForContentAfterSortedBySentAt(session, position, limit, request, searchQuery.getNamespace) case request: EmailQueryRequest if matchesInMailboxSortedByReceivedAt(request) => queryViewForListingSortedByReceivedAt(session, position, limit, request, searchQuery.getNamespace) case request: EmailQueryRequest if matchesInMailboxAfterSortedByReceivedAt(request) => @@ -109,17 +107,6 @@ class EmailQueryMethod @Inject() (serializer: EmailQuerySerializer, ids.map(ids => toResponse(request, position, limit, ids)) } - private def queryViewForContentAfterSortedBySentAt(mailboxSession: MailboxSession, position: Position, limitToUse: Limit, request: EmailQueryRequest, namespace: Namespace): SMono[Seq[MessageId]] = { - val condition: FilterCondition = request.filter.get.asInstanceOf[FilterCondition] - val mailboxId: MailboxId = condition.inMailbox.get - val after: ZonedDateTime = condition.after.get.asUTC - val collapseThreads: Boolean = getCollapseThreads(request) - - val queryViewEntries: SFlux[MessageId] = SFlux.fromPublisher(emailQueryViewManager.getEmailQueryView(mailboxSession.getUser) - .listMailboxContentSinceAfterSortedBySentAt(mailboxId, after, JavaLimit.from(limitToUse.value + position.value), collapseThreads)) - - fromQueryViewEntries(mailboxId, queryViewEntries, mailboxSession, position, limitToUse, namespace) - } private def queryViewForContentAfterSortedByReceivedAt(mailboxSession: MailboxSession, position: Position, limitToUse: Limit, request: EmailQueryRequest, namespace: Namespace): SMono[Seq[MessageId]] = { val condition: FilterCondition = request.filter.get.asInstanceOf[FilterCondition] @@ -188,11 +175,6 @@ class EmailQueryMethod @Inject() (serializer: EmailQuerySerializer, request.filter.exists(_.inMailboxFilterOnly) && request.sort.contains(Set(Comparator.RECEIVED_AT_DESC)) - private def matchesInMailboxAfterSortedBySentAt(request: EmailQueryRequest): Boolean = - configuration.isEmailQueryViewEnabled && - request.filter.exists(_.inMailboxAndAfterFilterOnly) && - request.sort.contains(Set(Comparator.SENT_AT_DESC)) - private def matchesInMailboxAfterSortedByReceivedAt(request: EmailQueryRequest): Boolean = configuration.isEmailQueryViewEnabled && request.filter.exists(_.inMailboxAndAfterFilterOnly) && --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
