From be72bf30703c5df814d4f572c3d9132d39700b36 Mon Sep 17 00:00:00 2001
From: Carl Worth <cworth@cworth.org>
Date: Wed, 14 Oct 2009 13:30:33 -0700
Subject: [PATCH] Use gmime's own reference-parsing code.

Here's another instance where I "knew" gmime must have support for
some functionality, but not finding it, I rolled my own. Now that
I found g_mime_references_decode I'm glad to drop my ugly code.
---
 notmuch-index-message.cc | 30 +++++++++++-------------------
 1 file changed, 11 insertions(+), 19 deletions(-)

diff --git a/notmuch-index-message.cc b/notmuch-index-message.cc
index f7ea340f..1922dd37 100644
--- a/notmuch-index-message.cc
+++ b/notmuch-index-message.cc
@@ -307,30 +307,22 @@ find_thread_id (Xapian::Database db,
  * message. */
 static void
 parse_references (GPtrArray *array,
-		  const char *refs)
+		  const char *refs_str)
 {
-    const char *end, *next;
+    GMimeReferences *refs, *r;
+    const char *message_id;
 
-    if (refs == NULL)
+    if (refs_str == NULL)
 	return;
 
-    while (*refs) {
-	while (*refs && isspace (*refs))
-	    refs++;
-	if (*refs == '<')
-	    refs++;
-	end = refs;
-	while (*end && !isspace (*end))
-	    end++;
-	next = end;
-	end--;
-	if (end > refs && *end == '>')
-	    end--;
-	if (end > refs) {
-	    g_ptr_array_add (array, g_strndup (refs, end - refs + 1));
-	}
-	refs = next;
+    refs = g_mime_references_decode (refs_str);
+
+    for (r = refs; r; r = r->next) {
+	message_id = g_mime_references_get_message_id (r);
+	g_ptr_array_add (array, g_strdup (message_id));
     }
+
+    g_mime_references_free (refs);
 }
 
 /* Given a string representing the body of a message, generate terms
-- 
2.45.2