Mercurial > pidgin
diff src/protocols/jabber/roster.c @ 8194:22b3974dc1af
[gaim-migrate @ 8916]
a bunch of tweaks to jabber roster handling, and a fix for a segfault when you delete the priority buddy in a contact
committer: Tailor Script <tailor@pidgin.im>
author | Nathan Walp <nwalp@pidgin.im> |
---|---|
date | Sun, 01 Feb 2004 01:06:10 +0000 |
parents | 3a229ad2fab0 |
children | 5d039bc19350 |
line wrap: on
line diff
--- a/src/protocols/jabber/roster.c Sat Jan 31 22:30:29 2004 +0000 +++ b/src/protocols/jabber/roster.c Sun Feb 01 01:06:10 2004 +0000 @@ -167,6 +167,8 @@ jb->subscription = JABBER_SUB_FROM; else if(!strcmp(subscription, "both")) jb->subscription = JABBER_SUB_BOTH; + else if(!strcmp(subscription, "remove")) + jb->subscription = JABBER_SUB_REMOVE; else jb->subscription = JABBER_SUB_NONE; @@ -175,11 +177,10 @@ else jb->subscription &= ~JABBER_SUB_PENDING; - if(jb->subscription == JABBER_SUB_NONE) { + if(jb->subscription == JABBER_SUB_REMOVE) { remove_gaim_buddies(js, jid); } else { GSList *groups = NULL; - for(group = xmlnode_get_child(item, "group"); group; group = xmlnode_get_next_twin(group)) { char *group_name; @@ -188,14 +189,6 @@ groups = g_slist_append(groups, group_name); } add_gaim_buddies_in_groups(js, jid, name, groups); - - if(jb->subscription == JABBER_SUB_BOTH) { - char *my_bare_jid = g_strdup_printf("%s@%s", js->user->node, js->user->domain); - if(!strcmp(jid, my_bare_jid)) { - jabber_presence_fake_to_self(js, js->gc->away_state, js->gc->away); - } - g_free(my_bare_jid); - } } } @@ -257,6 +250,7 @@ GSList *groups = NULL; JabberBuddy *jb; JabberBuddyResource *jbr; + char *my_bare_jid; if(!js->roster_parsed) return; @@ -272,11 +266,15 @@ jabber_roster_update(js, who, groups); - if(!jb || !(jb->subscription & JABBER_SUB_TO)) + my_bare_jid = g_strdup_printf("%s@%s", js->user->node, js->user->domain); + if(!strcmp(who, my_bare_jid)) + jabber_presence_fake_to_self(js, js->gc->away_state, js->gc->away); + else if(!jb || !(jb->subscription & JABBER_SUB_TO)) jabber_presence_subscription_set(js, who, "subscribe"); else if((jbr =jabber_buddy_find_resource(jb, NULL))) serv_got_update(gc, who, 1, 0, 0, 0, jbr->state); + g_free(my_bare_jid); g_free(who); }