]> granicus.if.org Git - neomutt/commitdiff
notmuch: respect limits when counting messages
authorAustin Ray <austin@austinray.io>
Tue, 30 Oct 2018 16:06:33 +0000 (12:06 -0400)
committerAustin Ray <austin@austinray.io>
Tue, 30 Oct 2018 19:26:12 +0000 (15:26 -0400)
When NeoMutt counts the number of returned messages for a notmuch query,
it does not consider user specified limits. This affects both `limit=`
and `nm_db_limit` specifications.

This commit modifies `nm_nonctx_get_count(...)` to return the query's
limit if `get_count(...)` exceeds the limit. The check ensures that the
limit is non-zero so we don't return empty mailboxes.

Fixes #1375

notmuch/mutt_notmuch.c

index c7797b7c6b93014cabd715da6f25e9843eb2bb39..91457b89aae602ca6b5ad394ab35534b0aff205b 100644 (file)
@@ -1906,6 +1906,7 @@ int nm_nonctx_get_count(char *path, int *all, int *new)
   char *db_filename = NULL, *db_query = NULL;
   notmuch_database_t *db = NULL;
   int rc = -1;
+  int limit = NmDbLimit;
   mutt_debug(1, "nm: count\n");
 
   if (url_parse(&url, url_holder) < 0)
@@ -1917,10 +1918,9 @@ int nm_nonctx_get_count(char *path, int *all, int *new)
   STAILQ_FOREACH(item, &url.query_strings, entries)
   {
     if (item->value && (strcmp(item->name, "query") == 0))
-    {
       db_query = item->value;
-      break;
-    }
+    else if (item->value && (strcmp(item->name, "limit") == 0))
+      mutt_str_atoi(item->value, &limit); // Try to parse the limit
   }
 
   if (!db_query)
@@ -1948,8 +1948,14 @@ int nm_nonctx_get_count(char *path, int *all, int *new)
 
   /* all emails */
   if (all)
+  {
     *all = count_query(db, db_query);
 
+    // If we have a non-zero limit, we shouldn't exceed it.
+    if (limit > 0 && *all > limit)
+      *all = limit;
+  }
+
   /* new messages */
   if (new)
   {