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);
 }