2009-05-12 [holger] 3.7.1cvs55
[claws.git] / src / messageview.c
index 4e019e23083ea23072f0ee41f2668ef7e6537157..b4eb09fa7228376905da77be4a599d5bf0e51398 100644 (file)
@@ -1107,12 +1107,35 @@ static MimeInfo *find_encrypted_part(MimeInfo *rootinfo)
        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);
 
@@ -1271,6 +1294,26 @@ gint messageview_show(MessageView *messageview, MsgInfo *msginfo,
                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 || 
@@ -1363,6 +1406,9 @@ gint messageview_show(MessageView *messageview, MsgInfo *msginfo,
                }
        }
 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;