From: Alfons Hoogervorst Date: Mon, 23 Jun 2003 16:55:58 +0000 (+0000) Subject: * src/procmsg.c X-Git-Tag: rel_0_9_3~52 X-Git-Url: http://git.claws-mail.org/?p=claws.git;a=commitdiff_plain;h=b6053de26691205ee3f0acac50e14d1d87dc7829 * src/procmsg.c try better grouping messages threaded by subject based on their age. still not perfect - because the message tree is not sorted by date. --- diff --git a/ChangeLog.claws b/ChangeLog.claws index 9254116da..4e29dad55 100644 --- a/ChangeLog.claws +++ b/ChangeLog.claws @@ -1,3 +1,9 @@ +2003-06-23 [alfons] 0.9.0claws58 + + * src/procmsg.c + try better grouping messages threaded by subject based on their age. + still not perfect - because the message tree is not sorted by date. + 2003-06-23 [thorsten] 0.9.0claws57 * src/pop.[ch] diff --git a/configure.ac b/configure.ac index 06db10da3..4ec37a5b8 100644 --- a/configure.ac +++ b/configure.ac @@ -11,7 +11,7 @@ MINOR_VERSION=9 MICRO_VERSION=0 INTERFACE_AGE=0 BINARY_AGE=0 -EXTRA_VERSION=claws57 +EXTRA_VERSION=claws58 VERSION=$MAJOR_VERSION.$MINOR_VERSION.$MICRO_VERSION$EXTRA_VERSION dnl set $target diff --git a/src/procmsg.c b/src/procmsg.c index 0acc2d6b9..8aee6db65 100644 --- a/src/procmsg.c +++ b/src/procmsg.c @@ -140,7 +140,7 @@ static gboolean procmsg_ignore_node(GNode *node, gpointer data) /* return the reversed thread tree */ GNode *procmsg_get_thread_tree(GSList *mlist) { - GNode *root, *parent, *node, *next; + GNode *root, *parent, *node, *next, *last; GHashTable *msgid_table; GHashTable *subject_table; MsgInfo *msginfo; @@ -185,11 +185,11 @@ GNode *procmsg_get_thread_tree(GSList *mlist) else { /* replace if msg in table is older than current one * can add here more stuff. */ - if ( ((MsgInfo*)(found_subject->data))->date_t > - ((MsgInfo*)(node->data))->date_t ) { + if ( ((MsgInfo*)(found_subject->data))->date_t > + ((MsgInfo*)(node->data))->date_t ) { subject_table_remove_clean(subject_table, (gchar *) subject); subject_table_insert_clean(subject_table, (gchar *) subject, node); - } + } } } } @@ -213,6 +213,7 @@ GNode *procmsg_get_thread_tree(GSList *mlist) g_node_traverse(node, G_PRE_ORDER, G_TRAVERSE_ALL, -1, procmsg_ignore_node, NULL); } } + last = node; /* CLAWS: need to have the last one for subject threading */ node = next; } @@ -221,10 +222,12 @@ GNode *procmsg_get_thread_tree(GSList *mlist) * circular reference from a node that has already been threaded by IN-REPLY-TO * but is also in the subject line hash table */ if (prefs_common.thread_by_subject) { - for (node = root->children; node != NULL; ) { - next = node->next; + for (node = last; node && node != NULL;) { + next = node->prev; msginfo = (MsgInfo *) node->data; - parent = subject_table_lookup(subject_table, msginfo->subject); + subject = msginfo->subject + subject_get_reply_prefix_length(msginfo->subject); + parent = subject_table_lookup_clean(subject_table, (gchar *) subject); + /* the node may already be threaded by IN-REPLY-TO, so go up in the tree to find the parent node */ if (parent != NULL) { @@ -232,10 +235,15 @@ GNode *procmsg_get_thread_tree(GSList *mlist) parent = NULL; if (parent == node) parent = NULL; - /* check if the message should be added to this thread */ - if (parent && abs(((MsgInfo *)parent->data)->date_t - msginfo->date_t) > - prefs_common.thread_by_subject_max_age * 3600 * 24) + /* Make new thread parent if too old compared to previous one; probably + * breaks ignoring threads for subject threading. This still isn't + * accurate because the tree isn't sorted by date. */ + if (parent && abs(difftime(msginfo->date_t, ((MsgInfo *)parent->data)->date_t)) > + prefs_common.thread_by_subject_max_age * 3600 * 24) { + subject_table_remove_clean(subject_table, (gchar *) subject); + subject_table_insert_clean(subject_table, (gchar *) subject, node); parent = NULL; + } } if (parent) {