static void mimeview_check_signature(MimeView *mimeview) { MimeInfo *mimeinfo; FILE *fp; g_return_if_fail (mimeview_is_signed(mimeview)); if (!rfc2015_is_available()) return; mimeinfo = mimeview_get_selected_part(mimeview); g_return_if_fail(mimeinfo != NULL); g_return_if_fail(mimeview->messageview->file != NULL); while (mimeinfo->parent) mimeinfo = mimeinfo->parent; if ((fp = g_fopen(mimeview->messageview->file, "rb")) == NULL) { FILE_OP_ERROR(mimeview->messageview->file, "fopen"); return; } rfc2015_check_signature(mimeinfo, fp); fclose(fp); mimeview_update_names(mimeview); mimeview_update_signature_info(mimeview); textview_show_message(mimeview->messageview->textview, mimeinfo, mimeview->messageview->file); }
gint messageview_show(MessageView *messageview, MsgInfo *msginfo, gboolean all_headers) { gchar *file; MimeInfo *mimeinfo; g_return_val_if_fail(msginfo != NULL, -1); mimeinfo = procmime_scan_message(msginfo); if (!mimeinfo) { messageview_change_view_type(messageview, MVIEW_TEXT); textview_show_error(messageview->textview); return -1; } file = procmsg_get_message_file_path(msginfo); if (!file) { g_warning("can't get message file path.\n"); procmime_mimeinfo_free_all(mimeinfo); messageview_change_view_type(messageview, MVIEW_TEXT); textview_show_error(messageview->textview); return -1; } if (messageview->msginfo != msginfo) { procmsg_msginfo_free(messageview->msginfo); messageview->msginfo = procmsg_msginfo_get_full_info(msginfo); if (!messageview->msginfo) messageview->msginfo = procmsg_msginfo_copy(msginfo); } if (messageview->window && msginfo->subject) { gchar *title; title = g_strconcat(msginfo->subject, " - Sylpheed", NULL); gtk_window_set_title(GTK_WINDOW(messageview->window), title); g_free(title); } headerview_show(messageview->headerview, messageview->msginfo); textview_set_all_headers(messageview->textview, all_headers); textview_set_all_headers(messageview->mimeview->textview, all_headers); if (mimeinfo->mime_type != MIME_TEXT && (prefs_common.html_only_as_attach || mimeinfo->mime_type != MIME_TEXT_HTML)) { messageview_change_view_type(messageview, MVIEW_MIME); mimeview_show_message(messageview->mimeview, mimeinfo, file); } else { messageview_change_view_type(messageview, MVIEW_TEXT); textview_show_message(messageview->textview, mimeinfo, file); procmime_mimeinfo_free_all(mimeinfo); } if (messageview->new_window) messageview_set_menu_state(messageview); g_free(file); return 0; }
void mimeview_show_message(MimeView *mimeview, MimeInfo *mimeinfo, const gchar *file) { GtkTreeModel *model = GTK_TREE_MODEL(mimeview->store); GtkTreeIter iter; gboolean valid; mimeview_clear(mimeview); textview_clear(mimeview->messageview->textview); g_return_if_fail(file != NULL); g_return_if_fail(mimeinfo != NULL); #if USE_GPGME if (rfc2015_is_available() && prefs_common.auto_check_signatures) { FILE *fp; if ((fp = g_fopen(file, "rb")) == NULL) { FILE_OP_ERROR(file, "fopen"); return; } rfc2015_check_signature(mimeinfo, fp); fclose(fp); } else set_unchecked_signature(mimeinfo); #endif g_signal_handlers_block_by_func (G_OBJECT(mimeview->selection), G_CALLBACK(mimeview_selection_changed), mimeview); mimeview_set_multipart_tree(mimeview, mimeinfo, NULL); gtk_tree_view_expand_all(GTK_TREE_VIEW(mimeview->treeview)); g_signal_handlers_unblock_by_func (G_OBJECT(mimeview->selection), G_CALLBACK(mimeview_selection_changed), mimeview); /* search first text part */ for (valid = gtk_tree_model_get_iter_first(model, &iter); valid; valid = gtkut_tree_model_next(model, &iter)) { MimeInfo *partinfo; gtk_tree_model_get(model, &iter, COL_MIME_INFO, &partinfo, -1); if (partinfo && (partinfo->mime_type == MIME_TEXT || partinfo->mime_type == MIME_TEXT_HTML)) break; } textview_show_message(mimeview->messageview->textview, mimeinfo, file); if (!valid) valid = gtk_tree_model_get_iter_first(model, &iter); if (valid) { GtkTreePath *path; path = gtk_tree_model_get_path(model, &iter); gtk_tree_view_set_cursor(GTK_TREE_VIEW(mimeview->treeview), path, NULL, FALSE); gtk_tree_path_free(path); if (mimeview_get_selected_part(mimeview)) gtk_widget_grab_focus(mimeview->treeview); } }