| 14 #include "version.h" |
14 #include "version.h" |
| 15 |
15 |
| 16 #include "gtkconv.h" |
16 #include "gtkconv.h" |
| 17 #include "gtkimhtml.h" |
17 #include "gtkimhtml.h" |
| 18 #include "gtkplugin.h" |
18 #include "gtkplugin.h" |
| |
19 #include "gtkwebview.h" |
| 19 |
20 |
| 20 #define HISTORY_PLUGIN_ID "gtk-history" |
21 #define HISTORY_PLUGIN_ID "gtk-history" |
| 21 |
22 |
| 22 #define HISTORY_SIZE (4 * 1024) |
23 #define HISTORY_SIZE (4 * 1024) |
| 23 |
24 |
| 24 static gboolean _scroll_imhtml_to_end(gpointer data) |
25 static gboolean _scroll_webview_to_end(gpointer data) |
| 25 { |
26 { |
| 26 GtkIMHtml *imhtml = data; |
27 GtkWebView *webview = data; |
| 27 gtk_imhtml_scroll_to_end(GTK_IMHTML(imhtml), FALSE); |
28 gtk_webview_scroll_to_end(GTK_WEBVIEW(webview), FALSE); |
| 28 g_object_unref(G_OBJECT(imhtml)); |
29 g_object_unref(G_OBJECT(webview)); |
| 29 return FALSE; |
30 return FALSE; |
| 30 } |
31 } |
| 31 |
32 |
| 32 static void historize(PurpleConversation *c) |
33 static void historize(PurpleConversation *c) |
| 33 { |
34 { |
| 37 GList *logs = NULL; |
38 GList *logs = NULL; |
| 38 const char *alias = name; |
39 const char *alias = name; |
| 39 guint flags; |
40 guint flags; |
| 40 char *history; |
41 char *history; |
| 41 PidginConversation *gtkconv; |
42 PidginConversation *gtkconv; |
| |
43 #if 0 |
| |
44 /* FIXME: WebView has no options */ |
| 42 GtkIMHtmlOptions options = GTK_IMHTML_NO_COLOURS; |
45 GtkIMHtmlOptions options = GTK_IMHTML_NO_COLOURS; |
| |
46 #endif |
| 43 char *header; |
47 char *header; |
| |
48 #if 0 |
| |
49 /* FIXME: WebView has no protocol setting */ |
| 44 char *protocol; |
50 char *protocol; |
| |
51 #endif |
| 45 char *escaped_alias; |
52 char *escaped_alias; |
| 46 const char *header_date; |
53 const char *header_date; |
| 47 |
54 |
| 48 convtype = purple_conversation_get_type(c); |
55 convtype = purple_conversation_get_type(c); |
| 49 gtkconv = PIDGIN_CONVERSATION(c); |
56 gtkconv = PIDGIN_CONVERSATION(c); |
| 114 if (logs == NULL) |
121 if (logs == NULL) |
| 115 return; |
122 return; |
| 116 |
123 |
| 117 history = purple_log_read((PurpleLog*)logs->data, &flags); |
124 history = purple_log_read((PurpleLog*)logs->data, &flags); |
| 118 gtkconv = PIDGIN_CONVERSATION(c); |
125 gtkconv = PIDGIN_CONVERSATION(c); |
| |
126 #if 0 |
| |
127 /* FIXME: WebView has no options */ |
| 119 if (flags & PURPLE_LOG_READ_NO_NEWLINE) |
128 if (flags & PURPLE_LOG_READ_NO_NEWLINE) |
| 120 options |= GTK_IMHTML_NO_NEWLINE; |
129 options |= GTK_IMHTML_NO_NEWLINE; |
| 121 |
130 #endif |
| |
131 |
| |
132 #if 0 |
| |
133 /* FIXME: WebView has no protocol setting */ |
| 122 protocol = g_strdup(gtk_imhtml_get_protocol_name(GTK_IMHTML(gtkconv->imhtml))); |
134 protocol = g_strdup(gtk_imhtml_get_protocol_name(GTK_IMHTML(gtkconv->imhtml))); |
| 123 gtk_imhtml_set_protocol_name(GTK_IMHTML(gtkconv->imhtml), |
135 gtk_imhtml_set_protocol_name(GTK_IMHTML(gtkconv->imhtml), |
| 124 purple_account_get_protocol_name(((PurpleLog*)logs->data)->account)); |
136 purple_account_get_protocol_name(((PurpleLog*)logs->data)->account)); |
| 125 |
137 #endif |
| 126 if (gtk_text_buffer_get_char_count(gtk_text_view_get_buffer(GTK_TEXT_VIEW(gtkconv->imhtml)))) |
138 |
| 127 gtk_imhtml_append_text(GTK_IMHTML(gtkconv->imhtml), "<BR>", options); |
139 if (!gtk_webview_is_empty(GTK_WEBVIEW(gtkconv->webview))) |
| |
140 gtk_webview_append_html(GTK_WEBVIEW(gtkconv->webview), "<BR>"); |
| 128 |
141 |
| 129 escaped_alias = g_markup_escape_text(alias, -1); |
142 escaped_alias = g_markup_escape_text(alias, -1); |
| 130 |
143 |
| 131 if (((PurpleLog *)logs->data)->tm) |
144 if (((PurpleLog *)logs->data)->tm) |
| 132 header_date = purple_date_format_full(((PurpleLog *)logs->data)->tm); |
145 header_date = purple_date_format_full(((PurpleLog *)logs->data)->tm); |
| 133 else |
146 else |
| 134 header_date = purple_date_format_full(localtime(&((PurpleLog *)logs->data)->time)); |
147 header_date = purple_date_format_full(localtime(&((PurpleLog *)logs->data)->time)); |
| 135 |
148 |
| 136 header = g_strdup_printf(_("<b>Conversation with %s on %s:</b><br>"), escaped_alias, header_date); |
149 header = g_strdup_printf(_("<b>Conversation with %s on %s:</b><br>"), escaped_alias, header_date); |
| 137 gtk_imhtml_append_text(GTK_IMHTML(gtkconv->imhtml), header, options); |
150 gtk_webview_append_html(GTK_WEBVIEW(gtkconv->webview), header); |
| 138 g_free(header); |
151 g_free(header); |
| 139 g_free(escaped_alias); |
152 g_free(escaped_alias); |
| 140 |
153 |
| 141 g_strchomp(history); |
154 g_strchomp(history); |
| 142 gtk_imhtml_append_text(GTK_IMHTML(gtkconv->imhtml), history, options); |
155 gtk_webview_append_html(GTK_WEBVIEW(gtkconv->webview), history); |
| 143 g_free(history); |
156 g_free(history); |
| 144 |
157 |
| 145 gtk_imhtml_append_text(GTK_IMHTML(gtkconv->imhtml), "<hr>", options); |
158 gtk_webview_append_html(GTK_WEBVIEW(gtkconv->webview), "<hr>"); |
| 146 |
159 |
| |
160 #if 0 |
| |
161 /* FIXME: WebView has no protocol setting */ |
| 147 gtk_imhtml_set_protocol_name(GTK_IMHTML(gtkconv->imhtml), protocol); |
162 gtk_imhtml_set_protocol_name(GTK_IMHTML(gtkconv->imhtml), protocol); |
| 148 g_free(protocol); |
163 g_free(protocol); |
| 149 |
164 #endif |
| 150 g_object_ref(G_OBJECT(gtkconv->imhtml)); |
165 |
| 151 g_idle_add(_scroll_imhtml_to_end, gtkconv->imhtml); |
166 g_object_ref(G_OBJECT(gtkconv->webview)); |
| |
167 g_idle_add(_scroll_webview_to_end, gtkconv->webview); |
| 152 |
168 |
| 153 g_list_foreach(logs, (GFunc)purple_log_free, NULL); |
169 g_list_foreach(logs, (GFunc)purple_log_free, NULL); |
| 154 g_list_free(logs); |
170 g_list_free(logs); |
| 155 } |
171 } |
| 156 |
172 |