Mercurial > pidgin.yaz
comparison libpurple/conversation.c @ 32010:ce968e115c95
propagate from branch 'im.pidgin.cpw.masca.p2p' (head 33ca865dacb9e5bcf763d06f6a42cbaca337cc64)
to branch 'im.pidgin.pidgin' (head 92f47f4e8b0cbb107fd97e1ab814d1cedbf109ad)
author | Elliott Sales de Andrade <qulogic@pidgin.im> |
---|---|
date | Fri, 06 May 2011 06:25:14 +0000 |
parents | a9e077fb65e9 |
children | 8b9e9c61d061 5ffd5582f5fe 47f7b8ca6149 |
comparison
equal
deleted
inserted
replaced
32009:f021d93a1f9b | 32010:ce968e115c95 |
---|---|
573 g_hash_table_destroy(conv->data); | 573 g_hash_table_destroy(conv->data); |
574 conv->data = NULL; | 574 conv->data = NULL; |
575 | 575 |
576 if (ops != NULL && ops->destroy_conversation != NULL) | 576 if (ops != NULL && ops->destroy_conversation != NULL) |
577 ops->destroy_conversation(conv); | 577 ops->destroy_conversation(conv); |
578 conv->ui_data = NULL; | |
578 | 579 |
579 purple_conversation_close_logs(conv); | 580 purple_conversation_close_logs(conv); |
580 | 581 |
581 purple_conversation_clear_message_history(conv); | 582 purple_conversation_clear_message_history(conv); |
582 | 583 |
997 purple_log_write((PurpleLog *)log->data, flags, alias, mtime, displayed); | 998 purple_log_write((PurpleLog *)log->data, flags, alias, mtime, displayed); |
998 log = log->next; | 999 log = log->next; |
999 } | 1000 } |
1000 } | 1001 } |
1001 | 1002 |
1002 if (purple_conversation_get_type(conv) == PURPLE_CONV_TYPE_IM) { | |
1003 if ((flags & PURPLE_MESSAGE_RECV) == PURPLE_MESSAGE_RECV) { | |
1004 purple_conv_im_set_typing_state(PURPLE_CONV_IM(conv), PURPLE_NOT_TYPING); | |
1005 } | |
1006 } | |
1007 | |
1008 if (ops && ops->write_conv) | 1003 if (ops && ops->write_conv) |
1009 ops->write_conv(conv, who, alias, displayed, flags, mtime); | 1004 ops->write_conv(conv, who, alias, displayed, flags, mtime); |
1010 | 1005 |
1011 add_message_to_history(conv, who, alias, message, flags, mtime); | 1006 add_message_to_history(conv, who, alias, message, flags, mtime); |
1012 | 1007 |
1221 | 1216 |
1222 g_return_if_fail(im != NULL); | 1217 g_return_if_fail(im != NULL); |
1223 g_return_if_fail(message != NULL); | 1218 g_return_if_fail(message != NULL); |
1224 | 1219 |
1225 c = purple_conv_im_get_conversation(im); | 1220 c = purple_conv_im_get_conversation(im); |
1221 | |
1222 if ((flags & PURPLE_MESSAGE_RECV) == PURPLE_MESSAGE_RECV) { | |
1223 purple_conv_im_set_typing_state(im, PURPLE_NOT_TYPING); | |
1224 } | |
1226 | 1225 |
1227 /* Pass this on to either the ops structure or the default write func. */ | 1226 /* Pass this on to either the ops structure or the default write func. */ |
1228 if (c->ui_ops != NULL && c->ui_ops->write_im != NULL) | 1227 if (c->ui_ops != NULL && c->ui_ops->write_im != NULL) |
1229 c->ui_ops->write_im(c, who, message, flags, mtime); | 1228 c->ui_ops->write_im(c, who, message, flags, mtime); |
1230 else | 1229 else |
2135 | 2134 |
2136 cb = g_new0(PurpleConvChatBuddy, 1); | 2135 cb = g_new0(PurpleConvChatBuddy, 1); |
2137 cb->name = g_strdup(name); | 2136 cb->name = g_strdup(name); |
2138 cb->flags = flags; | 2137 cb->flags = flags; |
2139 cb->alias = g_strdup(alias); | 2138 cb->alias = g_strdup(alias); |
2139 cb->attributes = g_hash_table_new_full(g_str_hash, g_str_equal, | |
2140 g_free, g_free); | |
2140 | 2141 |
2141 PURPLE_DBUS_REGISTER_POINTER(cb, PurpleConvChatBuddy); | 2142 PURPLE_DBUS_REGISTER_POINTER(cb, PurpleConvChatBuddy); |
2142 return cb; | 2143 return cb; |
2143 } | 2144 } |
2144 | 2145 |
2167 return; | 2168 return; |
2168 | 2169 |
2169 g_free(cb->alias); | 2170 g_free(cb->alias); |
2170 g_free(cb->alias_key); | 2171 g_free(cb->alias_key); |
2171 g_free(cb->name); | 2172 g_free(cb->name); |
2173 g_hash_table_destroy(cb->attributes); | |
2172 | 2174 |
2173 PURPLE_DBUS_UNREGISTER_POINTER(cb); | 2175 PURPLE_DBUS_UNREGISTER_POINTER(cb); |
2174 g_free(cb); | 2176 g_free(cb); |
2175 } | 2177 } |
2176 | 2178 |
2178 purple_conv_chat_cb_get_name(PurpleConvChatBuddy *cb) | 2180 purple_conv_chat_cb_get_name(PurpleConvChatBuddy *cb) |
2179 { | 2181 { |
2180 g_return_val_if_fail(cb != NULL, NULL); | 2182 g_return_val_if_fail(cb != NULL, NULL); |
2181 | 2183 |
2182 return cb->name; | 2184 return cb->name; |
2185 } | |
2186 | |
2187 const char * | |
2188 purple_conv_chat_cb_get_attribute(PurpleConvChatBuddy *cb, const char *key) | |
2189 { | |
2190 g_return_val_if_fail(cb != NULL, NULL); | |
2191 g_return_val_if_fail(key != NULL, NULL); | |
2192 | |
2193 return g_hash_table_lookup(cb->attributes, key); | |
2194 } | |
2195 | |
2196 static void | |
2197 append_attribute_key(gpointer key, gpointer value, gpointer user_data) | |
2198 { | |
2199 GList **list = user_data; | |
2200 *list = g_list_prepend(*list, key); | |
2201 } | |
2202 | |
2203 GList * | |
2204 purple_conv_chat_cb_get_attribute_keys(PurpleConvChatBuddy *cb) | |
2205 { | |
2206 GList *keys = NULL; | |
2207 | |
2208 g_return_val_if_fail(cb != NULL, NULL); | |
2209 | |
2210 g_hash_table_foreach(cb->attributes, (GHFunc)append_attribute_key, &keys); | |
2211 | |
2212 return keys; | |
2213 } | |
2214 | |
2215 void | |
2216 purple_conv_chat_cb_set_attribute(PurpleConvChat *chat, PurpleConvChatBuddy *cb, const char *key, const char *value) | |
2217 { | |
2218 PurpleConversation *conv; | |
2219 PurpleConversationUiOps *ops; | |
2220 | |
2221 g_return_if_fail(cb != NULL); | |
2222 g_return_if_fail(key != NULL); | |
2223 g_return_if_fail(value != NULL); | |
2224 | |
2225 g_hash_table_replace(cb->attributes, g_strdup(key), g_strdup(value)); | |
2226 | |
2227 conv = purple_conv_chat_get_conversation(chat); | |
2228 ops = purple_conversation_get_ui_ops(conv); | |
2229 | |
2230 if (ops != NULL && ops->chat_update_user != NULL) | |
2231 ops->chat_update_user(conv, cb->name); | |
2232 } | |
2233 | |
2234 void | |
2235 purple_conv_chat_cb_set_attributes(PurpleConvChat *chat, PurpleConvChatBuddy *cb, GList *keys, GList *values) | |
2236 { | |
2237 PurpleConversation *conv; | |
2238 PurpleConversationUiOps *ops; | |
2239 | |
2240 g_return_if_fail(cb != NULL); | |
2241 g_return_if_fail(keys != NULL); | |
2242 g_return_if_fail(values != NULL); | |
2243 | |
2244 while (keys != NULL && values != NULL) { | |
2245 g_hash_table_replace(cb->attributes, g_strdup(keys->data), g_strdup(values->data)); | |
2246 keys = g_list_next(keys); | |
2247 values = g_list_next(values); | |
2248 } | |
2249 | |
2250 conv = purple_conv_chat_get_conversation(chat); | |
2251 ops = purple_conversation_get_ui_ops(conv); | |
2252 | |
2253 if (ops != NULL && ops->chat_update_user != NULL) | |
2254 ops->chat_update_user(conv, cb->name); | |
2183 } | 2255 } |
2184 | 2256 |
2185 GList * | 2257 GList * |
2186 purple_conversation_get_extended_menu(PurpleConversation *conv) | 2258 purple_conversation_get_extended_menu(PurpleConversation *conv) |
2187 { | 2259 { |
2197 void purple_conversation_clear_message_history(PurpleConversation *conv) | 2269 void purple_conversation_clear_message_history(PurpleConversation *conv) |
2198 { | 2270 { |
2199 GList *list = conv->message_history; | 2271 GList *list = conv->message_history; |
2200 message_history_free(list); | 2272 message_history_free(list); |
2201 conv->message_history = NULL; | 2273 conv->message_history = NULL; |
2274 | |
2275 purple_signal_emit(purple_conversations_get_handle(), | |
2276 "cleared-message-history", conv); | |
2202 } | 2277 } |
2203 | 2278 |
2204 GList *purple_conversation_get_message_history(PurpleConversation *conv) | 2279 GList *purple_conversation_get_message_history(PurpleConversation *conv) |
2205 { | 2280 { |
2206 return conv->message_history; | 2281 return conv->message_history; |
2296 purple_value_new(PURPLE_TYPE_STRING), | 2371 purple_value_new(PURPLE_TYPE_STRING), |
2297 purple_value_new(PURPLE_TYPE_STRING), | 2372 purple_value_new(PURPLE_TYPE_STRING), |
2298 purple_value_new(PURPLE_TYPE_SUBTYPE, | 2373 purple_value_new(PURPLE_TYPE_SUBTYPE, |
2299 PURPLE_SUBTYPE_CONVERSATION), | 2374 PURPLE_SUBTYPE_CONVERSATION), |
2300 purple_value_new(PURPLE_TYPE_UINT)); | 2375 purple_value_new(PURPLE_TYPE_UINT)); |
2301 | 2376 |
2302 purple_signal_register(handle, "sent-attention", | 2377 purple_signal_register(handle, "sent-attention", |
2303 purple_marshal_VOID__POINTER_POINTER_POINTER_UINT, | 2378 purple_marshal_VOID__POINTER_POINTER_POINTER_UINT, |
2304 NULL, 4, | 2379 NULL, 4, |
2305 purple_value_new(PURPLE_TYPE_SUBTYPE, | 2380 purple_value_new(PURPLE_TYPE_SUBTYPE, |
2306 PURPLE_SUBTYPE_ACCOUNT), | 2381 PURPLE_SUBTYPE_ACCOUNT), |
2307 purple_value_new(PURPLE_TYPE_STRING), | 2382 purple_value_new(PURPLE_TYPE_STRING), |
2308 purple_value_new(PURPLE_TYPE_SUBTYPE, | 2383 purple_value_new(PURPLE_TYPE_SUBTYPE, |
2309 PURPLE_SUBTYPE_CONVERSATION), | 2384 PURPLE_SUBTYPE_CONVERSATION), |
2310 purple_value_new(PURPLE_TYPE_UINT)); | 2385 purple_value_new(PURPLE_TYPE_UINT)); |
2311 | 2386 |
2312 purple_signal_register(handle, "got-attention", | 2387 purple_signal_register(handle, "got-attention", |
2313 purple_marshal_VOID__POINTER_POINTER_POINTER_UINT, | 2388 purple_marshal_VOID__POINTER_POINTER_POINTER_UINT, |
2314 NULL, 4, | 2389 NULL, 4, |
2315 purple_value_new(PURPLE_TYPE_SUBTYPE, | 2390 purple_value_new(PURPLE_TYPE_SUBTYPE, |
2316 PURPLE_SUBTYPE_ACCOUNT), | 2391 PURPLE_SUBTYPE_ACCOUNT), |
2317 purple_value_new(PURPLE_TYPE_STRING), | 2392 purple_value_new(PURPLE_TYPE_STRING), |
2318 purple_value_new(PURPLE_TYPE_SUBTYPE, | 2393 purple_value_new(PURPLE_TYPE_SUBTYPE, |
2319 PURPLE_SUBTYPE_CONVERSATION), | 2394 PURPLE_SUBTYPE_CONVERSATION), |
2320 purple_value_new(PURPLE_TYPE_UINT)); | 2395 purple_value_new(PURPLE_TYPE_UINT)); |
2321 | 2396 |
2322 purple_signal_register(handle, "sending-im-msg", | 2397 purple_signal_register(handle, "sending-im-msg", |
2323 purple_marshal_VOID__POINTER_POINTER_POINTER, | 2398 purple_marshal_VOID__POINTER_POINTER_POINTER, |
2324 NULL, 3, | 2399 NULL, 3, |
2325 purple_value_new(PURPLE_TYPE_SUBTYPE, | 2400 purple_value_new(PURPLE_TYPE_SUBTYPE, |
2326 PURPLE_SUBTYPE_ACCOUNT), | 2401 PURPLE_SUBTYPE_ACCOUNT), |
2553 purple_value_new(PURPLE_TYPE_SUBTYPE, | 2628 purple_value_new(PURPLE_TYPE_SUBTYPE, |
2554 PURPLE_SUBTYPE_CONVERSATION), | 2629 PURPLE_SUBTYPE_CONVERSATION), |
2555 purple_value_new(PURPLE_TYPE_STRING), | 2630 purple_value_new(PURPLE_TYPE_STRING), |
2556 purple_value_new(PURPLE_TYPE_STRING)); | 2631 purple_value_new(PURPLE_TYPE_STRING)); |
2557 | 2632 |
2633 purple_signal_register(handle, "cleared-message-history", | |
2634 purple_marshal_VOID__POINTER, NULL, 1, | |
2635 purple_value_new(PURPLE_TYPE_SUBTYPE, | |
2636 PURPLE_SUBTYPE_CONVERSATION)); | |
2637 | |
2558 purple_signal_register(handle, "conversation-extended-menu", | 2638 purple_signal_register(handle, "conversation-extended-menu", |
2559 purple_marshal_VOID__POINTER_POINTER, NULL, 2, | 2639 purple_marshal_VOID__POINTER_POINTER, NULL, 2, |
2560 purple_value_new(PURPLE_TYPE_SUBTYPE, | 2640 purple_value_new(PURPLE_TYPE_SUBTYPE, |
2561 PURPLE_SUBTYPE_CONVERSATION), | 2641 PURPLE_SUBTYPE_CONVERSATION), |
2562 purple_value_new(PURPLE_TYPE_BOXED, "GList **")); | 2642 purple_value_new(PURPLE_TYPE_BOXED, "GList **")); |