Re: [PATCH 1/6] notmuch-show.c: add an option for messages to be returned unthreaded

2020-02-27 Thread Tomi Ollila
On Thu, Feb 27 2020, Mark Walters wrote:

> This adds a --unthreaded option to notmuch show to tell it to return
> the matching messages in an unthreaded order (so just by date).
>
> To make it easier for users, in particular for notmuch-tree.el, we
> output each message with the same "nesting" as if it were an entire
> thread in its own right.

Some spacing in this commit, but LGTM =D

Tomi

___
notmuch mailing list
notmuch@notmuchmail.org
https://notmuchmail.org/mailman/listinfo/notmuch


[PATCH 1/6] notmuch-show.c: add an option for messages to be returned unthreaded

2020-02-27 Thread Mark Walters
This adds a --unthreaded option to notmuch show to tell it to return
the matching messages in an unthreaded order (so just by date).

To make it easier for users, in particular for notmuch-tree.el, we
output each message with the same "nesting" as if it were an entire
thread in its own right.
---
 notmuch-show.c | 61 --
 1 file changed, 55 insertions(+), 6 deletions(-)

diff --git a/notmuch-show.c b/notmuch-show.c
index 21792a57..cf543ed9 100644
--- a/notmuch-show.c
+++ b/notmuch-show.c
@@ -1066,11 +1066,11 @@ do_show_single (void *ctx,
 
 /* Formatted output of threads */
 static int
-do_show (void *ctx,
-notmuch_query_t *query,
-const notmuch_show_format_t *format,
-sprinter_t *sp,
-notmuch_show_params_t *params)
+do_show_threaded (void *ctx,
+ notmuch_query_t *query,
+ const notmuch_show_format_t *format,
+ sprinter_t *sp,
+ notmuch_show_params_t *params)
 {
 notmuch_threads_t *threads;
 notmuch_thread_t *thread;
@@ -1107,6 +1107,50 @@ do_show (void *ctx,
 return res != NOTMUCH_STATUS_SUCCESS;
 }
 
+static int
+do_show_unthreaded (void *ctx,
+   notmuch_query_t *query,
+   const notmuch_show_format_t *format,
+   sprinter_t *sp,
+   notmuch_show_params_t *params)
+{
+notmuch_messages_t *messages;
+notmuch_message_t *message;
+notmuch_status_t status, res = NOTMUCH_STATUS_SUCCESS;
+notmuch_bool_t excluded;
+
+status= notmuch_query_search_messages (query, &messages);
+if (print_status_query ("notmuch show", query, status))
+   return 1;
+
+sp->begin_list (sp);
+
+for (;
+notmuch_messages_valid (messages);
+notmuch_messages_move_to_next (messages)) {
+   sp->begin_list (sp);
+   sp->begin_list (sp);
+
+   message = notmuch_messages_get (messages);
+
+   notmuch_message_set_flag (message, NOTMUCH_MESSAGE_FLAG_MATCH, TRUE);
+   excluded = notmuch_message_get_flag (message, 
NOTMUCH_MESSAGE_FLAG_EXCLUDED);
+
+   if (!excluded || !params->omit_excluded) {
+   status = show_message (ctx, format, sp, message, 0, params);
+   if (status && !res)
+   res = status;
+   } else {
+   sp->null (sp);
+   }
+   notmuch_message_destroy (message);
+   sp->end (sp);
+   sp->end (sp);
+}
+sp->end (sp);
+return res;
+}
+
 enum {
 NOTMUCH_FORMAT_NOT_SPECIFIED,
 NOTMUCH_FORMAT_JSON,
@@ -1168,6 +1212,7 @@ notmuch_show_command (notmuch_config_t *config, int argc, 
char *argv[])
 bool exclude = true;
 bool entire_thread_set = false;
 bool single_message;
+bool unthreaded = FALSE;
 
 notmuch_opt_desc_t options[] = {
{ .opt_keyword = &format, .name = "format", .keywords =
@@ -1181,6 +1226,7 @@ notmuch_show_command (notmuch_config_t *config, int argc, 
char *argv[])
{ .opt_bool = &exclude, .name = "exclude" },
{ .opt_bool = ¶ms.entire_thread, .name = "entire-thread",
  .present = &entire_thread_set },
+   { .opt_bool = &unthreaded, .name = "unthreaded" },
{ .opt_int = ¶ms.part, .name = "part" },
{ .opt_keyword = (int *) (¶ms.crypto.decrypt), .name = "decrypt",
  .keyword_no_arg_value = "true", .keywords =
@@ -1317,7 +1363,10 @@ notmuch_show_command (notmuch_config_t *config, int 
argc, char *argv[])
params.omit_excluded = false;
}
 
-   ret = do_show (config, query, formatter, sprinter, ¶ms);
+   if (unthreaded)
+   ret = do_show_unthreaded (config, query, formatter, sprinter, 
¶ms);
+   else
+   ret = do_show_threaded (config, query, formatter, sprinter, 
¶ms);
 }
 
   DONE:
-- 
2.11.0

___
notmuch mailing list
notmuch@notmuchmail.org
https://notmuchmail.org/mailman/listinfo/notmuch