mirror of
https://git.notmuchmail.org/git/notmuch
synced 2024-12-22 09:24:54 +01:00
notmuch show: Preserve thread-ordering and nesting without --entire-thread
When "notmuch show" was recently modified to not show an entire thread by default, it also lost all capability to properly order the messages in a thread and to print their proper depth. For example, the command: notmuch show thread:6d5e3e276461188c5778c9f219f63782 had dramatically different output than: notmuch show --entire-thread thread:6d5e3e276461188c5778c9f219f63782 even though both commands were selecting and displaying the same set of messages. The first command would diplay them "flat", (all with depth:0), and in strict date order; while the second command would display them "nested" (with depth based on threading), and in thread order. We now fix "notmuch show" without the --entire-thread option to also display nested and thread-ordered messages. If some messages in the thread are not included in the displayed results, then they are not counted when computing depth values.
This commit is contained in:
parent
63c503a5ac
commit
115b7c15b8
1 changed files with 26 additions and 23 deletions
|
@ -184,9 +184,12 @@ show_message (void *ctx, notmuch_message_t *message, int indent)
|
|||
|
||||
|
||||
static void
|
||||
show_messages (void *ctx, notmuch_messages_t *messages, int indent)
|
||||
show_messages (void *ctx, notmuch_messages_t *messages, int indent,
|
||||
notmuch_bool_t entire_thread)
|
||||
{
|
||||
notmuch_message_t *message;
|
||||
notmuch_bool_t match;
|
||||
int next_indent;
|
||||
|
||||
for (;
|
||||
notmuch_messages_has_more (messages);
|
||||
|
@ -194,9 +197,17 @@ show_messages (void *ctx, notmuch_messages_t *messages, int indent)
|
|||
{
|
||||
message = notmuch_messages_get (messages);
|
||||
|
||||
show_message (ctx, message, indent);
|
||||
match = notmuch_message_get_flag (message, NOTMUCH_MESSAGE_FLAG_MATCH);
|
||||
|
||||
show_messages (ctx, notmuch_message_get_replies (message), indent + 1);
|
||||
next_indent = indent;
|
||||
|
||||
if (match || entire_thread) {
|
||||
show_message (ctx, message, indent);
|
||||
next_indent = indent + 1;
|
||||
}
|
||||
|
||||
show_messages (ctx, notmuch_message_get_replies (message),
|
||||
next_indent, entire_thread);
|
||||
|
||||
notmuch_message_destroy (message);
|
||||
}
|
||||
|
@ -257,29 +268,21 @@ notmuch_show_command (void *ctx, unused (int argc), unused (char *argv[]))
|
|||
return 1;
|
||||
}
|
||||
|
||||
if (!entire_thread) {
|
||||
messages = notmuch_query_search_messages (query);
|
||||
for (threads = notmuch_query_search_threads (query);
|
||||
notmuch_threads_has_more (threads);
|
||||
notmuch_threads_advance (threads))
|
||||
{
|
||||
thread = notmuch_threads_get (threads);
|
||||
|
||||
messages = notmuch_thread_get_toplevel_messages (thread);
|
||||
|
||||
if (messages == NULL)
|
||||
INTERNAL_ERROR ("No messages.\n");
|
||||
show_messages (ctx, messages, 0);
|
||||
INTERNAL_ERROR ("Thread %s has no toplevel messages.\n",
|
||||
notmuch_thread_get_thread_id (thread));
|
||||
|
||||
} else {
|
||||
for (threads = notmuch_query_search_threads (query);
|
||||
notmuch_threads_has_more (threads);
|
||||
notmuch_threads_advance (threads))
|
||||
{
|
||||
thread = notmuch_threads_get (threads);
|
||||
show_messages (ctx, messages, 0, entire_thread);
|
||||
|
||||
messages = notmuch_thread_get_toplevel_messages (thread);
|
||||
|
||||
if (messages == NULL)
|
||||
INTERNAL_ERROR ("Thread %s has no toplevel messages.\n",
|
||||
notmuch_thread_get_thread_id (thread));
|
||||
|
||||
show_messages (ctx, messages, 0);
|
||||
|
||||
notmuch_thread_destroy (thread);
|
||||
}
|
||||
notmuch_thread_destroy (thread);
|
||||
}
|
||||
|
||||
notmuch_query_destroy (query);
|
||||
|
|
Loading…
Reference in a new issue