More things to the Mime package.
[apps/madmutt.git] / lib-mime / mime.cpkg
index 1e97613..1340ad4 100644 (file)
@@ -53,6 +53,16 @@ const char *BodyEncodings[] = {
 };
 
 rx_t *SpamList = NULL, *NoSpamList = NULL;
+string_list_t *AutoViewList, *AlternativeOrderList, *MimeLookupList;
+
+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 Mime {
     /*
@@ -65,9 +75,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_append(&SpamList, rx);
+        rx_list_remove(&NoSpamList, rx);
+        rx_list_add2(&SpamList, &rx);
         RETURN();
     };
 
@@ -77,7 +106,47 @@ rx_t *SpamList = NULL, *NoSpamList = NULL;
             rx_list_wipe(&NoSpamList);
             rx_delete(&rx);
         } else {
-            rx_list_append(&NoSpamList, rx);
+            rx_list_remove(&SpamList, rx);
+            rx_list_add2(&NoSpamList, &rx);
+        }
+        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();
     };