src/protocols/msn/notification.c

changeset 5363
b6e28be0c9bd
parent 5361
a964b856e97f
child 5364
d423753cfd63
--- a/src/protocols/msn/notification.c	Tue May 13 04:37:37 2003 +0000
+++ b/src/protocols/msn/notification.c	Tue May 13 08:03:27 2003 +0000
@@ -431,25 +431,37 @@
 __bpr_cmd(MsnServConn *servconn, const char *command, const char **params,
 		  size_t param_count)
 {
-	struct gaim_connection *gc = servconn->session->account->gc;
+	MsnSession *session = servconn->session;
+	struct gaim_connection *gc = session->account->gc;
 	struct buddy *b;
 	const char *passport, *type, *value;
 	int status = 0;
+	MsnUser *user;
 
 	passport = params[1];
 	type     = params[2];
 	value    = params[3];
 
-	if (!strcmp(type, "MOB")) {
-		if (value != NULL && !strcmp(value, "Y")) {
-			gaim_debug(GAIM_DEBUG_MISC, "msn",
-					   "%s has a pager\n", passport);
-			if ((b = gaim_find_buddy(gc->account, passport)) != NULL) {
-				status = b->uc | (1 << 5);
+	user = msn_users_find_with_passport(session->users, passport);
 
-				serv_got_update(gc, (char *)passport, 1, 0, 0, 0, status);
+	if (value != NULL) {
+		if (!strcmp(type, "MOB")) {
+			if (!strcmp(value, "Y")) {
+				gaim_debug(GAIM_DEBUG_MISC, "msn",
+						   "%s has a pager\n", passport);
+				if ((b = gaim_find_buddy(gc->account, passport)) != NULL) {
+					status = b->uc | (1 << 5);
+
+					serv_got_update(gc, (char *)passport, 1, 0, 0, 0, status);
+				}
 			}
 		}
+		else if (!strcmp(type, "PHH"))
+			msn_user_set_home_phone(user, msn_url_decode(value));
+		else if (!strcmp(type, "PHW"))
+			msn_user_set_work_phone(user, msn_url_decode(value));
+		else if (!strcmp(type, "PHM"))
+			msn_user_set_mobile_phone(user, msn_url_decode(value));
 	}
 
 	return TRUE;
@@ -696,13 +708,13 @@
 				b = gaim_buddy_new(gc->account,
 								   msn_user_get_passport(user), NULL);
 
+				b->proto_data = user;
+
 				gaim_blist_add_buddy(b, g, NULL);
 			}
 
 			serv_got_alias(gc, (char *)msn_user_get_passport(user),
 						   (char *)msn_user_get_name(user));
-
-			msn_user_destroy(user);
 		}
 	}
 
@@ -745,6 +757,28 @@
 }
 
 static gboolean
+__prp_cmd(MsnServConn *servconn, const char *command, const char **params,
+		  size_t param_count)
+{
+	MsnSession *session = servconn->session;
+	const char *type, *value;
+
+	type  = params[2];
+	value = params[3];
+
+	if (param_count == 4) {
+		if (!strcmp(type, "PHH"))
+			msn_user_set_home_phone(session->user, msn_url_decode(value));
+		else if (!strcmp(type, "PHW"))
+			msn_user_set_work_phone(session->user, msn_url_decode(value));
+		else if (!strcmp(type, "PHM"))
+			msn_user_set_mobile_phone(session->user, msn_url_decode(value));
+	}
+
+	return TRUE;
+}
+
+static gboolean
 __rea_cmd(MsnServConn *servconn, const char *command, const char **params,
 		  size_t param_count)
 {
@@ -1196,6 +1230,8 @@
 		return FALSE;
 	}
 
+	session->user = msn_user_new(session, gc->username, NULL);
+
 	set_login_progress(session->account->gc, 4, _("Syncing with server"));
 
 	return TRUE;
@@ -1241,7 +1277,7 @@
 		msn_servconn_register_command(notification, "MSG",       __msg_cmd);
 		msn_servconn_register_command(notification, "NLN",       __nln_cmd);
 		msn_servconn_register_command(notification, "OUT",       __out_cmd);
-		msn_servconn_register_command(notification, "PRP",       __blank_cmd);
+		msn_servconn_register_command(notification, "PRP",       __prp_cmd);
 		msn_servconn_register_command(notification, "QNG",       __blank_cmd);
 		msn_servconn_register_command(notification, "QRY",       __blank_cmd);
 		msn_servconn_register_command(notification, "REA",       __rea_cmd);

mercurial