/** * Menu callback: Save all attached files * \param mimeview Current display */ static void mimeview_save_all(MimeView *mimeview) { MimeInfo *partinfo; gchar *dirname; gchar *startdir = NULL; gint number = 1; if (!mimeview->opened) return; if (!mimeview->file) return; if (!mimeview->mimeinfo) return; partinfo = mimeview->mimeinfo; if (prefs_common.attach_save_dir) startdir = g_strconcat(prefs_common.attach_save_dir, G_DIR_SEPARATOR_S, NULL); dirname = filesel_select_file(_("Select destination folder"), startdir); if (!dirname) { if (startdir) g_free(startdir); return; } if (!is_dir_exist (dirname)) { alertpanel_error(_("`%s' is not a directory."), dirname); if (startdir) g_free(startdir); return; } if (dirname[strlen(dirname)-1] == G_DIR_SEPARATOR) dirname[strlen(dirname)-1] = '\0'; /* Skip the first part, that is sometimes DISPOSITIONTYPE_UNKNOWN */ if (partinfo && partinfo->type == MIMETYPE_MESSAGE) partinfo = procmime_mimeinfo_next(partinfo); if (partinfo && partinfo->type == MIMETYPE_MULTIPART) { partinfo = procmime_mimeinfo_next(partinfo); if (partinfo && partinfo->type == MIMETYPE_TEXT) partinfo = procmime_mimeinfo_next(partinfo); } while (partinfo != NULL) { if (partinfo->type != MIMETYPE_MESSAGE && partinfo->type != MIMETYPE_MULTIPART && partinfo->disposition != DISPOSITIONTYPE_INLINE) { gchar *filename = mimeview_get_filename_for_part (partinfo, dirname, number++); mimeview_write_part(filename, partinfo); g_free(filename); } partinfo = procmime_mimeinfo_next(partinfo); } if (prefs_common.attach_save_dir) g_free(prefs_common.attach_save_dir); prefs_common.attach_save_dir = g_strdup(dirname); if (startdir) g_free(startdir); }
static void messageview_show_cb(GObject *obj, gpointer msgview, MsgInfo *msginfo, gboolean all_headers) { MessageView *messageview = NULL; MimeInfo *mimeinfo, *partial; FILE *msg_file, *input = NULL; gchar *html_buf = NULL; size_t n_size; #if defined(USE_WEBKITGTK) WebKitWebSettings *settings = NULL; #elif defined(USE_GTKHTML) #else #error "Not Implemented" #endif SYLPF_START_FUNC; g_return_if_fail(msgview != NULL); messageview = (MessageView*)msgview; g_return_if_fail(messageview != NULL); SYLPF_OPTION.is_show_attach_tab = SYLPF_GET_RC_SHOW_ATTACH_TAB; if (SYLPF_OPTION.is_show_attach_tab == 0) { gtk_notebook_set_current_page(GTK_NOTEBOOK(messageview->notebook), 0); SYLPF_RETURN; } if (SYLPF_OPTION.html_view == NULL) { #if defined(USE_WEBKITGTK) SYLPF_OPTION.html_view = (WebKitWebView*)create_htmlview(GTK_NOTEBOOK(messageview->notebook)); #elif defined(USE_GTKHTML) SYLPF_OPTION.html_view = create_htmlview(GTK_NOTEBOOK(messageview->notebook)); #endif } mimeinfo = procmime_scan_message(msginfo); msg_file = procmsg_open_message(msginfo); partial = mimeinfo; while (partial && partial->mime_type != MIME_TEXT_HTML) { partial = procmime_mimeinfo_next(partial); } if (partial && partial->mime_type == MIME_TEXT_HTML) { partial->mime_type = MIME_TEXT; input = procmime_get_text_content(partial, msg_file, NULL); html_buf = calloc(partial->size+1, 1); n_size = fread(html_buf, partial->size, 1, input); #if defined(USE_WEBKITGTK) settings = webkit_web_view_get_settings(SYLPF_OPTION.html_view); g_object_set(G_OBJECT(settings), ENABLE_IMAGES, SYLPF_OPTION.image_flag, NULL); g_object_set(G_OBJECT(settings), ENABLE_SCRIPTS, SYLPF_OPTION.script_flag, NULL); g_object_set(G_OBJECT(settings), ENABLE_PRIVATE_BROWSING, SYLPF_OPTION.private_flag, NULL); g_object_set(G_OBJECT(settings), DEFAULT_FONT_SIZE, SYLPF_OPTION.font_size, NULL); webkit_web_view_set_settings(SYLPF_OPTION.html_view, settings); webkit_web_view_load_string(SYLPF_OPTION.html_view, html_buf, NULL, NULL, ""); #elif defined(USE_GTKHTML) gtk_html_load_from_string(GTK_HTML(SYLPF_OPTION.html_view), html_buf, -1); #endif if (SYLPF_OPTION.switch_tab_flag != FALSE) { gtk_notebook_set_current_page(GTK_NOTEBOOK(messageview->notebook), 2); } fclose(input); free(html_buf); } else { gtk_notebook_set_current_page(GTK_NOTEBOOK(messageview->notebook), 0); } SYLPF_END_FUNC; }