Mercurial > pidgin.yaz
comparison pidgin/gtkconv.c @ 32780:75104780b1a3
Hide struct _PurpleConvMessage.
author | andrew.victor@mxit.com |
---|---|
date | Fri, 21 Oct 2011 20:39:29 +0000 |
parents | 2ec94166be43 |
children | 4f445c48581a |
comparison
equal
deleted
inserted
replaced
32779:d72f2f13b60f | 32780:75104780b1a3 |
---|---|
8079 /* Compare two PurpleConvMessage's, according to time in ascending order. */ | 8079 /* Compare two PurpleConvMessage's, according to time in ascending order. */ |
8080 static int | 8080 static int |
8081 message_compare(gconstpointer p1, gconstpointer p2) | 8081 message_compare(gconstpointer p1, gconstpointer p2) |
8082 { | 8082 { |
8083 const PurpleConvMessage *m1 = p1, *m2 = p2; | 8083 const PurpleConvMessage *m1 = p1, *m2 = p2; |
8084 return (m1->when > m2->when); | 8084 return (purple_conversation_message_get_timestamp(m1) > purple_conversation_message_get_timestamp(m2)); |
8085 } | 8085 } |
8086 | 8086 |
8087 /* Adds some message history to the gtkconv. This happens in a idle-callback. */ | 8087 /* Adds some message history to the gtkconv. This happens in a idle-callback. */ |
8088 static gboolean | 8088 static gboolean |
8089 add_message_history_to_gtkconv(gpointer data) | 8089 add_message_history_to_gtkconv(gpointer data) |
8095 gboolean im = (purple_conversation_get_type(gtkconv->active_conv) == PURPLE_CONV_TYPE_IM); | 8095 gboolean im = (purple_conversation_get_type(gtkconv->active_conv) == PURPLE_CONV_TYPE_IM); |
8096 | 8096 |
8097 gtkconv->attach.timer = 0; | 8097 gtkconv->attach.timer = 0; |
8098 while (gtkconv->attach.current && count < 100) { /* XXX: 100 is a random value here */ | 8098 while (gtkconv->attach.current && count < 100) { /* XXX: 100 is a random value here */ |
8099 PurpleConvMessage *msg = gtkconv->attach.current->data; | 8099 PurpleConvMessage *msg = gtkconv->attach.current->data; |
8100 if (!im && when && when < msg->when) { | 8100 if (!im && when && when < purple_conversation_message_get_timestamp(msg)) { |
8101 gtk_webview_append_html(GTK_WEBVIEW(gtkconv->webview), "<BR><HR>"); | 8101 gtk_webview_append_html(GTK_WEBVIEW(gtkconv->webview), "<BR><HR>"); |
8102 g_object_set_data(G_OBJECT(gtkconv->entry), "attach-start-time", NULL); | 8102 g_object_set_data(G_OBJECT(gtkconv->entry), "attach-start-time", NULL); |
8103 } | 8103 } |
8104 pidgin_conv_write_conv(msg->conv, msg->who, msg->alias, msg->what, msg->flags, msg->when); | 8104 pidgin_conv_write_conv( |
8105 purple_conversation_message_get_conv(msg), | |
8106 purple_conversation_message_get_sender(msg), | |
8107 purple_conversation_message_get_alias(msg), | |
8108 purple_conversation_message_get_message(msg), | |
8109 purple_conversation_message_get_flags(msg), | |
8110 purple_conversation_message_get_timestamp(msg)); | |
8105 if (im) { | 8111 if (im) { |
8106 gtkconv->attach.current = g_list_delete_link(gtkconv->attach.current, gtkconv->attach.current); | 8112 gtkconv->attach.current = g_list_delete_link(gtkconv->attach.current, gtkconv->attach.current); |
8107 } else { | 8113 } else { |
8108 gtkconv->attach.current = gtkconv->attach.current->prev; | 8114 gtkconv->attach.current = gtkconv->attach.current->prev; |
8109 } | 8115 } |
8122 for (; iter; iter = iter->next) { | 8128 for (; iter; iter = iter->next) { |
8123 PurpleConversation *conv = iter->data; | 8129 PurpleConversation *conv = iter->data; |
8124 GList *history = purple_conversation_get_message_history(conv); | 8130 GList *history = purple_conversation_get_message_history(conv); |
8125 for (; history; history = history->next) { | 8131 for (; history; history = history->next) { |
8126 PurpleConvMessage *msg = history->data; | 8132 PurpleConvMessage *msg = history->data; |
8127 if (msg->when > when) | 8133 if (purple_conversation_message_get_timestamp(msg) > when) |
8128 msgs = g_list_prepend(msgs, msg); | 8134 msgs = g_list_prepend(msgs, msg); |
8129 } | 8135 } |
8130 } | 8136 } |
8131 msgs = g_list_sort(msgs, message_compare); | 8137 msgs = g_list_sort(msgs, message_compare); |
8132 for (; msgs; msgs = g_list_delete_link(msgs, msgs)) { | 8138 for (; msgs; msgs = g_list_delete_link(msgs, msgs)) { |
8133 PurpleConvMessage *msg = msgs->data; | 8139 PurpleConvMessage *msg = msgs->data; |
8134 pidgin_conv_write_conv(msg->conv, msg->who, msg->alias, msg->what, msg->flags, msg->when); | 8140 pidgin_conv_write_conv( |
8141 purple_conversation_message_get_conv(msg), | |
8142 purple_conversation_message_get_sender(msg), | |
8143 purple_conversation_message_get_alias(msg), | |
8144 purple_conversation_message_get_message(msg), | |
8145 purple_conversation_message_get_flags(msg), | |
8146 purple_conversation_message_get_timestamp(msg)); | |
8135 } | 8147 } |
8136 gtk_webview_append_html(GTK_WEBVIEW(gtkconv->webview), "<BR><HR>"); | 8148 gtk_webview_append_html(GTK_WEBVIEW(gtkconv->webview), "<BR><HR>"); |
8137 g_object_set_data(G_OBJECT(gtkconv->entry), "attach-start-time", NULL); | 8149 g_object_set_data(G_OBJECT(gtkconv->entry), "attach-start-time", NULL); |
8138 } | 8150 } |
8139 | 8151 |
8207 break; | 8219 break; |
8208 default: | 8220 default: |
8209 g_return_val_if_reached(TRUE); | 8221 g_return_val_if_reached(TRUE); |
8210 } | 8222 } |
8211 g_object_set_data(G_OBJECT(gtkconv->entry), "attach-start-time", | 8223 g_object_set_data(G_OBJECT(gtkconv->entry), "attach-start-time", |
8212 GINT_TO_POINTER(((PurpleConvMessage*)(list->data))->when)); | 8224 GINT_TO_POINTER(purple_conversation_message_get_timestamp((PurpleConvMessage*)(list->data)))); |
8213 gtkconv->attach.timer = g_idle_add(add_message_history_to_gtkconv, gtkconv); | 8225 gtkconv->attach.timer = g_idle_add(add_message_history_to_gtkconv, gtkconv); |
8214 } else { | 8226 } else { |
8215 purple_signal_emit(pidgin_conversations_get_handle(), | 8227 purple_signal_emit(pidgin_conversations_get_handle(), |
8216 "conversation-displayed", gtkconv); | 8228 "conversation-displayed", gtkconv); |
8217 } | 8229 } |