diff options
author | Stu Tomlinson <nosnilmot@pidgin.im> | 2007-05-12 13:20:04 +0000 |
---|---|---|
committer | Stu Tomlinson <nosnilmot@pidgin.im> | 2007-05-12 13:20:04 +0000 |
commit | b589a86f5566fe80cc6785f90e0bc9ebb874adf7 (patch) | |
tree | 913d7581817c52af4bca6addf430c45b6ce762f4 | |
parent | eb3002bf2c2d78b834a5d59db8a7226522fe286c (diff) | |
download | pidgin-b589a86f5566fe80cc6785f90e0bc9ebb874adf7.tar.gz |
Patch from sourceforge tracker 1652005 from wabz to fix displaying file
transfer progress for MSN transfers.
Fixes #595.
-rw-r--r-- | libpurple/ft.c | 3 | ||||
-rw-r--r-- | libpurple/protocols/msn/msn.c | 28 | ||||
-rw-r--r-- | libpurple/protocols/msn/slp.c | 4 | ||||
-rw-r--r-- | libpurple/protocols/msn/slplink.c | 16 |
4 files changed, 18 insertions, 33 deletions
diff --git a/libpurple/ft.c b/libpurple/ft.c index 8d37c8ff78..9fdf435a4f 100644 --- a/libpurple/ft.c +++ b/libpurple/ft.c @@ -972,7 +972,8 @@ begin_transfer(PurpleXfer *xfer, PurpleInputCondition cond) 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 --git a/libpurple/protocols/msn/msn.c b/libpurple/protocols/msn/msn.c index 82bf219833..8e17176b56 100644 --- a/libpurple/protocols/msn/msn.c +++ b/libpurple/protocols/msn/msn.c @@ -409,33 +409,7 @@ initiate_chat_cb(PurpleBlistNode *node, gpointer data) 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 --git a/libpurple/protocols/msn/slp.c b/libpurple/protocols/msn/slp.c index 3f2e5ab01b..c52026f533 100644 --- a/libpurple/protocols/msn/slp.c +++ b/libpurple/protocols/msn/slp.c @@ -158,7 +158,9 @@ void 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 --git a/libpurple/protocols/msn/slplink.c b/libpurple/protocols/msn/slplink.c index 70e1d0d36c..cb6b98b53b 100644 --- a/libpurple/protocols/msn/slplink.c +++ b/libpurple/protocols/msn/slplink.c @@ -482,6 +482,8 @@ send_file_cb(MsnSlpSession *slpsession) { MsnSlpCall *slpcall; MsnSlpMessage *slpmsg; + struct stat st; + PurpleXfer *xfer; slpcall = slpsession->slpcall; slpmsg = msn_slpmsg_new(slpcall->slplink); @@ -491,7 +493,12 @@ send_file_cb(MsnSlpSession *slpsession) #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 @@ msn_slplink_process_msg(MsnSlpLink *slplink, MsnMessage *msg) 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() */ } } } |