diff src/protocols/msn/msn.c @ 10602:f52ab405f1ab

[gaim-migrate @ 12032] This is patch 1112281 from Felipe Contreras, it prevents file transfers being cancelled when closing a conversation window with the sender/recipient. committer: Tailor Script <tailor@pidgin.im>
author Stu Tomlinson <stu@nosnilmot.com>
date Wed, 16 Feb 2005 20:14:12 +0000
parents 0f7452b1f777
children fe919915fceb
line wrap: on
line diff
--- a/src/protocols/msn/msn.c	Wed Feb 16 03:57:23 2005 +0000
+++ b/src/protocols/msn/msn.c	Wed Feb 16 20:14:12 2005 +0000
@@ -338,6 +338,7 @@
 	/* TODO: This might move somewhere else, after USR might be */
 	swboard->chat_id = session->conv_seq++;
 	swboard->conv = serv_got_joined_chat(gc, swboard->chat_id, "MSN Chat");
+	swboard->flag = MSN_SB_FLAG_IM;
 
 	gaim_conv_chat_add_user(GAIM_CONV_CHAT(swboard->conv),
 							gaim_account_get_username(buddy->account), NULL, GAIM_CBFLAGS_NONE, TRUE);
@@ -738,7 +739,7 @@
 		MsnSwitchBoard *swboard;
 
 		session = gc->proto_data;
-		swboard = msn_session_get_swboard(session, who);
+		swboard = msn_session_get_swboard(session, who, MSN_SB_FLAG_IM);
 
 		msn_switchboard_send_msg(swboard, msg, TRUE);
 	}
@@ -794,7 +795,7 @@
 		return MSN_TYPING_SEND_TIMEOUT;
 	}
 
-	swboard = msn_session_find_swboard(session, who);
+	swboard = msn_session_find_swboard(session, who, MSN_SB_FLAG_IM);
 
 	if (swboard == NULL || !msn_switchboard_can_send(swboard))
 		return 0;
@@ -1081,7 +1082,7 @@
 
 	session = gc->proto_data;
 
-	swboard = msn_session_find_switch_with_id(session, id);
+	swboard = msn_session_find_swboard_with_id(session, id, MSN_SB_FLAG_IM);
 
 	if (swboard == NULL)
 	{
@@ -1090,6 +1091,7 @@
 		msn_switchboard_request(swboard);
 		swboard->chat_id = id;
 		swboard->conv = gaim_find_chat(gc, id);
+		swboard->flag = MSN_SB_FLAG_IM;
 	}
 
 	msn_switchboard_request_add_user(swboard, who);
@@ -1103,7 +1105,7 @@
 
 	session = gc->proto_data;
 
-	swboard = msn_session_find_switch_with_id(session, id);
+	swboard = msn_session_find_swboard_with_id(session, id, MSN_SB_FLAG_IM);
 
 	/* if swboard is NULL we were the only person left anyway */
 	if (swboard == NULL)
@@ -1124,7 +1126,7 @@
 
 	account = gaim_connection_get_account(gc);
 	session = gc->proto_data;
-	swboard = msn_session_find_switch_with_id(session, id);
+	swboard = msn_session_find_swboard_with_id(session, id, MSN_SB_FLAG_IM);
 
 	if (swboard == NULL)
 		return -EINVAL;
@@ -1160,14 +1162,17 @@
 msn_keepalive(GaimConnection *gc)
 {
 	MsnSession *session;
-	MsnCmdProc *cmdproc;
 
 	session = gc->proto_data;
 
-	cmdproc = session->notification->cmdproc;
+	if (!session->http_method)
+	{
+		MsnCmdProc *cmdproc;
 
-	if (!session->http_method)
+		cmdproc = session->notification->cmdproc;
+
 		msn_cmdproc_send_quick(cmdproc, "PNG", NULL, NULL);
+	}
 }
 
 static void
@@ -1217,17 +1222,20 @@
 
 	session = gc->proto_data;
 
-	swboard = msn_session_find_swboard(session, who);
+	swboard = msn_session_find_swboard(session, who, MSN_SB_FLAG_IM);
 
 	/*
-	 * Don't perform an assertion here. It swboard is NULL, then the
+	 * Don't perform an assertion here. If swboard is NULL, then the
 	 * switchboard was either closed by the other party, or the person
 	 * is talking to himself.
 	 */
 	if (swboard == NULL)
 		return;
 
-	msn_switchboard_close(swboard);
+	if (!(swboard->flag & MSN_SB_FLAG_FT))
+		msn_switchboard_close(swboard);
+	else
+		swboard->conv = NULL;
 }
 
 static void