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]

Reply via email to