]> git.notmuchmail.org Git - notmuch/blobdiff - message-file.c
notmuch.el: Preserve current thread when refreshing search results.
[notmuch] / message-file.c
index e8e2843e225be9b3f45a0dcd823d72446e6635a8..75caba6d8b055e5c3b57b2d72d1926381ff11fc8 100644 (file)
@@ -22,6 +22,8 @@
 
 #include "notmuch-private.h"
 
+#include <gmime/gmime.h>
+
 #include <glib.h> /* GHashTable */
 
 typedef struct {
@@ -213,9 +215,15 @@ notmuch_message_file_get_header (notmuch_message_file_t *message,
                                 const char *header_desired)
 {
     int contains;
-    char *header, *value;
+    char *header, *decoded_value;
     const char *s, *colon;
     int match;
+    static int initialized = 0;
+
+    if (! initialized) {
+       g_mime_init (0);
+       initialized = 1;
+    }
 
     message->parsing_started = 1;
 
@@ -224,10 +232,10 @@ notmuch_message_file_get_header (notmuch_message_file_t *message,
     else
        contains = g_hash_table_lookup_extended (message->headers,
                                                 header_desired, NULL,
-                                                (gpointer *) &value);
+                                                (gpointer *) &decoded_value);
 
-    if (contains && value)
-       return value;
+    if (contains && decoded_value)
+       return decoded_value;
 
     if (message->parsing_finished)
        return NULL;
@@ -309,12 +317,12 @@ notmuch_message_file_get_header (notmuch_message_file_t *message,
        else
            match = (strcasecmp (header, header_desired) == 0);
 
-       value = xstrdup (message->value.str);
+       decoded_value = g_mime_utils_header_decode_text (message->value.str);
 
-       g_hash_table_insert (message->headers, header, value);
+       g_hash_table_insert (message->headers, header, decoded_value);
 
        if (match)
-           return value;
+           return decoded_value;
     }
 
     if (message->line)
@@ -342,40 +350,3 @@ notmuch_message_file_get_header (notmuch_message_file_t *message,
 
     return NULL;
 }
-
-static size_t
-_notmuch_message_file_get_header_size (notmuch_message_file_t *message)
-{
-    if (! message->parsing_finished)
-       notmuch_message_file_get_header (message, NULL);
-
-    if (! message->parsing_finished)
-       INTERNAL_ERROR ("Parsing for NULL header did not force parsing to finish.\n");
-
-    return message->header_size;
-}
-
-const char *
-notmuch_message_file_get_all_headers (notmuch_message_file_t *message)
-{
-    char *headers = NULL;
-    size_t header_size = _notmuch_message_file_get_header_size (message);
-
-    if (header_size == 0)
-       return "";
-
-    headers = talloc_size (message, header_size + 1);
-    if (unlikely (headers == NULL))
-       return NULL;
-
-    rewind (message->file);
-    if (fread (headers, 1, header_size, message->file) != header_size) {
-       fprintf (stderr, "Error: Short read occurred trying to read message header.\n");
-       talloc_free (headers);
-       return NULL;
-    }
-
-    headers[header_size] = '\0';
-
-    return headers;
-}