src/protocols/msn/msn.c

changeset 10275
186d84a66cc3
parent 10274
f329b1d7fd43
child 10296
9badf1cedc6e
--- a/src/protocols/msn/msn.c	Sat Nov 27 19:39:25 2004 +0000
+++ b/src/protocols/msn/msn.c	Sun Nov 28 18:13:18 2004 +0000
@@ -49,8 +49,6 @@
 
 #define BUDDY_ALIAS_MAXLEN 387
 
-static GaimPlugin *my_protocol = NULL;
-
 typedef struct
 {
 	GaimConnection *gc;
@@ -458,8 +456,15 @@
 	{
 		emblems[0] = "offline";
 	}
-	else if (user->mobile)
-		emblems[i++] = "wireless";
+	else
+	{
+		if (user->mobile)
+			emblems[i++] = "wireless";
+		if (user->list_op & (1 << MSN_LIST_BL))
+			emblems[i++] = "blocked";
+		if (!(user->list_op & (1 << MSN_LIST_RL)))
+			emblems[i++] = "nr";
+	}
 
 	*se = emblems[0];
 	*sw = emblems[1];
@@ -507,6 +512,9 @@
 		g_string_append_printf(s, _("\n<b>%s:</b> %s"), _("Has you"),
 							   (user->list_op & (1 << MSN_LIST_RL)) ?
 							   _("Yes") : _("No"));
+		g_string_append_printf(s, _("\n<b>%s:</b> %s"), _("Blocked"),
+							   (user->list_op & (1 << MSN_LIST_BL)) ?
+							   _("Yes") : _("No"));
 	}
 
 	return g_string_free(s, FALSE);
@@ -679,7 +687,6 @@
 	}
 
 	session = msn_session_new(account, host, port, http_method);
-	session->prpl = my_protocol;
 
 	if (session->http_method)
 		msn_http_session_init(session);
@@ -720,37 +727,36 @@
 			GaimConvImFlags flags)
 {
 	GaimAccount *account;
+	MsnMessage *msg;
+	char *msgformat;
+	char *msgtext;
 
 	account = gaim_connection_get_account(gc);
 
+	msn_import_html(message, &msgformat, &msgtext);
+
+	if (strlen(msgtext) + strlen(msgformat) + strlen(VERSION) > 1564)
+	{
+		g_free(msgformat);
+		g_free(msgtext);
+
+		return -E2BIG;
+	}
+
+	msg = msn_message_new_plain(msgtext);
+	msn_message_set_attr(msg, "X-MMS-IM-Format", msgformat);
+
+	g_free(msgformat);
+	g_free(msgtext);
+
 	if (g_ascii_strcasecmp(who, gaim_account_get_username(account)))
 	{
 		MsnSession *session;
 		MsnSwitchBoard *swboard;
-		MsnMessage *msg;
-		char *msgformat;
-		char *msgtext;
 
 		session = gc->proto_data;
 		swboard = msn_session_get_swboard(session, who);
 
-		msn_import_html(message, &msgformat, &msgtext);
-
-		if (strlen(msgtext) + strlen(msgformat) + strlen(VERSION) > 1564)
-		{
-			g_free(msgformat);
-			g_free(msgtext);
-
-			return -E2BIG;
-		}
-
-		msg = msn_message_new_plain(msgtext);
-		msn_message_set_attr(msg, "X-MMS-IM-Format", msgformat);
-
-		g_free(msgformat);
-		g_free(msgtext);
-
-		swboard = msn_session_get_swboard(session, who);
 
 		if (!g_queue_is_empty(swboard->im_queue) ||
 			!swboard->user_joined)
@@ -762,18 +768,32 @@
 			msn_switchboard_send_msg(swboard, msg);
 		}
 
-		msn_message_destroy(msg);
 	}
 	else
 	{
+		char *body_str, *body_enc, *pre, *post;
+		const char *format;
 		/*
 		 * In MSN, you can't send messages to yourself, so
 		 * we'll fake like we received it ;)
 		 */
+		body_str = msn_message_to_string(msg);
+		body_enc = gaim_escape_html(body_str);
+		g_free(body_str);
+
+		format = msn_message_get_attr(msg, "X-MMS-IM-Format");
+		msn_parse_format(format, &pre, &post);
+		body_str = g_strdup_printf("%s%s%s", pre, body_enc, post);
+		g_free(pre);
+		g_free(post);
+
 		serv_got_typing_stopped(gc, who);
-		serv_got_im(gc, who, message, flags, time(NULL));
+		serv_got_im(gc, who, body_str, flags, time(NULL));
+		g_free(body_str);
 	}
 
+	msn_message_destroy(msg);
+
 	return 1;
 }
 
@@ -1949,8 +1969,6 @@
 	prpl_info.protocol_options = g_list_append(prpl_info.protocol_options,
 											   option);
 
-	my_protocol = plugin;
-
 	gaim_prefs_add_none("/plugins/prpl/msn");
 	gaim_prefs_add_bool("/plugins/prpl/msn/conv_close_notice",   TRUE);
 	gaim_prefs_add_bool("/plugins/prpl/msn/conv_timeout_notice", TRUE);

mercurial