3 /* insert (c)/licensing information) */
6 #include <gtkhtml/gtkhtml.h>
8 /* TODO: put in auto* */
9 #include <tny-text-buffer-stream.h>
10 #include <tny-msg-mime-part-iface.h>
14 #endif /*HAVE_CONFIG_H*/
16 #include "modest-text-utils.h"
20 static gchar *quote_msg(const TnyMsgIface *src, const gchar *from, time_t sent_date, gint limit, gboolean textorhtml);
21 static GtkTextBuffer *htmltotext(TnyMsgMimePartIface * body);
24 static GtkTextBuffer *
25 htmltotext(TnyMsgMimePartIface * body)
29 GtkWidget *html, *win;
30 TnyStreamIface *stream;
34 win = gtk_window_new(GTK_WINDOW_TOPLEVEL);
35 html = gtk_html_new();
36 gtk_container_add(GTK_CONTAINER(win), html);
38 gtk_html_set_editable (GTK_HTML(html), FALSE);
39 gtk_html_allow_selection (GTK_HTML(html), TRUE);
40 gtk_html_set_caret_mode (GTK_HTML(html), FALSE);
41 gtk_html_set_blocking (GTK_HTML(html), FALSE);
42 gtk_html_set_images_blocking (GTK_HTML(html), FALSE);
44 stream = TNY_STREAM_IFACE(modest_tny_stream_gtkhtml_new(
45 gtk_html_begin(GTK_HTML(html))));
47 tny_stream_iface_reset (stream);
48 tny_msg_mime_part_iface_decode_to_stream (body, stream);
49 tny_stream_iface_reset (stream);
50 g_object_unref (G_OBJECT(stream));
52 gtk_widget_show_all(win);
53 gtk_html_select_all(GTK_HTML(html));
54 clip = gtk_widget_get_clipboard(html, GDK_SELECTION_PRIMARY);
55 //clip = gtk_widget_get_clipboard(html, GDK_SELECTION_CLIPBOARD);
56 text = gtk_clipboard_wait_for_text(clip);
58 buf = gtk_text_buffer_new(NULL);
59 gtk_text_buffer_set_text(buf, text, -1);
61 /* destroy win & html */
63 buf = gtk_text_buffer_new(NULL);
69 modest_tny_msg_actions_quote(const TnyMsgIface *self, const gchar *from, time_t sent_date, gint limit, GtkTextBuffer *to_quote)
75 /* a) quote text from selection */
76 if (to_quote != NULL) {
77 return modest_text_utils_quote(to_quote, from, sent_date, limit);
80 /* b) try to find a text/plain part in the msg and quote it */
81 quoted = quote_msg(self, from, sent_date, limit, FALSE);
85 /* c) if that fails, try text/html */
86 return quote_msg(self, from, sent_date, limit, TRUE);
91 quote_msg(const TnyMsgIface *src, const gchar *from, time_t sent_date, gint limit, gboolean textorhtml)
94 GList *parts; /* LEAK? */
95 TnyStreamIface* stream;
96 TnyTextBufferStream *dest;
97 TnyMsgMimePartIface *body = NULL;
98 TnyMsgMimePartIface *part;
102 /* is the warning in this line due to a bug in tinymail? */
103 parts = (GList*) tny_msg_iface_get_parts (src);
106 part = TNY_MSG_MIME_PART_IFACE(parts->data);
107 if (tny_msg_mime_part_iface_content_type_is (part, textorhtml ? "text/html" : "text/plain")) {
118 if (textorhtml == TRUE) {
119 buf = htmltotext(body);
121 buf = gtk_text_buffer_new (NULL);
122 stream = TNY_STREAM_IFACE(tny_text_buffer_stream_new (buf));
123 tny_stream_iface_reset (stream);
124 tny_msg_mime_part_iface_decode_to_stream (body, stream);
125 tny_stream_iface_reset (stream);
128 quoted = modest_text_utils_quote (buf, from, sent_date, limit);
130 g_object_unref(stream);