Mercurial > pidgin
diff libpurple/protocols/jabber/buddy.c @ 25208:6f94b4a27372
propagate from branch 'im.pidgin.pidgin' (head f1327672337219c8907eea2d335efb0035e4b39e)
to branch 'im.pidgin.cpw.malu.xmpp.idle' (head 6bfd4d87742ad77dd228039033d081fb8b68f8aa)
author | Marcus Lundblad <ml@update.uu.se> |
---|---|
date | Tue, 02 Dec 2008 22:45:39 +0000 |
parents | b2f4964768d7 5f597914cd01 |
children | e3bb0bbfa388 |
line wrap: on
line diff
--- a/libpurple/protocols/jabber/buddy.c Tue Dec 02 22:45:25 2008 +0000 +++ b/libpurple/protocols/jabber/buddy.c Tue Dec 02 22:45:39 2008 +0000 @@ -115,14 +115,18 @@ break; case JABBER_BUDDY_STATE_AWAY: case JABBER_BUDDY_STATE_DND: - case JABBER_BUDDY_STATE_UNAVAILABLE: - /* This resource is away/dnd/unavailable. Prefer to one which is extended away or unknown. */ - if ((jbr->state == JABBER_BUDDY_STATE_XA) || + /* This resource is away/dnd. Prefer to one which is extended away, unavailable, or unknown. */ + if ((jbr->state == JABBER_BUDDY_STATE_XA) || (jbr->state == JABBER_BUDDY_STATE_UNAVAILABLE) || (jbr->state == JABBER_BUDDY_STATE_UNKNOWN) || (jbr->state == JABBER_BUDDY_STATE_ERROR)) jbr = l->data; break; case JABBER_BUDDY_STATE_XA: - /* This resource is extended away. That's better than unknown. */ + /* This resource is extended away. That's better than unavailable or unknown. */ + if ((jbr->state == JABBER_BUDDY_STATE_UNAVAILABLE) || (jbr->state == JABBER_BUDDY_STATE_UNKNOWN) || (jbr->state == JABBER_BUDDY_STATE_ERROR)) + jbr = l->data; + break; + case JABBER_BUDDY_STATE_UNAVAILABLE: + /* This resource is unavailable. That's better than unknown. */ if ((jbr->state == JABBER_BUDDY_STATE_UNKNOWN) || (jbr->state == JABBER_BUDDY_STATE_ERROR)) jbr = l->data; break; @@ -966,7 +970,7 @@ } #endif } else { - gboolean multiple_resources = jbi->jb->resources && (g_list_length(jbi->jb->resources) > 1); + gboolean multiple_resources = jbi->jb->resources && jbi->jb->resources->next; for(resources = jbi->jb->resources; resources; resources = resources->next) { char *purdy = NULL; @@ -1798,12 +1802,21 @@ void jabber_buddy_get_info(PurpleConnection *gc, const char *who) { JabberStream *js = gc->proto_data; - char *bare_jid = jabber_get_bare_jid(who); + JabberID *jid = jabber_id_new(who); + + if (!jid) + return; - if(bare_jid) { + if (jabber_chat_find(js, jid->node, jid->domain)) { + /* For a conversation, include the resource (indicates the user). */ + jabber_buddy_get_info_for_jid(js, who); + } else { + char *bare_jid = jabber_get_bare_jid(who); jabber_buddy_get_info_for_jid(js, bare_jid); g_free(bare_jid); } + + jabber_id_free(jid); } static void jabber_buddy_set_invisibility(JabberStream *js, const char *who,