# HG changeset patch # User Elliott Sales de Andrade # Date 1265861700 0 # Node ID 9e735d7e2f1d7c8beeef4f888e392e35403d6c9b # Parent 7cab6dc6b79c85045e24cb51bcdfa24b3201449b Oops, just realized that caps can be reset in certain situations, and we only want that to happen for the specific resource, not the entire buddy caps. diff -r 7cab6dc6b79c -r 9e735d7e2f1d libpurple/protocols/jabber/jabber.c --- a/libpurple/protocols/jabber/jabber.c Thu Feb 11 03:59:56 2010 +0000 +++ b/libpurple/protocols/jabber/jabber.c Thu Feb 11 04:15:00 2010 +0000 @@ -3146,7 +3146,7 @@ purple_account_get_connection(account)->proto_data; JabberBuddy *jb; JabberBuddyResource *jbr; - PurpleMediaCaps caps = PURPLE_MEDIA_CAPS_NONE; + PurpleMediaCaps total = PURPLE_MEDIA_CAPS_NONE; gchar *resource; GList *specific = NULL, *l; @@ -3162,7 +3162,7 @@ /* no resources online, we're trying to get caps for someone * whose presence we're not subscribed to, or * someone who is offline. */ - return caps; + return total; } else if ((resource = jabber_get_resource(who)) != NULL) { /* they've specified a resource, no need to ask or @@ -3173,7 +3173,7 @@ if (!jbr) { purple_debug_error("jabber", "jabber_get_media_caps:" " Can't find resource %s\n", who); - return caps; + return total; } l = specific = g_list_prepend(specific, jbr); @@ -3184,6 +3184,7 @@ } for (; l; l = l->next) { + PurpleMediaCaps caps = PURPLE_MEDIA_CAPS_NONE; jbr = l->data; if (jabber_resource_has_capability(jbr, @@ -3214,13 +3215,15 @@ if (jabber_resource_has_capability(jbr, NS_GOOGLE_VIDEO)) caps |= PURPLE_MEDIA_CAPS_AUDIO_VIDEO; } + + total |= caps; } if (specific) { g_list_free(specific); } - return caps; + return total; #else return PURPLE_MEDIA_CAPS_NONE; #endif