mirror of
https://git.notmuchmail.org/git/notmuch
synced 2024-11-22 02:48:08 +01:00
thread.cc: Avoid empty thread names if possible.
Currently the thread is named based on either the oldest or newest matching message (depending on the search order). If this message has an empty subject, though, the thread will show up with an empty subject in the search results. (See the thread starting with `id:1412371140-21051-1-git-send-email-david@tethera.net` for an example.) This changes the behavior so it will use a non-empty name for the thread if possible. We name threads based on (a) non-empty matches for the query, and (b) the search order. If the search order is oldest-first (as in the default inbox) it chooses the oldest matching non-empty message as the subject. If the search order is newest-first it chooses the newest one.
This commit is contained in:
parent
71fb37d482
commit
67e368ac7b
1 changed files with 10 additions and 4 deletions
|
@ -24,6 +24,8 @@
|
||||||
#include <gmime/gmime.h>
|
#include <gmime/gmime.h>
|
||||||
#include <glib.h> /* GHashTable */
|
#include <glib.h> /* GHashTable */
|
||||||
|
|
||||||
|
#define EMPTY_STRING(s) ((s)[0] == '\0')
|
||||||
|
|
||||||
struct visible _notmuch_thread {
|
struct visible _notmuch_thread {
|
||||||
notmuch_database_t *notmuch;
|
notmuch_database_t *notmuch;
|
||||||
char *thread_id;
|
char *thread_id;
|
||||||
|
@ -332,11 +334,13 @@ _thread_set_subject_from_message (notmuch_thread_t *thread,
|
||||||
cleaned_subject = talloc_strdup (thread, subject);
|
cleaned_subject = talloc_strdup (thread, subject);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (! EMPTY_STRING(cleaned_subject)) {
|
||||||
if (thread->subject)
|
if (thread->subject)
|
||||||
talloc_free (thread->subject);
|
talloc_free (thread->subject);
|
||||||
|
|
||||||
thread->subject = talloc_strdup (thread, cleaned_subject);
|
thread->subject = talloc_strdup (thread, cleaned_subject);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* Add a message to this thread which is known to match the original
|
/* Add a message to this thread which is known to match the original
|
||||||
* search specification. The 'sort' parameter controls whether the
|
* search specification. The 'sort' parameter controls whether the
|
||||||
|
@ -349,8 +353,10 @@ _thread_add_matched_message (notmuch_thread_t *thread,
|
||||||
{
|
{
|
||||||
time_t date;
|
time_t date;
|
||||||
notmuch_message_t *hashed_message;
|
notmuch_message_t *hashed_message;
|
||||||
|
const char *cur_subject;
|
||||||
|
|
||||||
date = notmuch_message_get_date (message);
|
date = notmuch_message_get_date (message);
|
||||||
|
cur_subject = notmuch_thread_get_subject(thread);
|
||||||
|
|
||||||
if (date < thread->oldest || ! thread->matched_messages) {
|
if (date < thread->oldest || ! thread->matched_messages) {
|
||||||
thread->oldest = date;
|
thread->oldest = date;
|
||||||
|
@ -360,7 +366,7 @@ _thread_add_matched_message (notmuch_thread_t *thread,
|
||||||
|
|
||||||
if (date > thread->newest || ! thread->matched_messages) {
|
if (date > thread->newest || ! thread->matched_messages) {
|
||||||
thread->newest = date;
|
thread->newest = date;
|
||||||
if (sort != NOTMUCH_SORT_OLDEST_FIRST)
|
if (sort != NOTMUCH_SORT_OLDEST_FIRST || EMPTY_STRING(cur_subject))
|
||||||
_thread_set_subject_from_message (thread, message);
|
_thread_set_subject_from_message (thread, message);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue