mirror of
https://git.notmuchmail.org/git/notmuch
synced 2024-11-25 12:28:09 +01:00
notmuch search: Add --first and --max-threads options for incremental search.
This time, things are actually tested. The current results aren't exactly the same as previous results since the incremental search doesn't necessarily see all the new messages that pertain to the thread. This means that some author names are missing. I plan to fix this by doing an additional database search for all messages in each thread. Of course, this will also be different than before since now the result will display *all* authors in the thread (rather than only those that matched the search) but that's probably what we really want to display anyway.
This commit is contained in:
parent
bbf4b8e4ae
commit
fc2053b022
2 changed files with 31 additions and 1 deletions
|
@ -66,6 +66,9 @@
|
||||||
|
|
||||||
#define ARRAY_SIZE(arr) (sizeof (arr) / sizeof (arr[0]))
|
#define ARRAY_SIZE(arr) (sizeof (arr) / sizeof (arr[0]))
|
||||||
|
|
||||||
|
#define STRNCMP_LITERAL(var, literal) \
|
||||||
|
strncmp ((var), (literal), sizeof (literal) - 1)
|
||||||
|
|
||||||
typedef int (*command_function_t) (void *ctx, int argc, char *argv[]);
|
typedef int (*command_function_t) (void *ctx, int argc, char *argv[]);
|
||||||
|
|
||||||
typedef struct command {
|
typedef struct command {
|
||||||
|
|
|
@ -32,6 +32,33 @@ notmuch_search_command (void *ctx, int argc, char *argv[])
|
||||||
char *query_str;
|
char *query_str;
|
||||||
const char *relative_date;
|
const char *relative_date;
|
||||||
time_t date;
|
time_t date;
|
||||||
|
int i, first = 0, max_threads = -1;
|
||||||
|
char *opt, *end;
|
||||||
|
|
||||||
|
for (i = 0; i < argc && argv[i][0] == '-'; i++) {
|
||||||
|
if (strcmp (argv[i], "--") == 0) {
|
||||||
|
i++;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (STRNCMP_LITERAL (argv[i], "--first=") == 0) {
|
||||||
|
opt = argv[i] + sizeof ("--first=") - 1;
|
||||||
|
first = strtoul (opt, &end, 10);
|
||||||
|
if (*opt == '\0' || *end != '\0') {
|
||||||
|
fprintf (stderr, "Invalid value for --first: %s\n", opt);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
} else if (STRNCMP_LITERAL (argv[i], "--max-threads=") == 0) {
|
||||||
|
opt = argv[i] + sizeof ("--max-threads=") - 1;
|
||||||
|
max_threads = strtoul (opt, &end, 10);
|
||||||
|
if (*opt == '\0' || *end != '\0') {
|
||||||
|
fprintf (stderr, "Invalid value for --max-threads: %s\n", opt);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
argc -= i;
|
||||||
|
argv += i;
|
||||||
|
|
||||||
config = notmuch_config_open (ctx, NULL, NULL);
|
config = notmuch_config_open (ctx, NULL, NULL);
|
||||||
if (config == NULL)
|
if (config == NULL)
|
||||||
|
@ -53,7 +80,7 @@ notmuch_search_command (void *ctx, int argc, char *argv[])
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (threads = notmuch_query_search_threads (query, 0, -1);
|
for (threads = notmuch_query_search_threads (query, first, max_threads);
|
||||||
notmuch_threads_has_more (threads);
|
notmuch_threads_has_more (threads);
|
||||||
notmuch_threads_advance (threads))
|
notmuch_threads_advance (threads))
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in a new issue