return encinfo;
}
+static gboolean find_broken_func(GNode *node, gpointer data)
+{
+ MimeInfo *mimeinfo = (MimeInfo *) node->data;
+ MimeInfo **brokeninfo = (MimeInfo **) data;
+
+ if (mimeinfo->broken) {
+ *brokeninfo = mimeinfo;
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+static MimeInfo *find_broken_part(MimeInfo *rootinfo)
+{
+ MimeInfo *brokeninfo = NULL;
+
+ g_node_traverse(rootinfo->node, G_IN_ORDER, G_TRAVERSE_ALL, -1,
+ find_broken_func, &brokeninfo);
+
+ return brokeninfo;
+}
+
gint messageview_show(MessageView *messageview, MsgInfo *msginfo,
gboolean all_headers)
{
gchar *text = NULL;
gchar *file;
- MimeInfo *mimeinfo, *encinfo;
+ MimeInfo *mimeinfo, *encinfo, *brokeninfo;
gchar *subject = NULL;
cm_return_val_if_fail(msginfo != NULL, -1);
return_receipt_show(messageview->noticeview,
messageview->msginfo);
+ if ((brokeninfo = find_broken_part(mimeinfo)) != NULL) {
+ noticeview_set_icon(messageview->noticeview,
+ STOCK_PIXMAP_NOTICE_WARN);
+ if (!noticeview_is_visible(messageview->noticeview)) {
+ noticeview_set_text(messageview->noticeview, _("Message doesn't conform to MIME standard. "
+ "It may render wrongly."));
+ gtk_widget_hide(messageview->noticeview->button);
+ gtk_widget_hide(messageview->noticeview->button2);
+ } else {
+ gchar *full = g_strconcat(
+ gtk_label_get_text(GTK_LABEL(messageview->noticeview->text)),
+ "\n",
+ _("Message doesn't conform to MIME standard. "
+ "It may render wrongly."), NULL);
+ noticeview_set_text(messageview->noticeview, full);
+ g_free(full);
+ }
+ noticeview_show(messageview->noticeview);
+ }
+
mimeinfo = procmime_mimeinfo_next(mimeinfo);
if (!all_headers && mimeinfo
&& (mimeinfo->type != MIMETYPE_TEXT ||
}
}
done:
+ /* plugins may hook in here to work with the message view */
+ hooks_invoke(MESSAGE_VIEW_SHOW_DONE_HOOKLIST, messageview);
+
g_free(file);
return 0;