Task queue pagination by anchor

This commit is contained in:
Maurus Decimus
2026-04-30 12:33:56 +02:00
parent 880fa40539
commit 7417d6d07c
2 changed files with 21 additions and 9 deletions

View File

@@ -457,13 +457,7 @@ pub(crate) async fn task_query(
_ => false,
})?;
if let Some(anchor) = req.request.anchor {
let anchor = anchor.id();
if anchor > due_from {
due_from = anchor;
}
}
let anchor_id = req.request.anchor.map(|anchor| anchor.id());
if req
.request
.sort
@@ -480,6 +474,24 @@ pub(crate) async fn task_query(
.request
.extract_parameters(req.server.core.jmap.query_max_results, None)?;
let mut from_id = 0u64;
if let Some(anchor_id) = anchor_id
&& let Some(anchor_task) = req
.server
.store()
.get_value::<Task>(ValueKey::from(ValueClass::TaskQueue(
TaskQueueClass::Task { id: anchor_id },
)))
.await
.caused_by(trc::location!())?
{
let anchor_due = anchor_task.due_timestamp();
if anchor_due >= due_from && anchor_due <= due_to {
due_from = anchor_due;
from_id = anchor_id;
}
}
// Build response
let mut response = QueryResponseBuilder::new(
req.server.core.jmap.query_max_results + 1,
@@ -489,9 +501,8 @@ pub(crate) async fn task_query(
);
let mut total = 0;
let from_key = ValueKey::from(ValueClass::TaskQueue(TaskQueueClass::Due {
id: 0,
id: from_id,
due: due_from,
}));
let to_key = ValueKey::from(ValueClass::TaskQueue(TaskQueueClass::Due {