[evolution/webkit: 70/105] Port EMsgComposer to the EMailPrinter



commit 7efd8672e308b869ea31805ab2ebb01d090a0f24
Author: Dan VrÃtil <dvratil redhat com>
Date:   Wed Nov 30 17:25:16 2011 +0100

    Port EMsgComposer to the EMailPrinter
    
    This works perfectly, but could use some polishing. On the other hand it's just
    a temporary solution until the composer is ported to WebKit as well...

 em-format/em-format.c    |    7 ++++++-
 mail/e-mail-printer.c    |    3 +++
 mail/em-composer-utils.c |   43 +++++++++++++++++++++++++++++++++++++++----
 3 files changed, 48 insertions(+), 5 deletions(-)
---
diff --git a/em-format/em-format.c b/em-format/em-format.c
index a036b28..1890fb3 100644
--- a/em-format/em-format.c
+++ b/em-format/em-format.c
@@ -2341,15 +2341,20 @@ em_format_build_mail_uri (CamelFolder *folder,
 	gchar *uri, *tmp;
 	va_list ap;
 	const gchar *name;
+        const gchar *service_uid;
 	char separator;
 
 	g_return_val_if_fail (CAMEL_IS_FOLDER (folder), NULL);
 	g_return_val_if_fail (message_uid && *message_uid, NULL);
 
 	store = camel_folder_get_parent_store (folder);
+        if (store)
+                service_uid = camel_service_get_uid (CAMEL_SERVICE (store));
+        else
+                service_uid = "generic";
 
 	tmp = g_strdup_printf ("mail://%s/%s/%s",
-			camel_service_get_uid (CAMEL_SERVICE (store)),
+			service_uid,
 			camel_folder_get_full_name (folder),
 			message_uid);
 
diff --git a/mail/e-mail-printer.c b/mail/e-mail-printer.c
index 45ed25f..b732fa3 100644
--- a/mail/e-mail-printer.c
+++ b/mail/e-mail-printer.c
@@ -531,6 +531,9 @@ emp_set_formatter (EMailPrinter *emp,
 		G_TYPE_BOOLEAN, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_POINTER, G_TYPE_INT);
 
 	headers = camel_medium_get_headers (CAMEL_MEDIUM (emf->message));
+        if (!headers)
+                return;
+
 	for (i = 0; i < headers->len; i++) {
 		GtkTreeIter iter;
 		GList *found_header;
diff --git a/mail/em-composer-utils.c b/mail/em-composer-utils.c
index dc8d897..af811fa 100644
--- a/mail/em-composer-utils.c
+++ b/mail/em-composer-utils.c
@@ -47,6 +47,7 @@
 #include "e-mail-folder-utils.h"
 #include "e-mail-session.h"
 #include "e-mail-session-utils.h"
+#include "e-mail-printer.h"
 #include "em-utils.h"
 #include "em-composer-utils.h"
 #include "composer/e-msg-composer.h"
@@ -56,6 +57,7 @@
 #include "em-folder-tree.h"
 #include "em-format-html.h"
 #include "em-format-html-print.h"
+#include "em-format-html-display.h"
 #include "em-format-quote.h"
 #include "em-event.h"
 
@@ -913,17 +915,50 @@ em_utils_composer_save_to_outbox_cb (EMsgComposer *composer,
 }
 
 static void
+composer_print_done_cb (EMailPrinter *emp,
+                        GtkPrintOperation *operation,
+                        GtkPrintOperationResult result,
+                        gpointer user_data)
+{
+        EMFormat *emf = user_data;
+
+        g_object_unref (emf->folder);
+        g_object_unref (emf);
+
+        g_object_unref (emp);
+       
+}
+
+static void
 em_utils_composer_print_cb (EMsgComposer *composer,
                             GtkPrintOperationAction action,
                             CamelMimeMessage *message,
                             EActivity *activity,
                             EMailSession *session)
 {
-	EMFormatHTMLPrint *efhp;
+        EMailPrinter *emp;
+        EMFormatHTMLDisplay *efhd;
+        CamelFolder *folder;
+
+        /* Create a virtual temporary camel folder */
+        /* FIXME WEBKIT This throws a warning about null parent-store. 
+         * Find a better way. */
+        folder = g_object_new (CAMEL_TYPE_OFFLINE_FOLDER, 
+                        "full-name", "composer",
+                        "parent-store", NULL, NULL);
+
+        efhd = g_object_new (EM_TYPE_FORMAT_HTML_DISPLAY, NULL);
+        ((EMFormat *) efhd)->message_uid = g_strdup (camel_mime_message_get_message_id (message));
+
+        /* Parse the message */
+        em_format_parse ((EMFormat *) efhd, message, folder, NULL);
+
+        /* Use EMailPrinter and WebKit to print the message */
+        emp = e_mail_printer_new ((EMFormatHTML *) efhd, action);
+        g_signal_connect (emp, "done",
+                G_CALLBACK (composer_print_done_cb), efhd);
 
-	efhp = em_format_html_print_new (NULL, action);
-	em_format_html_print_message (efhp, message, NULL, NULL);
-	g_object_unref (efhp);
+        e_mail_printer_print (emp, NULL);
 }
 
 /* Composing messages... */



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]