mirror of
https://git.notmuchmail.org/git/notmuch
synced 2024-11-24 20:08:10 +01:00
lib/thread: rewrite _parent_or_toplevel to use depths
This is part 1/2 of changing the reparenting of alleged toplevel messages to use a "deep" reference rather than just the first one found.
This commit is contained in:
parent
0a7181dd16
commit
21803df6ae
1 changed files with 27 additions and 7 deletions
|
@ -416,20 +416,40 @@ _parent_via_in_reply_to (notmuch_thread_t *thread, notmuch_message_t *message) {
|
||||||
static void
|
static void
|
||||||
_parent_or_toplevel (notmuch_thread_t *thread, notmuch_message_t *message)
|
_parent_or_toplevel (notmuch_thread_t *thread, notmuch_message_t *message)
|
||||||
{
|
{
|
||||||
bool found = false;
|
size_t max_depth = 0;
|
||||||
|
notmuch_message_t *new_parent;
|
||||||
notmuch_message_t *parent = NULL;
|
notmuch_message_t *parent = NULL;
|
||||||
const notmuch_string_list_t *references =
|
const notmuch_string_list_t *references =
|
||||||
_notmuch_message_get_references (message);
|
_notmuch_message_get_references (message);
|
||||||
|
|
||||||
|
THREAD_DEBUG("trying to reparent via references: %s\n",
|
||||||
|
notmuch_message_get_message_id (message));
|
||||||
|
|
||||||
for (notmuch_string_node_t *ref_node = references->head;
|
for (notmuch_string_node_t *ref_node = references->head;
|
||||||
! found && ref_node; ref_node = ref_node->next) {
|
ref_node; ref_node = ref_node->next) {
|
||||||
if ((found = g_hash_table_lookup_extended (thread->message_hash,
|
THREAD_DEBUG("checking reference=%s\n", ref_node->string);
|
||||||
ref_node->string, NULL,
|
if ((g_hash_table_lookup_extended (thread->message_hash,
|
||||||
(void **) &parent))) {
|
ref_node->string, NULL,
|
||||||
_notmuch_message_add_reply (parent, message);
|
(void **) &new_parent))) {
|
||||||
|
size_t new_depth = _notmuch_message_get_thread_depth (new_parent);
|
||||||
|
THREAD_DEBUG("got depth %lu\n", new_depth);
|
||||||
|
if (new_depth > max_depth || !parent) {
|
||||||
|
THREAD_DEBUG("adding at depth %lu parent=%s\n", new_depth, ref_node->string);
|
||||||
|
max_depth = new_depth;
|
||||||
|
parent = new_parent;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (! found)
|
if (parent) {
|
||||||
|
THREAD_DEBUG("adding reply %s to parent=%s\n",
|
||||||
|
notmuch_message_get_message_id (message),
|
||||||
|
notmuch_message_get_message_id (parent));
|
||||||
|
_notmuch_message_add_reply (parent, message);
|
||||||
|
} else {
|
||||||
|
THREAD_DEBUG("adding as toplevel %s\n",
|
||||||
|
notmuch_message_get_message_id (message));
|
||||||
_notmuch_message_list_add_message (thread->toplevel_list, message);
|
_notmuch_message_list_add_message (thread->toplevel_list, message);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
|
Loading…
Reference in a new issue