[PATCH v2 1/4] cli: Refactor option passing in the search command
Many functions that implement the search command need to access command line options. Instead of passing each option in a separate variable, put them in a structure and pass only this structure. This will become handy in the following patches. --- notmuch-search.c | 122 --- 1 file changed, 62 insertions(+), 60 deletions(-) diff --git a/notmuch-search.c b/notmuch-search.c index bc9be45..5ac2a26 100644 --- a/notmuch-search.c +++ b/notmuch-search.c @@ -30,6 +30,16 @@ typedef enum { OUTPUT_TAGS } output_t; +typedef struct { +sprinter_t *format; +notmuch_query_t *query; +notmuch_sort_t sort; +output_t output; +int offset; +int limit; +int dupe; +} search_options_t; + /* Return two stable query strings that identify exactly the matched * and unmatched messages currently in thread. If there are no * matched or unmatched messages, the returned buffers will be @@ -70,46 +80,42 @@ get_thread_query (notmuch_thread_t *thread, } static int -do_search_threads (sprinter_t *format, - notmuch_query_t *query, - notmuch_sort_t sort, - output_t output, - int offset, - int limit) +do_search_threads (search_options_t *o) { notmuch_thread_t *thread; notmuch_threads_t *threads; notmuch_tags_t *tags; +sprinter_t *format = o->format; time_t date; int i; -if (offset < 0) { - offset += notmuch_query_count_threads (query); - if (offset < 0) - offset = 0; +if (o->offset < 0) { + o->offset += notmuch_query_count_threads (o->query); + if (o->offset < 0) + o->offset = 0; } -threads = notmuch_query_search_threads (query); +threads = notmuch_query_search_threads (o->query); if (threads == NULL) return 1; format->begin_list (format); for (i = 0; -notmuch_threads_valid (threads) && (limit < 0 || i < offset + limit); +notmuch_threads_valid (threads) && (o->limit < 0 || i < o->offset + o->limit); notmuch_threads_move_to_next (threads), i++) { thread = notmuch_threads_get (threads); - if (i < offset) { + if (i < o->offset) { notmuch_thread_destroy (thread); continue; } - if (output == OUTPUT_THREADS) { + if (o->output == OUTPUT_THREADS) { format->set_prefix (format, "thread"); format->string (format, - notmuch_thread_get_thread_id (thread)); + notmuch_thread_get_thread_id (thread)); format->separator (format); } else { /* output == OUTPUT_SUMMARY */ void *ctx_quote = talloc_new (thread); @@ -123,7 +129,7 @@ do_search_threads (sprinter_t *format, format->begin_map (format); - if (sort == NOTMUCH_SORT_OLDEST_FIRST) + if (o->sort == NOTMUCH_SORT_OLDEST_FIRST) date = notmuch_thread_get_oldest_date (thread); else date = notmuch_thread_get_newest_date (thread); @@ -215,40 +221,36 @@ do_search_threads (sprinter_t *format, } static int -do_search_messages (sprinter_t *format, - notmuch_query_t *query, - output_t output, - int offset, - int limit, - int dupe) +do_search_messages (search_options_t *o) { notmuch_message_t *message; notmuch_messages_t *messages; notmuch_filenames_t *filenames; +sprinter_t *format = o->format; int i; -if (offset < 0) { - offset += notmuch_query_count_messages (query); - if (offset < 0) - offset = 0; +if (o->offset < 0) { + o->offset += notmuch_query_count_messages (o->query); + if (o->offset < 0) + o->offset = 0; } -messages = notmuch_query_search_messages (query); +messages = notmuch_query_search_messages (o->query); if (messages == NULL) return 1; format->begin_list (format); for (i = 0; -notmuch_messages_valid (messages) && (limit < 0 || i < offset + limit); +notmuch_messages_valid (messages) && (o->limit < 0 || i < o->offset + o->limit); notmuch_messages_move_to_next (messages), i++) { - if (i < offset) + if (i < o->offset) continue; message = notmuch_messages_get (messages); - if (output == OUTPUT_FILES) { + if (o->output == OUTPUT_FILES) { int j; filenames = notmuch_message_get_filenames (message); @@ -256,7 +258,7 @@ do_search_messages (sprinter_t *format, notmuch_filenames_valid (filenames); notmuch_filenames_move_to_next (filenames), j++) { - if (dupe < 0 || dupe == j) { + if (o->dupe < 0 || o->dupe == j) { format->string (format, notmu
[PATCH v2 1/4] cli: Refactor option passing in the search command
Many functions that implement the search command need to access command line options. Instead of passing each option in a separate variable, put them in a structure and pass only this structure. This will become handy in the following patches. --- notmuch-search.c | 122 --- 1 file changed, 62 insertions(+), 60 deletions(-) diff --git a/notmuch-search.c b/notmuch-search.c index bc9be45..5ac2a26 100644 --- a/notmuch-search.c +++ b/notmuch-search.c @@ -30,6 +30,16 @@ typedef enum { OUTPUT_TAGS } output_t; +typedef struct { +sprinter_t *format; +notmuch_query_t *query; +notmuch_sort_t sort; +output_t output; +int offset; +int limit; +int dupe; +} search_options_t; + /* Return two stable query strings that identify exactly the matched * and unmatched messages currently in thread. If there are no * matched or unmatched messages, the returned buffers will be @@ -70,46 +80,42 @@ get_thread_query (notmuch_thread_t *thread, } static int -do_search_threads (sprinter_t *format, - notmuch_query_t *query, - notmuch_sort_t sort, - output_t output, - int offset, - int limit) +do_search_threads (search_options_t *o) { notmuch_thread_t *thread; notmuch_threads_t *threads; notmuch_tags_t *tags; +sprinter_t *format = o->format; time_t date; int i; -if (offset < 0) { - offset += notmuch_query_count_threads (query); - if (offset < 0) - offset = 0; +if (o->offset < 0) { + o->offset += notmuch_query_count_threads (o->query); + if (o->offset < 0) + o->offset = 0; } -threads = notmuch_query_search_threads (query); +threads = notmuch_query_search_threads (o->query); if (threads == NULL) return 1; format->begin_list (format); for (i = 0; -notmuch_threads_valid (threads) && (limit < 0 || i < offset + limit); +notmuch_threads_valid (threads) && (o->limit < 0 || i < o->offset + o->limit); notmuch_threads_move_to_next (threads), i++) { thread = notmuch_threads_get (threads); - if (i < offset) { + if (i < o->offset) { notmuch_thread_destroy (thread); continue; } - if (output == OUTPUT_THREADS) { + if (o->output == OUTPUT_THREADS) { format->set_prefix (format, "thread"); format->string (format, - notmuch_thread_get_thread_id (thread)); + notmuch_thread_get_thread_id (thread)); format->separator (format); } else { /* output == OUTPUT_SUMMARY */ void *ctx_quote = talloc_new (thread); @@ -123,7 +129,7 @@ do_search_threads (sprinter_t *format, format->begin_map (format); - if (sort == NOTMUCH_SORT_OLDEST_FIRST) + if (o->sort == NOTMUCH_SORT_OLDEST_FIRST) date = notmuch_thread_get_oldest_date (thread); else date = notmuch_thread_get_newest_date (thread); @@ -215,40 +221,36 @@ do_search_threads (sprinter_t *format, } static int -do_search_messages (sprinter_t *format, - notmuch_query_t *query, - output_t output, - int offset, - int limit, - int dupe) +do_search_messages (search_options_t *o) { notmuch_message_t *message; notmuch_messages_t *messages; notmuch_filenames_t *filenames; +sprinter_t *format = o->format; int i; -if (offset < 0) { - offset += notmuch_query_count_messages (query); - if (offset < 0) - offset = 0; +if (o->offset < 0) { + o->offset += notmuch_query_count_messages (o->query); + if (o->offset < 0) + o->offset = 0; } -messages = notmuch_query_search_messages (query); +messages = notmuch_query_search_messages (o->query); if (messages == NULL) return 1; format->begin_list (format); for (i = 0; -notmuch_messages_valid (messages) && (limit < 0 || i < offset + limit); +notmuch_messages_valid (messages) && (o->limit < 0 || i < o->offset + o->limit); notmuch_messages_move_to_next (messages), i++) { - if (i < offset) + if (i < o->offset) continue; message = notmuch_messages_get (messages); - if (output == OUTPUT_FILES) { + if (o->output == OUTPUT_FILES) { int j; filenames = notmuch_message_get_filenames (message); @@ -256,7 +258,7 @@ do_search_messages (sprinter_t *format, notmuch_filenames_valid (filenames); notmuch_filenames_move_to_next (filenames), j++) { - if (dupe < 0 || dupe == j) { + if (o->dupe < 0 || o->dupe == j) { format->str