server: fix paging if only notmuch results are found

This commit is contained in:
Bill Thiede 2024-08-15 14:58:23 -07:00
parent 8a237bf8e1
commit b5e25eef78
3 changed files with 17 additions and 2 deletions

View File

@ -217,7 +217,10 @@ impl QueryRoot {
let newsreader_query: Query = query.parse()?;
Ok(newsreader::count(pool, &newsreader_query).await? + nm::count(nm, &query).await?)
let newsreader_count = newsreader::count(pool, &newsreader_query).await?;
let notmuch_count = nm::count(nm, &newsreader_query.to_notmuch()).await?;
info!("count {newsreader_query:?} newsreader count {newsreader_count} notmuch count {notmuch_count}");
Ok(newsreader_count + notmuch_count)
}
async fn search<'ctx>(

View File

@ -37,6 +37,12 @@ pub fn make_news_tag(tag: &str) -> String {
}
pub async fn count(pool: &PgPool, query: &Query) -> Result<usize, ServerError> {
if !query.remainder.is_empty() {
// TODO: handle full text search against all sites, for now, early return if search words
// are specified.
return Ok(0);
}
let row = sqlx::query_file!("sql/count.sql", query.tag, query.unread_only)
.fetch_one(pool)
.await?;

View File

@ -50,7 +50,13 @@ pub async fn search(
last: Option<i32>,
query: String,
) -> Result<Vec<(i32, ThreadSummary)>, async_graphql::Error> {
let (offset, limit) = compute_offset_limit(after, before, first, last);
let (offset, mut limit) = compute_offset_limit(after, before, first, last);
if before.is_none() {
// When searching forward, the +1 is to see if there are more pages of data available.
// Searching backwards implies there's more pages forward, because the value represented by
// `before` is on the next page.
limit = limit + 1;
}
Ok(nm
.search(&query, offset as usize, limit as usize)?
.0