Mercurial > pidgin.yaz
diff libpurple/prpl.c @ 29712:d5fe33c3a765
propagate from branch 'im.pidgin.pidgin' (head 42a8485e73af5f2091d307b51c09dded94eceb24)
to branch 'im.pidgin.pidgin.next.minor' (head 4edcf8da14be654127117da5af0cbdd7a0616439)
author | John Bailey <rekkanoryo@rekkanoryo.org> |
---|---|
date | Tue, 17 Nov 2009 07:33:47 +0000 |
parents | 7b1cfd48beab |
children | 31a34388fb1d |
line wrap: on
line diff
--- a/libpurple/prpl.c Tue Nov 17 07:33:34 2009 +0000 +++ b/libpurple/prpl.c Tue Nov 17 07:33:47 2009 +0000 @@ -288,8 +288,10 @@ /* The buddy is no longer online, they are therefore by definition not * still typing to us. */ - if (!purple_status_is_online(status)) + if (!purple_status_is_online(status)) { serv_got_typing_stopped(purple_account_get_connection(account), name); + purple_prpl_got_media_caps(account, name); + } } void purple_prpl_got_user_status_deactive(PurpleAccount *account, const char *name, @@ -407,6 +409,16 @@ return statuses; } +static void +purple_prpl_attention(PurpleConversation *conv, const char *who, + guint type, PurpleMessageFlags flags, time_t mtime) +{ + PurpleAccount *account = purple_conversation_get_account(conv); + purple_signal_emit(purple_conversations_get_handle(), + flags == PURPLE_MESSAGE_SEND ? "sent-attention" : "got-attention", + account, who, conv, type); +} + void purple_prpl_send_attention(PurpleConnection *gc, const char *who, guint type_code) { @@ -452,6 +464,7 @@ conv = purple_conversation_new(PURPLE_CONV_TYPE_IM, gc->account, who); purple_conv_im_write(PURPLE_CONV_IM(conv), NULL, description, flags, mtime); + purple_prpl_attention(conv, who, type_code, PURPLE_MESSAGE_SEND, time(NULL)); g_free(description); } @@ -503,7 +516,15 @@ void purple_prpl_got_attention(PurpleConnection *gc, const char *who, guint type_code) { + PurpleConversation *conv = NULL; + PurpleAccount *account = purple_connection_get_account(gc); + got_attention(gc, -1, who, type_code); + conv = + purple_find_conversation_with_account(PURPLE_CONV_TYPE_ANY, who, account); + if (conv) + purple_prpl_attention(conv, who, type_code, PURPLE_MESSAGE_RECV, + time(NULL)); } void @@ -560,6 +581,35 @@ return PURPLE_MEDIA_CAPS_NONE; } +void +purple_prpl_got_media_caps(PurpleAccount *account, const char *name) +{ +#ifdef USE_VV + GSList *list; + + g_return_if_fail(account != NULL); + g_return_if_fail(name != NULL); + + if ((list = purple_find_buddies(account, name)) == NULL) + return; + + while (list) { + PurpleBuddy *buddy = list->data; + PurpleMediaCaps oldcaps = buddy->media_caps; + const gchar *bname = purple_buddy_get_name(buddy); + list = g_slist_delete_link(list, list); + buddy->media_caps = purple_prpl_get_media_caps(account, bname); + + if (oldcaps == buddy->media_caps) + continue; + + purple_signal_emit(purple_blist_get_handle(), + "buddy-caps-changed", buddy, + buddy->media_caps, oldcaps); + } +#endif +} + /************************************************************************** * Protocol Plugin Subsystem API **************************************************************************/