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 2025/12/02 07:49:45 UTC
(james-project) 11/12: JAMES-3340 Drop irrelevant sort by sentAt, limit on received
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 <bt...@linagora.com>
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: notifications-unsubscribe@james.apache.org
For additional commands, e-mail: notifications-help@james.apache.org