We add a hash to the thread object so that we can detect author names
that have already been added to the list, and avoid adding them
redundantly. This avoids the giant chain of "bugzilla-daemon,
bugzilla-daemon, bugzilla-daemon, bugzilla-daemon, ..." author lists
that we would get otherwise, for example.
notmuch_database_t *notmuch;
char *thread_id;
char *subject;
notmuch_database_t *notmuch;
char *thread_id;
char *subject;
+ GHashTable *authors_hash;
char *authors;
GHashTable *tags;
char *authors;
GHashTable *tags;
static int
_notmuch_thread_destructor (notmuch_thread_t *thread)
{
static int
_notmuch_thread_destructor (notmuch_thread_t *thread)
{
+ g_hash_table_unref (thread->authors_hash);
g_hash_table_unref (thread->tags);
return 0;
}
g_hash_table_unref (thread->tags);
return 0;
}
+static void
+_thread_add_author (notmuch_thread_t *thread,
+ const char *author)
+{
+ if (author == NULL)
+ return;
+
+ if (g_hash_table_lookup_extended (thread->authors_hash,
+ author, NULL, NULL))
+ return;
+
+ g_hash_table_insert (thread->authors_hash, xstrdup (author), NULL);
+
+ if (thread->authors)
+ thread->authors = talloc_asprintf (thread, "%s, %s",
+ thread->authors,
+ author);
+ else
+ thread->authors = talloc_strdup (thread, author);
+}
+
static void
_thread_add_message (notmuch_thread_t *thread,
notmuch_message_t *message)
static void
_thread_add_message (notmuch_thread_t *thread,
notmuch_message_t *message)
mailbox = INTERNET_ADDRESS_MAILBOX (address);
author = internet_address_mailbox_get_addr (mailbox);
}
mailbox = INTERNET_ADDRESS_MAILBOX (address);
author = internet_address_mailbox_get_addr (mailbox);
}
- if (author) {
- if (thread->authors)
- thread->authors = talloc_asprintf (thread, "%s, %s",
- thread->authors,
- author);
- else
- thread->authors = talloc_strdup (thread, author);
- }
+ _thread_add_author (thread, author);
}
g_object_unref (G_OBJECT (list));
}
}
g_object_unref (G_OBJECT (list));
}
thread->notmuch = notmuch;
thread->thread_id = talloc_strdup (thread, thread_id);
thread->subject = NULL;
thread->notmuch = notmuch;
thread->thread_id = talloc_strdup (thread, thread_id);
thread->subject = NULL;
+ thread->authors_hash = g_hash_table_new_full (g_str_hash, g_str_equal,
+ free, NULL);
thread->authors = NULL;
thread->tags = g_hash_table_new_full (g_str_hash, g_str_equal,
free, NULL);
thread->authors = NULL;
thread->tags = g_hash_table_new_full (g_str_hash, g_str_equal,
free, NULL);