# HG changeset patch # User Stu Tomlinson # Date 1178976004 0 # Node ID 21830d70709bfa56783cd656f5e80aaca24a411c # Parent 53e757c37e06791e5a4b54fc4b536fabf8eb2d3d Patch from sourceforge tracker 1652005 from wabz to fix displaying file transfer progress for MSN transfers. Fixes #595. diff -r 53e757c37e06 -r 21830d70709b libpurple/ft.c --- 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); diff -r 53e757c37e06 -r 21830d70709b libpurple/protocols/msn/msn.c --- 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); } diff -r 53e757c37e06 -r 21830d70709b libpurple/protocols/msn/slp.c --- 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); } /************************************************************************** diff -r 53e757c37e06 -r 21830d70709b libpurple/protocols/msn/slplink.c --- 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() */ } } }