comparison 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
comparison
equal deleted inserted replaced
25207:b2f4964768d7 25208:6f94b4a27372
113 if ((jbr->state != JABBER_BUDDY_STATE_ONLINE) && (jbr->state != JABBER_BUDDY_STATE_CHAT)) 113 if ((jbr->state != JABBER_BUDDY_STATE_ONLINE) && (jbr->state != JABBER_BUDDY_STATE_CHAT))
114 jbr = l->data; 114 jbr = l->data;
115 break; 115 break;
116 case JABBER_BUDDY_STATE_AWAY: 116 case JABBER_BUDDY_STATE_AWAY:
117 case JABBER_BUDDY_STATE_DND: 117 case JABBER_BUDDY_STATE_DND:
118 case JABBER_BUDDY_STATE_UNAVAILABLE: 118 /* This resource is away/dnd. Prefer to one which is extended away, unavailable, or unknown. */
119 /* This resource is away/dnd/unavailable. Prefer to one which is extended away or unknown. */ 119 if ((jbr->state == JABBER_BUDDY_STATE_XA) || (jbr->state == JABBER_BUDDY_STATE_UNAVAILABLE) ||
120 if ((jbr->state == JABBER_BUDDY_STATE_XA) ||
121 (jbr->state == JABBER_BUDDY_STATE_UNKNOWN) || (jbr->state == JABBER_BUDDY_STATE_ERROR)) 120 (jbr->state == JABBER_BUDDY_STATE_UNKNOWN) || (jbr->state == JABBER_BUDDY_STATE_ERROR))
122 jbr = l->data; 121 jbr = l->data;
123 break; 122 break;
124 case JABBER_BUDDY_STATE_XA: 123 case JABBER_BUDDY_STATE_XA:
125 /* This resource is extended away. That's better than unknown. */ 124 /* This resource is extended away. That's better than unavailable or unknown. */
125 if ((jbr->state == JABBER_BUDDY_STATE_UNAVAILABLE) || (jbr->state == JABBER_BUDDY_STATE_UNKNOWN) || (jbr->state == JABBER_BUDDY_STATE_ERROR))
126 jbr = l->data;
127 break;
128 case JABBER_BUDDY_STATE_UNAVAILABLE:
129 /* This resource is unavailable. That's better than unknown. */
126 if ((jbr->state == JABBER_BUDDY_STATE_UNKNOWN) || (jbr->state == JABBER_BUDDY_STATE_ERROR)) 130 if ((jbr->state == JABBER_BUDDY_STATE_UNKNOWN) || (jbr->state == JABBER_BUDDY_STATE_ERROR))
127 jbr = l->data; 131 jbr = l->data;
128 break; 132 break;
129 case JABBER_BUDDY_STATE_UNKNOWN: 133 case JABBER_BUDDY_STATE_UNKNOWN:
130 case JABBER_BUDDY_STATE_ERROR: 134 case JABBER_BUDDY_STATE_ERROR:
964 968
965 g_string_free(tmp, TRUE); 969 g_string_free(tmp, TRUE);
966 } 970 }
967 #endif 971 #endif
968 } else { 972 } else {
969 gboolean multiple_resources = jbi->jb->resources && (g_list_length(jbi->jb->resources) > 1); 973 gboolean multiple_resources = jbi->jb->resources && jbi->jb->resources->next;
970 974
971 for(resources = jbi->jb->resources; resources; resources = resources->next) { 975 for(resources = jbi->jb->resources; resources; resources = resources->next) {
972 char *purdy = NULL; 976 char *purdy = NULL;
973 const char *status_name = NULL; 977 const char *status_name = NULL;
974 978
1796 } 1800 }
1797 1801
1798 void jabber_buddy_get_info(PurpleConnection *gc, const char *who) 1802 void jabber_buddy_get_info(PurpleConnection *gc, const char *who)
1799 { 1803 {
1800 JabberStream *js = gc->proto_data; 1804 JabberStream *js = gc->proto_data;
1801 char *bare_jid = jabber_get_bare_jid(who); 1805 JabberID *jid = jabber_id_new(who);
1802 1806
1803 if(bare_jid) { 1807 if (!jid)
1808 return;
1809
1810 if (jabber_chat_find(js, jid->node, jid->domain)) {
1811 /* For a conversation, include the resource (indicates the user). */
1812 jabber_buddy_get_info_for_jid(js, who);
1813 } else {
1814 char *bare_jid = jabber_get_bare_jid(who);
1804 jabber_buddy_get_info_for_jid(js, bare_jid); 1815 jabber_buddy_get_info_for_jid(js, bare_jid);
1805 g_free(bare_jid); 1816 g_free(bare_jid);
1806 } 1817 }
1818
1819 jabber_id_free(jid);
1807 } 1820 }
1808 1821
1809 static void jabber_buddy_set_invisibility(JabberStream *js, const char *who, 1822 static void jabber_buddy_set_invisibility(JabberStream *js, const char *who,
1810 gboolean invisible) 1823 gboolean invisible)
1811 { 1824 {