mirror of
https://git.notmuchmail.org/git/notmuch
synced 2024-11-25 04:18:08 +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
|
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_message_t *message;
|
||||||
|
notmuch_bool_t match;
|
||||||
|
int next_indent;
|
||||||
|
|
||||||
for (;
|
for (;
|
||||||
notmuch_messages_has_more (messages);
|
notmuch_messages_has_more (messages);
|
||||||
|
@ -194,9 +197,17 @@ show_messages (void *ctx, notmuch_messages_t *messages, int indent)
|
||||||
{
|
{
|
||||||
message = notmuch_messages_get (messages);
|
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);
|
notmuch_message_destroy (message);
|
||||||
}
|
}
|
||||||
|
@ -257,29 +268,21 @@ notmuch_show_command (void *ctx, unused (int argc), unused (char *argv[]))
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!entire_thread) {
|
for (threads = notmuch_query_search_threads (query);
|
||||||
messages = notmuch_query_search_messages (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)
|
if (messages == NULL)
|
||||||
INTERNAL_ERROR ("No messages.\n");
|
INTERNAL_ERROR ("Thread %s has no toplevel messages.\n",
|
||||||
show_messages (ctx, messages, 0);
|
notmuch_thread_get_thread_id (thread));
|
||||||
|
|
||||||
} else {
|
show_messages (ctx, messages, 0, entire_thread);
|
||||||
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);
|
notmuch_thread_destroy (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_query_destroy (query);
|
notmuch_query_destroy (query);
|
||||||
|
|
Loading…
Reference in a new issue