changeset 17065:21830d70709b

Patch from sourceforge tracker 1652005 from wabz to fix displaying file transfer progress for MSN transfers. Fixes #595.
author Stu Tomlinson <stu@nosnilmot.com>
date Sat, 12 May 2007 13:20:04 +0000
parents 53e757c37e06
children 8ee93c68ced0
files libpurple/ft.c libpurple/protocols/msn/msn.c libpurple/protocols/msn/slp.c libpurple/protocols/msn/slplink.c
diffstat 4 files changed, 18 insertions(+), 33 deletions(-) [+]
line wrap: on
line diff
--- a/libpurple/ft.c	Fri May 11 20:06:57 2007 +0000
+++ b/libpurple/ft.c	Sat May 12 13:20:04 2007 +0000
@@ -972,7 +972,8 @@
 
 	fseek(xfer->dest_fp, xfer->bytes_sent, SEEK_SET);
 
-	xfer->watcher = purple_input_add(xfer->fd, cond, transfer_cb, xfer);
+	if (xfer->fd)
+		xfer->watcher = purple_input_add(xfer->fd, cond, transfer_cb, xfer);
 
 	xfer->start_time = time(NULL);
 
--- a/libpurple/protocols/msn/msn.c	Fri May 11 20:06:57 2007 +0000
+++ b/libpurple/protocols/msn/msn.c	Sat May 12 13:20:04 2007 +0000
@@ -409,33 +409,7 @@
 static void
 t_msn_xfer_init(PurpleXfer *xfer)
 {
-	MsnSlpLink *slplink;
-	const char *filename;
-	FILE *fp;
-
-	filename = purple_xfer_get_local_filename(xfer);
-
-	slplink = xfer->data;
-
-	if ((fp = g_fopen(filename, "rb")) == NULL)
-	{
-		PurpleAccount *account;
-		const char *who;
-		char *msg;
-
-		account = slplink->session->account;
-		who = slplink->remote_user;
-
-		msg = g_strdup_printf(_("Error reading %s: \n%s.\n"),
-							  filename, strerror(errno));
-		purple_xfer_error(purple_xfer_get_type(xfer), account, xfer->who, msg);
-		purple_xfer_cancel_local(xfer);
-		g_free(msg);
-
-		return;
-	}
-	fclose(fp);
-
+	MsnSlpLink *slplink = xfer->data;
 	msn_slplink_request_ft(slplink, xfer);
 }
 
--- a/libpurple/protocols/msn/slp.c	Fri May 11 20:06:57 2007 +0000
+++ b/libpurple/protocols/msn/slp.c	Sat May 12 13:20:04 2007 +0000
@@ -158,7 +158,9 @@
 msn_xfer_completed_cb(MsnSlpCall *slpcall, const guchar *body,
 					  gsize size)
 {
-	purple_xfer_set_completed(slpcall->xfer, TRUE);
+	PurpleXfer *xfer = slpcall->xfer;
+	purple_xfer_set_completed(xfer, TRUE);
+	purple_xfer_end(xfer);
 }
 
 /**************************************************************************
--- a/libpurple/protocols/msn/slplink.c	Fri May 11 20:06:57 2007 +0000
+++ b/libpurple/protocols/msn/slplink.c	Sat May 12 13:20:04 2007 +0000
@@ -482,6 +482,8 @@
 {
 	MsnSlpCall *slpcall;
 	MsnSlpMessage *slpmsg;
+	struct stat st;
+	PurpleXfer *xfer;
 
 	slpcall = slpsession->slpcall;
 	slpmsg = msn_slpmsg_new(slpcall->slplink);
@@ -491,7 +493,12 @@
 #ifdef MSN_DEBUG_SLP
 	slpmsg->info = "SLP FILE";
 #endif
-	msn_slpmsg_open_file(slpmsg, purple_xfer_get_local_filename(slpcall->xfer));
+	xfer = (PurpleXfer *)slpcall->xfer;
+	purple_xfer_start(slpcall->xfer, 0, NULL, 0);
+	slpmsg->fp = xfer->dest_fp;
+	if (g_stat(purple_xfer_get_local_filename(xfer), &st) == 0)
+		slpmsg->size = st.st_size;
+	xfer->dest_fp = NULL; /* Disable double fclose() */
 
 	msn_slplink_send_slpmsg(slpcall->slplink, slpmsg);
 }
@@ -551,9 +558,10 @@
 
 					if (xfer != NULL)
 					{
-						slpmsg->fp =
-							g_fopen(purple_xfer_get_local_filename(slpmsg->slpcall->xfer),
-								  "wb");
+						purple_xfer_start(slpmsg->slpcall->xfer,
+							0, NULL, 0);
+						slpmsg->fp = ((PurpleXfer *)slpmsg->slpcall->xfer)->dest_fp;
+						xfer->dest_fp = NULL; /* Disable double fclose() */
 					}
 				}
 			}