changeset 21108:cc43e75a1da7

merge of '772308477d928d281291577b4419345699dbadab' and 'ed4bbce61c745ed89765f52ffe38807c3ee2c9ed'
author Ka-Hing Cheung <khc@hxbc.us>
date Thu, 25 Oct 2007 08:33:59 +0000
parents 95684692f622 (diff) ca624eda4267 (current diff)
children 13279824fe64
files libpurple/protocols/msn/contact.c
diffstat 1 files changed, 31 insertions(+), 101 deletions(-) [+]
line wrap: on
line diff
--- a/libpurple/protocols/msn/contact.c	Wed Oct 24 06:45:26 2007 +0000
+++ b/libpurple/protocols/msn/contact.c	Thu Oct 25 08:33:59 2007 +0000
@@ -159,36 +159,6 @@
 	state->action |= action;
 }
 
-/*contact SOAP server login error*/
-static void
-msn_contact_login_error_cb(MsnSoapConn *soapconn, PurpleSslConnection *gsc, PurpleSslErrorType error)
-{
-	MsnSession *session;
-
-	session = soapconn->session;
-	g_return_if_fail(session != NULL);
-
-	msn_session_set_error(session, MSN_ERROR_SERV_DOWN, _("Unable to connect to contact server"));
-}
-
-/*msn contact SOAP server connect process*/
-static gboolean
-msn_contact_login_connect_cb(MsnSoapConn *soapconn, PurpleSslConnection *gsc)
-{
-	MsnSession * session;
-	MsnContact *contact;
-
-	contact = soapconn->parent;
-	g_return_val_if_fail(contact != NULL, TRUE);
-
-	session = contact->session;
-	g_return_val_if_fail(session != NULL, FALSE);
-
-	/*login ok!We can retrieve the contact list*/
-//	msn_get_contact_list(contact, MSN_PS_INITIAL, NULL);
-	return TRUE;
-}
-
 /*get MSN member role utility*/
 static MsnListId
 msn_get_memberrole(const char *role)
@@ -227,24 +197,6 @@
 }
 
 /* Create the AddressBook in the server, if we don't have one */
-static gboolean
-msn_create_address_cb(MsnSoapConn *soapconn)
-{
-	MsnContact *contact;
-
-	if (soapconn->body == NULL)
-		return TRUE;
-
-	contact = soapconn->parent;
-	g_return_val_if_fail(contact != NULL, TRUE);
-
-	purple_debug_info("MSN AddressBook", "Address Book successfully created!\n");
-	msn_get_address_book(contact, MSN_PS_INITIAL, NULL, NULL);
-
-//	msn_soap_free_read_buf(soapconn);
-	return TRUE;
-}
-
 static void
 msn_create_address_cb(MsnSoapMessage *req, MsnSoapMessage *resp, gpointer data)
 {
@@ -703,17 +655,17 @@
 		xmlnode *node2;
 		char *tmp = NULL;
 
-		LastChangeNode = xmlnode_get_child(abNode,"lastChange");
-		lastchange = xmlnode_get_data(LastChangeNode);
-		purple_debug_info("MSNAB"," lastchanged Time:{%s}\n",lastchange);
-		purple_account_set_string(session->account, "ablastChange", lastchange);
+		if ((node2 = xmlnode_get_child(abNode, "lastChange")))
+			tmp = xmlnode_get_data(node2);
+		purple_debug_info("MsnAB"," lastchanged Time:{%s}\n", tmp ? tmp : "(null)");
+		purple_account_set_string(session->account, "ablastChange", tmp);
 
-		DynamicItemLastChangedNode = xmlnode_get_child(abNode,"DynamicItemLastChanged");
-		dynamicChange = xmlnode_get_data(DynamicItemLastChangedNode);
-		purple_debug_info("MSNAB"," DynamicItemLastChanged :{%s}\n",dynamicChange);
-		purple_account_set_string(session->account, "DynamicItemLastChanged", lastchange);
-		g_free(dynamicChange);
-		g_free(lastchange);
+		g_free(tmp); tmp = NULL;
+		if ((node2 = xmlnode_get_child(abNode, "DynamicItemLastChanged")))
+			tmp = xmlnode_get_data(node2);
+		purple_debug_info("MsnAB"," DynamicItemLastChanged :{%s}\n", tmp ? tmp : "(null)");
+		purple_account_set_string(session->account, "DynamicItemLastChanged", tmp);
+		g_free(tmp);
 	}
 
 	return TRUE;
