]> git.notmuchmail.org Git - notmuch/blobdiff - database.cc
notmuch: Ignore files that don't look like email messages.
[notmuch] / database.cc
index 7ea1f4168fb42bea820e147a0bfed14654258364..70f80f9fccf257ebf7d27cf7d1b154afc1e02f70 100644 (file)
@@ -24,7 +24,7 @@
 
 #include <xapian.h>
 
-#include <glib.h>
+#include <glib.h> /* g_strdup_printf, g_free, GHashTable */
 
 using namespace std;
 
@@ -479,6 +479,7 @@ notmuch_database_add_message (notmuch_database_t *notmuch,
     GPtrArray *parents, *thread_ids;
 
     const char *refs, *in_reply_to, *date, *header;
+    const char *from, *to, *subject;
     char *message_id;
 
     time_t time_value;
@@ -486,6 +487,15 @@ notmuch_database_add_message (notmuch_database_t *notmuch,
 
     message = notmuch_message_open (filename);
 
+    notmuch_message_restrict_headers (message,
+                                     "date",
+                                     "from",
+                                     "in-reply-to",
+                                     "message-id",
+                                     "references",
+                                     "subject",
+                                     (char *) NULL);
+
     try {
        doc = Xapian::Document ();
 
@@ -554,15 +564,25 @@ notmuch_database_add_message (notmuch_database_t *notmuch,
 
        free (message_id);
 
-/*
        date = notmuch_message_get_header (message, "date");
        time_value = notmuch_parse_date (date, NULL);
 
        doc.add_value (NOTMUCH_VALUE_DATE,
                       Xapian::sortable_serialise (time_value));
-*/
 
-       db->add_document (doc);
+       from = notmuch_message_get_header (message, "from");
+       subject = notmuch_message_get_header (message, "subject");
+       to = notmuch_message_get_header (message, "to");
+
+       if (from == NULL &&
+           subject == NULL &&
+           to == NULL)
+       {
+           notmuch_message_close (message);
+           return NOTMUCH_STATUS_FILE_NOT_EMAIL;
+       } else {
+           db->add_document (doc);
+       }
     } catch (const Xapian::Error &error) {
        fprintf (stderr, "A Xapian exception occurred: %s.\n",
                 error.get_msg().c_str());