workaround a stupid issue in how decoding is performed in mutt *sigh*
[apps/madmutt.git] / lib-mime / mime.cpkg
index 3da646a..c128636 100644 (file)
@@ -53,8 +53,19 @@ const char *BodyEncodings[] = {
 };
 
 rx_t *SpamList = NULL, *NoSpamList = NULL;
+string_list_t *AutoViewList, *AlternativeOrderList, *MimeLookupList;
+string_list_t *Ignore, *UnIgnore, *HeaderOrderList;
 
-@package Mime {
+static char *mailcap_init(void)
+{
+    /* Default search path from RFC1524 */
+    const char *path = "~/.mailcap:" PKGDATADIR "/mailcap:"
+        SYSCONFDIR "/mailcap:/etc/mailcap:"
+        "/usr/etc/mailcap:/usr/local/etc/mailcap";
+    return m_strdup(getenv("MAILCAPS") ?: path);
+}
+
+@package mod_mime {
     /*
      ** .pp
      ** ``$spam_separator'' controls what happens when multiple spam headers
@@ -65,10 +76,28 @@ rx_t *SpamList = NULL, *NoSpamList = NULL;
      */
     string_t spam_separator = m_strdup(",");
 
+    /*
+     ** .pp
+     ** This variable specifies which files to consult when attempting to
+     ** display MIME bodies not directly supported by Madmutt.
+     */
+    string_t mailcap_path   = mailcap_init();
+
+    /*
+     ** .pp
+     ** If \fIset\fP, Madmutt will restrict possible characters in mailcap \fT%\fP expandos
+     ** to a well-defined set of safe characters.  This is the safe setting,
+     ** but we are not sure it doesn't break some more advanced MIME stuff.
+     ** .pp
+     ** \fBDON'T CHANGE THIS SETTING UNLESS YOU ARE REALLY SURE WHAT YOU ARE
+     ** DOING!\fP
+     */
+    bool mailcap_sanitize   = 1;
+
     void spam(rx_t rx, const string_t tpl) {
         rx_set_template(rx, tpl);
-        rx_list_add2(&SpamList, &rx);
         rx_list_remove(&NoSpamList, rx);
+        rx_list_add2(&SpamList, &rx);
         RETURN();
     };
 
@@ -83,6 +112,77 @@ rx_t *SpamList = NULL, *NoSpamList = NULL;
         }
         RETURN();
     };
+
+    void auto_view(string_t s) {
+        string_list_add(&AutoViewList, s);
+        RETURN();
+    };
+    void unauto_view(string_t s) {
+        if (m_strcmp(s, "*")) {
+            string_list_remove(&AutoViewList, s);
+        } else {
+            string_list_wipe(&AutoViewList);
+        }
+        RETURN();
+    };
+
+    void alternative_order(string_t s) {
+        string_list_add(&AlternativeOrderList, s);
+        RETURN();
+    };
+    void unalternative_order(string_t s) {
+        if (m_strcmp(s, "*")) {
+            string_list_remove(&AlternativeOrderList, s);
+        } else {
+            string_list_wipe(&AlternativeOrderList);
+        }
+        RETURN();
+    };
+
+    void lookup(string_t s) {
+        string_list_add(&MimeLookupList, s);
+        RETURN();
+    };
+    void unlookup(string_t s) {
+        if (m_strcmp(s, "*")) {
+            string_list_remove(&MimeLookupList, s);
+        } else {
+            string_list_wipe(&MimeLookupList);
+        }
+        RETURN();
+    };
+
+    void hdr_order(string_t s) {
+        string_list_add(&HeaderOrderList, s);
+        RETURN();
+    };
+    void unhdr_order(string_t s) {
+        if (m_strcmp(s, "*")) {
+            string_list_remove(&HeaderOrderList, s);
+        } else {
+            string_list_wipe(&HeaderOrderList);
+        }
+        RETURN();
+    };
+
+    void ignore(string_t s) {
+        if (m_strcmp(s, "*")) {
+            string_list_remove(&UnIgnore, s);
+        } else {
+            string_list_wipe(&UnIgnore);
+        }
+        string_list_add(&Ignore, s);
+        RETURN();
+    };
+    void unignore(string_t s) {
+        if (m_strcmp(s, "*")) {
+            string_list_add(&UnIgnore, s);
+            string_list_remove(&Ignore, s);
+        } else {
+            string_list_wipe(&Ignore);
+        }
+        RETURN();
+    };
 };
 
 /****************************************************************************/
@@ -188,12 +288,6 @@ void envelope_wipe(ENVELOPE *p)
     p_delete(&p->date);
     p_delete(&p->x_label);
     p_delete(&p->organization);
-#ifdef USE_NNTP
-    p_delete(&p->newsgroups);
-    p_delete(&p->xref);
-    p_delete(&p->followup_to);
-    p_delete(&p->x_comment_to);
-#endif
 
     mutt_buffer_free (&p->spam);
     string_list_wipe(&p->references);
@@ -234,7 +328,6 @@ void header_wipe(HEADER *h)
     p_delete(&h->maildir_flags);
     p_delete(&h->tree);
     p_delete(&h->path);
-    string_list_wipe(&h->chain);
     p_delete(&h->data);
 }