<<< Date Index >>>     <<< Thread Index >>>

Re: [PATCH] RFC 2369 support for list-reply



On 2004-07-18 20:06:51 +0200, Hugo Haas wrote:

> Thanks. Attached is v3 which is v2 plus LIST-POST added to
> want_headers.

Here's an alternative approach which reuses the existing mailto URL
parsing code.  Thoughts?

-- 
Thomas Roessler · Personal soap box at <http://log.does-not-exist.org/>.
Index: mutt.h
===================================================================
RCS file: /cvs/mutt/mutt/mutt.h,v
retrieving revision 3.33
diff -u -r3.33 mutt.h
--- mutt.h      15 Jul 2004 08:08:32 -0000      3.33
+++ mutt.h      19 Jul 2004 22:35:29 -0000
@@ -567,6 +567,7 @@
   ADDRESS *sender;
   ADDRESS *reply_to;
   ADDRESS *mail_followup_to;
+  char *list_post;             /* this stores a mailto URL, or nothing */
   char *subject;
   char *real_subj;             /* offset of the real subject */
   char *message_id;
Index: parse.c
===================================================================
RCS file: /cvs/mutt/mutt/parse.c,v
retrieving revision 3.12
diff -u -r3.12 parse.c
--- parse.c     14 Jul 2004 04:16:58 -0000      3.12
+++ parse.c     19 Jul 2004 22:35:30 -0000
@@ -23,6 +23,7 @@
 #include "rfc2047.h"
 #include "rfc2231.h"
 #include "mutt_crypt.h"
+#include "url.h"
 
 #include <string.h>
 #include <ctype.h>
@@ -1064,6 +1065,29 @@
          hdr->lines = 0;
       }
 
+      matched = 1;
+    }
+    else if (!ascii_strcasecmp (line + 1, "ist-Post"))
+    {
+      /* RFC 2369.  FIXME: We should ignore whitespace, but don't. */
+      if (strncmp (p, "NO", 2))
+      {
+       char *beg, *end;
+       for (beg = strchr (p, '<'); beg; beg = strchr (end, ','))
+       {
+         ++beg;
+         if (!(end = strchr (beg, '>')))
+           break;
+         
+         /* Take the first mailto URL */
+         if (url_check_scheme (beg) == U_MAILTO)
+         {
+           FREE (&e->list_post);
+           e->list_post = mutt_substrdup (beg, end);
+           break;
+         }
+       }
+      }
       matched = 1;
     }
     break;
Index: send.c
===================================================================
RCS file: /cvs/mutt/mutt/send.c,v
retrieving revision 3.33
diff -u -r3.33 send.c
--- send.c      14 Jul 2004 04:36:27 -0000      3.33
+++ send.c      19 Jul 2004 22:35:31 -0000
@@ -26,6 +26,7 @@
 #include "mx.h"
 #include "mutt_crypt.h"
 #include "mutt_idna.h"
+#include "url.h"
 
 #include <ctype.h>
 #include <stdlib.h>
@@ -592,20 +593,23 @@
 
   /* set the default subject for the message. */
   mutt_make_string (buffer, sizeof (buffer), NONULL(ForwFmt), ctx, cur);
-  env->subject = safe_strdup (buffer);
+  mutt_str_replace (&env->subject, buffer);
 }
 
 void mutt_make_misc_reply_headers (ENVELOPE *env, CONTEXT *ctx,
                                    HEADER *cur, ENVELOPE *curenv)
 {
+  /* This takes precedence over a subject that might have
+   * been taken from a List-Post header.  Is that correct?
+   */
   if (curenv->real_subj)
   {
+    FREE (&env->subject);
     env->subject = safe_malloc (mutt_strlen (curenv->real_subj) + 5);
     sprintf (env->subject, "Re: %s", curenv->real_subj);       /* 
__SPRINTF_CHECKED__ */
   }
-  else
+  else if (!env->subject)
     env->subject = safe_strdup ("Re: your mail");
-  
 }
 
 void mutt_add_to_reference_headers (ENVELOPE *env, ENVELOPE *curenv, LIST 
***pp, LIST ***qq)
@@ -1098,6 +1102,16 @@
       msg->env = mutt_new_envelope ();
   }
 
+  /* Parse and use an eventual list-post header */
+  if ((flags & SENDLISTREPLY) 
+      && cur && cur->env && cur->env->list_post) 
+  {
+    /* Use any list-post header as a template */
+    url_parse_mailto (msg->env, NULL, cur->env->list_post);
+    /* We don't let them set the sender's address. */
+    rfc822_free_address (&msg->env->from);
+  }
+  
   if (! (flags & (SENDKEY | SENDPOSTPONED | SENDRESEND)))
   {
     pbody = mutt_new_body ();
Index: url.c
===================================================================
RCS file: /cvs/mutt/mutt/url.c,v
retrieving revision 3.4
diff -u -r3.4 url.c
--- url.c       24 Jul 2003 18:40:50 -0000      3.4
+++ url.c       19 Jul 2004 22:35:31 -0000
@@ -235,7 +235,10 @@
     url_pct_decode (value);
 
     if (!ascii_strcasecmp (tag, "body"))
-      mutt_str_replace (body, value);
+    {
+      if (body)
+       mutt_str_replace (body, value);
+    }
     else 
     {
       taglen = strlen (tag);
Index: imap/message.c
===================================================================
RCS file: /cvs/mutt/mutt/imap/message.c,v
retrieving revision 3.7
diff -u -r3.7 message.c
--- imap/message.c      19 Jul 2004 21:44:23 -0000      3.7
+++ imap/message.c      19 Jul 2004 22:35:31 -0000
@@ -55,7 +55,7 @@
   IMAP_HEADER h;
   int rc, mfhrc, oldmsgcount;
   int fetchlast = 0;
-  const char *want_headers = "DATE FROM SUBJECT TO CC MESSAGE-ID REFERENCES 
CONTENT-TYPE CONTENT-DESCRIPTION IN-REPLY-TO REPLY-TO LINES X-LABEL";
+  const char *want_headers = "DATE FROM SUBJECT TO CC MESSAGE-ID REFERENCES 
CONTENT-TYPE CONTENT-DESCRIPTION IN-REPLY-TO REPLY-TO LINES LIST-POST X-LABEL";
 
   ctx = idata->ctx;
 

Attachment: pgpHJo0rjhyCo.pgp
Description: PGP signature