summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStu Tomlinson <nosnilmot@pidgin.im>2007-05-12 13:20:04 +0000
committerStu Tomlinson <nosnilmot@pidgin.im>2007-05-12 13:20:04 +0000
commitb589a86f5566fe80cc6785f90e0bc9ebb874adf7 (patch)
tree913d7581817c52af4bca6addf430c45b6ce762f4
parenteb3002bf2c2d78b834a5d59db8a7226522fe286c (diff)
downloadpidgin-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.c3
-rw-r--r--libpurple/protocols/msn/msn.c28
-rw-r--r--libpurple/protocols/msn/slp.c4
-rw-r--r--libpurple/protocols/msn/slplink.c16
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() */
}
}
}