Use gmime's own reference-parsing code.
authorCarl Worth <cworth@cworth.org>
Wed, 14 Oct 2009 20:30:33 +0000 (13:30 -0700)
committerCarl Worth <cworth@cworth.org>
Wed, 14 Oct 2009 20:30:33 +0000 (13:30 -0700)
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

index f7ea340f977329d5da7354a2a613ec5766259720..1922dd373856a32efb8c0f6f0ac4c857554da4ca 100644 (file)
@@ -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