@@ -757,14 +709,6 @@
 	}
 }
 
-/**/
-static void
-msn_address_written_cb(MsnSoapConn *soapconn)
-{
-	purple_debug_misc("MSN AddressBook","Sent SOAP request for the Address Book.\n");
-	soapconn->read_cb = msn_get_address_cb;
-}
-
 /*get the address book*/
 void
 msn_get_address_book(MsnContact *contact,
@@ -836,15 +780,6 @@
 	}
 	
 	msn_callback_state_free(state);
-
-	return TRUE;
-}
-
-static void
-msn_add_contact_written_cb(MsnSoapConn *soapconn)
-{
-	purple_debug_info("MSNCL","Add contact request written\n");
-	soapconn->read_cb = msn_add_contact_read_cb;
 }
 
 /* add a Contact in MSN_INDIVIDUALS_GROUP */
@@ -993,10 +928,21 @@
 msn_delete_contact_read_cb(MsnSoapMessage *req, MsnSoapMessage *resp,
 	gpointer data)
 {
-	if (resp == NULL)
-		return;
+	MsnCallbackState *state = data;
+
+	if (resp != NULL) {
+		MsnUser *user;
+		MsnUserList *userlist = state->session->userlist;
+
+		purple_debug_info("MSNCL","Delete contact successful\n");
 
-	purple_debug_info("MSNCL","Delete contact successful\n");
+		user = msn_userlist_find_user_with_id(userlist, state->uid);
+		if (user != NULL) {
+			msn_userlist_remove_user(userlist, user);
+		}
+	}
+
+	msn_callback_state_free(state);
 }
 
 /*delete a Contact*/
@@ -1005,21 +951,23 @@
 {	
 	gchar *body = NULL;
 	gchar *contact_id_xml = NULL ;
+    MsnCallbackState *state;
 
 	g_return_if_fail(contactId != NULL);
 	contact_id_xml = g_strdup_printf(MSN_CONTACT_ID_XML, contactId);
 
-	state = msn_callback_state_new();
+	state = msn_callback_state_new(contact->session);
 	msn_callback_state_set_uid(state, contactId);
 
 	/* build SOAP request */
 	purple_debug_info("MSNCL","Deleting contact with contactId: %s\n", contactId);
 	body = g_strdup_printf(MSN_DEL_CONTACT_TEMPLATE, contact_id_xml);
-	msn_soap_message_send(contact->session,
+
+	msn_soap_message_send(state->session,
 		msn_soap_message_new(MSN_CONTACT_DEL_SOAP_ACTION,
 			xmlnode_from_str(body, -1)),
 		MSN_CONTACT_SERVER, MSN_ADDRESS_BOOK_POST_URL,
-		msn_delete_contact_read_cb, NULL);
+		msn_delete_contact_read_cb, state);
 
 	g_free(contact_id_xml);
 	g_free(body);
@@ -1099,17 +1047,6 @@
 }
 
 
-static gboolean
-msn_update_contact_read_cb(MsnSoapConn *soapconn)
-{
-	if (soapconn->body == NULL)
-		return TRUE;
-
-	purple_debug_info("MSN CL","Contact updated successfully\n");
-
-	return TRUE;
-}
-
 static void
 msn_update_contact_read_cb(MsnSoapMessage *req, MsnSoapMessage *resp,
 	gpointer data)
@@ -1241,9 +1178,9 @@
 	}
 
 	if (state->list_id == MSN_LIST_AL) {
-		purple_privacy_permit_add(soapconn->session->account, state->who, TRUE);
+		purple_privacy_permit_add(state->session->account, state->who, TRUE);
 	} else if (state->list_id == MSN_LIST_BL) {
-		purple_privacy_deny_add(soapconn->session->account, state->who, TRUE);
+		purple_privacy_deny_add(state->session->account, state->who, TRUE);
 	}
 
 	msn_callback_state_free(state);
@@ -1288,13 +1225,6 @@
 }
 
 #if 0
-static gboolean
-msn_gleams_read_cb(MsnSoapConn * soapconn)
-{
-	purple_debug_info("MSN CL","Gleams read done\n");
-	return TRUE;
-}
-
 static void
 msn_gleams_read_cb(MsnSoapMessage *req, MsnSoapMessage *resp, gpointer data)
 {