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 **"));