2007-02-20 [colin] 2.7.2cvs58
[claws.git] / src / mimeview.c
index d0c4cadb07dae822c140343db4d4c918b39f2e7f..8b2df7b58d4b6402ad1ad9dd2ccfde3faa9ed9c5 100644 (file)
@@ -85,7 +85,7 @@ static void mimeview_show_message_part                (MimeView       *mimeview,
                                                 MimeInfo       *partinfo);
 static void mimeview_change_view_type          (MimeView       *mimeview,
                                                 MimeViewType    type);
-gchar *mimeview_get_filename_for_part          (MimeInfo       *partinfo,
+static gchar *mimeview_get_filename_for_part           (MimeInfo       *partinfo,
                                                 const gchar    *basedir,
                                                 gint            number);
 static gboolean mimeview_write_part            (const gchar    *filename,
@@ -1331,6 +1331,7 @@ static void mimeview_drag_data_get(GtkWidget          *widget,
 {
        gchar *filename = NULL, *uriname, *tmp;
        MimeInfo *partinfo;
+       gint err;
 
        if (!mimeview->opened) return;
        if (!mimeview->file) return;
@@ -1382,9 +1383,11 @@ static void mimeview_drag_data_get(GtkWidget         *widget,
 
        g_free(tmp);
 
-       if (procmime_get_part(filename, partinfo) < 0)
+       if ((err = procmime_get_part(filename, partinfo)) < 0)
                alertpanel_error
-                       (_("Couldn't save the part of multipart message."));
+                       (_("Couldn't save the part of multipart message: %s"), 
+                               strerror(-err));
+
        uriname = g_strconcat("file://", filename, "\r\n", NULL);
 
        gtk_selection_data_set(selection_data, selection_data->target, 8,
@@ -1400,7 +1403,7 @@ static void mimeview_drag_data_get(GtkWidget          *widget,
  * \param basedir The target directory
  * \param number Used for dummy filename if attachment is unnamed
  */
-gchar *mimeview_get_filename_for_part(MimeInfo *partinfo,
+static gchar *mimeview_get_filename_for_part(MimeInfo *partinfo,
                                      const gchar *basedir,
                                      gint number)
 {
@@ -1438,7 +1441,8 @@ static gboolean mimeview_write_part(const gchar *filename,
                                    MimeInfo *partinfo)
 {
        gchar *dir;
-       
+       gint err;
+
        dir= g_path_get_dirname(filename);
        if (!is_dir_exist(dir))
                make_dir_hier(dir);
@@ -1463,9 +1467,10 @@ static gboolean mimeview_write_part(const gchar *filename,
                if (G_ALERTALTERNATE != aval) return FALSE;
        }
 
-       if (procmime_get_part(filename, partinfo) < 0) {
+       if ((err = procmime_get_part(filename, partinfo)) < 0) {
                alertpanel_error
-                       (_("Couldn't save the part of multipart message."));
+                       (_("Couldn't save the part of multipart message: %s"), 
+                               strerror(-err));
                return FALSE;
        }
 
@@ -1488,9 +1493,11 @@ static void mimeview_save_all(MimeView *mimeview)
        if (!mimeview->mimeinfo) return;
 
        partinfo = mimeview->mimeinfo;
-       if (prefs_common.attach_save_dir)
+       if (prefs_common.attach_save_dir && *prefs_common.attach_save_dir)
                startdir = g_strconcat(prefs_common.attach_save_dir,
                                       G_DIR_SEPARATOR_S, NULL);
+       else
+               startdir = g_strdup(get_home_dir());
 
        dirname = filesel_select_file_save_folder(_("Select destination folder"), startdir);
        if (!dirname) {
@@ -1629,6 +1636,7 @@ static void mimeview_display_as_text(MimeView *mimeview)
 static void mimeview_launch(MimeView *mimeview, MimeInfo *partinfo)
 {
        gchar *filename;
+       gint err;
 
        if (!mimeview->opened) return;
        if (!mimeview->file) return;
@@ -1640,9 +1648,10 @@ static void mimeview_launch(MimeView *mimeview, MimeInfo *partinfo)
 
        filename = procmime_get_tmp_file_name(partinfo);
 
-       if (procmime_get_part(filename, partinfo) < 0)
+       if ((err = procmime_get_part(filename, partinfo)) < 0)
                alertpanel_error
-                       (_("Couldn't save the part of multipart message."));
+                       (_("Couldn't save the part of multipart message: %s"), 
+                               strerror(-err));
        else
                mimeview_view_file(filename, partinfo, NULL, mimeview);
 
@@ -1668,14 +1677,15 @@ static void mimeview_open_part_with(MimeView *mimeview, MimeInfo *partinfo, gboo
        gchar *cmd;
        gchar *mime_command = NULL;
        gchar *content_type = NULL;
-
+       gint err;
        g_return_if_fail(partinfo != NULL);
 
        filename = procmime_get_tmp_file_name(partinfo);
 
-       if (procmime_get_part(filename, partinfo) < 0) {
+       if ((err = procmime_get_part(filename, partinfo)) < 0) {
                alertpanel_error
-                       (_("Couldn't save the part of multipart message."));
+                       (_("Couldn't save the part of multipart message: %s"), 
+                               strerror(-err));
                g_free(filename);
                return;
        }
@@ -1991,6 +2001,8 @@ static void icon_list_append_icon (MimeView *mimeview, MimeInfo *mimeinfo)
                        stockp = STOCK_PIXMAP_MIME_TEXT_HTML;
                else if  (mimeinfo->subtype && !g_ascii_strcasecmp(mimeinfo->subtype, "enriched"))
                        stockp = STOCK_PIXMAP_MIME_TEXT_ENRICHED;
+               else if  (mimeinfo->subtype && !g_ascii_strcasecmp(mimeinfo->subtype, "calendar"))
+                       stockp = STOCK_PIXMAP_MIME_TEXT_CALENDAR;
                else
                        stockp = STOCK_PIXMAP_MIME_TEXT_PLAIN;
                break;
@@ -1998,7 +2010,14 @@ static void icon_list_append_icon (MimeView *mimeview, MimeInfo *mimeinfo)
                stockp = STOCK_PIXMAP_MIME_MESSAGE;
                break;
        case MIMETYPE_APPLICATION:
-               stockp = STOCK_PIXMAP_MIME_APPLICATION;
+               if (mimeinfo->subtype && !g_ascii_strcasecmp(mimeinfo->subtype, "pgp-signature"))
+                       stockp = STOCK_PIXMAP_MIME_PGP_SIG;
+               else if (mimeinfo->subtype && !g_ascii_strcasecmp(mimeinfo->subtype, "pdf"))
+                       stockp = STOCK_PIXMAP_MIME_PDF;
+               else if  (mimeinfo->subtype && !g_ascii_strcasecmp(mimeinfo->subtype, "postscript"))
+                       stockp = STOCK_PIXMAP_MIME_PS;
+               else
+                       stockp = STOCK_PIXMAP_MIME_APPLICATION;
                break;
        case MIMETYPE_IMAGE:
                stockp = STOCK_PIXMAP_MIME_IMAGE;