Chmage suffix of unnamed attachments.
authorWerner Koch <wk@gnupg.org>
Thu, 26 Feb 2009 16:55:47 +0000 (16:55 +0000)
committerWerner Koch <wk@gnupg.org>
Thu, 26 Feb 2009 16:55:47 +0000 (16:55 +0000)
NEWS
src/ChangeLog
src/mimeparser.c

diff --git a/NEWS b/NEWS
index 66c3461..5b97559 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -3,6 +3,9 @@ Noteworthy changes for version 0.10.19
 
  * Save the crypto settings in a message draft.
 
 
  * Save the crypto settings in a message draft.
 
+ * Unnamed attachments are now shown with a suffix matching its MIME
+   type.
+
 
 Noteworthy changes for version 0.10.18 (2009-01-28)
 ===================================================
 
 Noteworthy changes for version 0.10.18 (2009-01-28)
 ===================================================
index 043eda6..73dc61b 100644 (file)
@@ -1,5 +1,8 @@
 2009-02-26  Werner Koch  <wk@g10code.com>
 
 2009-02-26  Werner Koch  <wk@g10code.com>
 
+       * mimeparser.c (start_attachment): Try to figure out a good file
+       name suffix for the FILENAME property.
+
        * ext-commands.cpp (InstallCommands): Disable decrypt button for
        non GpgOl messages.
 
        * ext-commands.cpp (InstallCommands): Disable decrypt button for
        non GpgOl messages.
 
index db0e292..659323a 100644 (file)
@@ -1,5 +1,5 @@
 /* mimeparser.c - Parse multipart MIME message
 /* mimeparser.c - Parse multipart MIME message
- *     Copyright (C) 2005, 2007, 2008 g10 Code GmbH
+ *     Copyright (C) 2005, 2007, 2008, 2009 g10 Code GmbH
  *
  * This file is part of GpgOL.
  * 
  *
  * This file is part of GpgOL.
  * 
@@ -361,7 +361,13 @@ start_attachment (mime_context_t ctx, int is_body)
 
   /* We need to insert a short filename .  Without it, the _displayed_
      list of attachments won't get updated although the attachment has
 
   /* We need to insert a short filename .  Without it, the _displayed_
      list of attachments won't get updated although the attachment has
-     been created. */
+     been created.  If we know the content type we use an appropriate
+     suffix for the filename.  This is useful so that if no filename
+     is known for the attachment (to be stored in
+     PR_ATTACH_LONG_FILENAME), Outlooks gets an idea about the content
+     of the attachment from this made up filename.  This allows for
+     example to click on the attachment and open it with an
+     appropriate application.  */
   prop.ulPropTag = PR_ATTACH_FILENAME_A;
   {
     char buf[100];
   prop.ulPropTag = PR_ATTACH_FILENAME_A;
   {
     char buf[100];
@@ -370,7 +376,36 @@ start_attachment (mime_context_t ctx, int is_body)
       prop.Value.lpszA = is_body == 2? "gpgol000.htm":"gpgol000.txt";
     else
       {
       prop.Value.lpszA = is_body == 2? "gpgol000.htm":"gpgol000.txt";
     else
       {
-        snprintf (buf, 100, "gpgol%03d.dat", ctx->part_counter);
+        static struct {
+          const char *suffix;
+          const char *ct;
+        } suffix_table[] = {
+          { "doc", "application/msword" },
+          { "eml", "message/rfc822" },
+          { "htm", "text/html" },
+          { "jpg", "image/jpeg" },
+          { "pdf", "application/pdf" },
+          { "png", "image/png" },
+          { "pps", "application/vnd.ms-powerpoint" },
+          { "ppt", "application/vnd.ms-powerpoint" },
+          { "ps",  "application/postscript" },
+          { NULL, NULL }
+        };
+        const char *suffix = "dat";  /* Default.  */
+        int idx;
+        
+        if (ctx->mimestruct_cur && ctx->mimestruct_cur->content_type)
+          {
+            for (idx=0; suffix_table[idx].ct; idx++)
+              if (!strcmp (ctx->mimestruct_cur->content_type,
+                           suffix_table[idx].ct))
+                {
+                  suffix = suffix_table[idx].suffix;
+                  break;
+                }
+          }
+
+        snprintf (buf, 100, "gpgol%03d.%s", ctx->part_counter, suffix);
         prop.Value.lpszA = buf;
       }
     hr = HrSetOneProp ((LPMAPIPROP)newatt, &prop);
         prop.Value.lpszA = buf;
       }
     hr = HrSetOneProp ((LPMAPIPROP)newatt, &prop);