diff libpurple/protocols/jabber/google.c @ 27494:93a41017dca9

Various roster cleanups. Refs #7008. I haven't tested it, but this may resolve the grouping/case problem (strcmp => purple_utf8_strcasecmp)
author Paul Aurich <paul@darkrain42.org>
date Sun, 07 Jun 2009 00:16:05 +0000
parents f0621e47ccf3
children 6d26258e9f1d
line wrap: on
line diff
--- a/libpurple/protocols/jabber/google.c	Sat Jun 06 22:47:49 2009 +0000
+++ b/libpurple/protocols/jabber/google.c	Sun Jun 07 00:16:05 2009 +0000
@@ -987,7 +987,6 @@
 gboolean jabber_google_roster_incoming(JabberStream *js, xmlnode *item)
 {
 	PurpleAccount *account = purple_connection_get_account(js->gc);
-	GSList *list = account->deny;
 	const char *jid = xmlnode_get_attrib(item, "jid");
 	gboolean on_block_list = FALSE;
 
@@ -1005,18 +1004,20 @@
 
  	jid_norm = g_strdup(jabber_normalize(account, jid));
 
-	while (list) {
-		if (!strcmp(jid_norm, (char*)list->data)) {
-			on_block_list = TRUE;
-			break;
-		}
-		list = list->next;
-	}
+	on_block_list = NULL != g_slist_find_custom(account->deny, jid_norm,
+	                                            (GCompareFunc)strcmp);
 
 	if (grt && (*grt == 'H' || *grt == 'h')) {
-		PurpleBuddy *buddy = purple_find_buddy(account, jid_norm);
-		if (buddy)
-			purple_blist_remove_buddy(buddy);
+		/* Hidden; don't show this buddy. */
+		GSList *buddies = purple_find_buddies(account, jid_norm);
+		if (buddies)
+			purple_debug_info("jabber", "Removing %s from local buddy list\n",
+			                  jid_norm);
+
+		for ( ; buddies; buddies = g_slist_delete_link(buddies, buddies)) {
+			purple_blist_remove_buddy(buddies->data);
+		}
+
 		g_free(jid_norm);
 		return FALSE;
 	}