diff libpurple/protocols/jabber/google.c @ 27509:ebd9630ffc77

propagate from branch 'im.pidgin.pidgin' (head cec487e50b3df746ae8b23771513bf85734f618d) to branch 'im.pidgin.cpw.darkrain42.obsolete' (head 1fc27ec0bc11e95aeff8c890ab68a5ddcb4bfb8d)
author Paul Aurich <paul@darkrain42.org>
date Sun, 12 Jul 2009 04:41:56 +0000
parents 3bb1085235d0
children a12574d982a1
line wrap: on
line diff
--- a/libpurple/protocols/jabber/google.c	Mon Jul 06 04:38:08 2009 +0000
+++ b/libpurple/protocols/jabber/google.c	Sun Jul 12 04:41:56 2009 +0000
@@ -787,7 +787,7 @@
 {
 	xmlnode *child;
 	xmlnode *message;
-	const char *to, *default_url;
+	const char *to, *url;
 	const char *in_str;
 	char *to_name;
 
@@ -837,20 +837,16 @@
 
 	to = xmlnode_get_attrib(packet, "to");
 	to_name = jabber_get_bare_jid(to);
-	default_url = xmlnode_get_attrib(child, "url");
-	if (default_url == NULL || *default_url == '\0')
-		default_url = "http://mail.google.com/mail";
+	url = xmlnode_get_attrib(child, "url");
+	if (!url || !*url)
+		url = "http://www.gmail.com";
 
 	message= xmlnode_get_child(child, "mail-thread-info");
 	for (i=0; message; message = xmlnode_get_next_twin(message), i++) {
 		xmlnode *sender_node, *subject_node;
-		const char *from, *tid, *url;
+		const char *from, *tid;
 		char *subject;
 
-		url = xmlnode_get_attrib(message, "url");
-		if (url == NULL || *url == '\0')
-			url = default_url;
-
 		subject_node = xmlnode_get_child(message, "subject");
 		sender_node  = xmlnode_get_child(message, "senders");
 		sender_node  = xmlnode_get_child(sender_node, "sender");
@@ -1006,7 +1002,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;
 
@@ -1024,18 +1019,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;
 	}
@@ -1066,7 +1063,7 @@
 
 	js = (JabberStream*)(gc->proto_data);
 
-	if (!js || !js->server_caps & JABBER_CAP_GOOGLE_ROSTER)
+	if (!js || !(js->server_caps & JABBER_CAP_GOOGLE_ROSTER))
 		return;
 
 	jb = jabber_buddy_find(js, who, TRUE);
@@ -1136,7 +1133,7 @@
 
 	js = (JabberStream*)(gc->proto_data);
 
-	if (!js || !js->server_caps & JABBER_CAP_GOOGLE_ROSTER)
+	if (!js || !(js->server_caps & JABBER_CAP_GOOGLE_ROSTER))
 		return;
 
 	buddies = purple_find_buddies(purple_connection_get_account(js->gc), who);