]> git.notmuchmail.org Git - notmuch/blobdiff - message-file.c
notmuch.el: Implement visual feedback for add/remove tags.
[notmuch] / message-file.c
index e8e2843e225be9b3f45a0dcd823d72446e6635a8..0cb85d84a9c6c86d8d9fde1a2856f9beac293821 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)
@@ -343,8 +351,8 @@ 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)
+size_t
+notmuch_message_file_get_header_size (notmuch_message_file_t *message)
 {
     if (! message->parsing_finished)
        notmuch_message_file_get_header (message, NULL);
@@ -359,7 +367,7 @@ 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);
+    size_t header_size = notmuch_message_file_get_header_size (message);
 
     if (header_size == 0)
        return "";