Mercurial > pidgin
comparison libpurple/ft.c @ 29347:dcd52d2b1b97
propagate from branch 'im.pidgin.pidgin' (head d5a2e2287440ac7134c201e66921754bd4187ba9)
to branch 'im.pidgin.pidgin.next.minor' (head 8be858d2b980ae4cf363247290bb782ab4362bec)
author | Daniel Atallah <daniel.atallah@gmail.com> |
---|---|
date | Sat, 09 Jan 2010 04:03:53 +0000 |
parents | ba8577b87d2e 07ec4a569da1 |
children | 422889fb57e0 |
comparison
equal
deleted
inserted
replaced
29346:ba8577b87d2e | 29347:dcd52d2b1b97 |
---|---|
71 g_byte_array_free(priv->buffer, TRUE); | 71 g_byte_array_free(priv->buffer, TRUE); |
72 | 72 |
73 g_free(priv); | 73 g_free(priv); |
74 } | 74 } |
75 | 75 |
76 static const gchar * | |
77 purple_xfer_status_type_to_string(PurpleXferStatusType type) | |
78 { | |
79 static const struct { | |
80 PurpleXferStatusType type; | |
81 const char *name; | |
82 } type_names[] = { | |
83 { PURPLE_XFER_STATUS_UNKNOWN, "unknown" }, | |
84 { PURPLE_XFER_STATUS_NOT_STARTED, "not started" }, | |
85 { PURPLE_XFER_STATUS_ACCEPTED, "accepted" }, | |
86 { PURPLE_XFER_STATUS_STARTED, "started" }, | |
87 { PURPLE_XFER_STATUS_DONE, "done" }, | |
88 { PURPLE_XFER_STATUS_CANCEL_LOCAL, "cancelled locally" }, | |
89 { PURPLE_XFER_STATUS_CANCEL_REMOTE, "cancelled remotely" } | |
90 }; | |
91 int i; | |
92 | |
93 for (i = 0; i < G_N_ELEMENTS(type_names); ++i) | |
94 if (type_names[i].type == type) | |
95 return type_names[i].name; | |
96 | |
97 return "invalid state"; | |
98 } | |
99 | |
76 GList * | 100 GList * |
77 purple_xfers_get_all() | 101 purple_xfers_get_all() |
78 { | 102 { |
79 return xfers; | 103 return xfers; |
80 } | 104 } |
185 | 209 |
186 static void | 210 static void |
187 purple_xfer_set_status(PurpleXfer *xfer, PurpleXferStatusType status) | 211 purple_xfer_set_status(PurpleXfer *xfer, PurpleXferStatusType status) |
188 { | 212 { |
189 g_return_if_fail(xfer != NULL); | 213 g_return_if_fail(xfer != NULL); |
214 | |
215 if (purple_debug_is_verbose()) | |
216 purple_debug_info("xfer", "Changing status of xfer %p from %s to %s\n", | |
217 xfer, purple_xfer_status_type_to_string(xfer->status), | |
218 purple_xfer_status_type_to_string(status)); | |
190 | 219 |
191 if (xfer->status == status) | 220 if (xfer->status == status) |
192 return; | 221 return; |
193 | 222 |
194 xfer->status = status; | 223 xfer->status = status; |
545 return; | 574 return; |
546 | 575 |
547 type = purple_xfer_get_type(xfer); | 576 type = purple_xfer_get_type(xfer); |
548 account = purple_xfer_get_account(xfer); | 577 account = purple_xfer_get_account(xfer); |
549 | 578 |
579 purple_debug_misc("xfer", "request accepted for %p\n", xfer); | |
580 | |
550 if (!filename && type == PURPLE_XFER_RECEIVE) { | 581 if (!filename && type == PURPLE_XFER_RECEIVE) { |
551 xfer->status = PURPLE_XFER_STATUS_ACCEPTED; | 582 xfer->status = PURPLE_XFER_STATUS_ACCEPTED; |
552 xfer->ops.init(xfer); | 583 xfer->ops.init(xfer); |
553 return; | 584 return; |
554 } | 585 } |
621 | 652 |
622 void | 653 void |
623 purple_xfer_request_denied(PurpleXfer *xfer) | 654 purple_xfer_request_denied(PurpleXfer *xfer) |
624 { | 655 { |
625 g_return_if_fail(xfer != NULL); | 656 g_return_if_fail(xfer != NULL); |
657 | |
658 purple_debug_misc("xfer", "xfer %p denied\n", xfer); | |
626 | 659 |
627 if (xfer->ops.request_denied != NULL) | 660 if (xfer->ops.request_denied != NULL) |
628 xfer->ops.request_denied(xfer); | 661 xfer->ops.request_denied(xfer); |
629 | 662 |
630 purple_xfer_unref(xfer); | 663 purple_xfer_unref(xfer); |
1174 if (0 == (priv->ready & PURPLE_XFER_READY_UI)) { | 1207 if (0 == (priv->ready & PURPLE_XFER_READY_UI)) { |
1175 priv->ready |= PURPLE_XFER_READY_PRPL; | 1208 priv->ready |= PURPLE_XFER_READY_PRPL; |
1176 | 1209 |
1177 purple_input_remove(xfer->watcher); | 1210 purple_input_remove(xfer->watcher); |
1178 xfer->watcher = 0; | 1211 xfer->watcher = 0; |
1212 | |
1213 purple_debug_misc("xfer", "prpl is ready on ft %p, waiting for UI\n", xfer); | |
1179 return; | 1214 return; |
1180 } | 1215 } |
1181 } | 1216 } |
1182 | 1217 |
1183 do_transfer(xfer); | 1218 do_transfer(xfer); |
1236 g_return_if_fail(xfer != NULL); | 1271 g_return_if_fail(xfer != NULL); |
1237 | 1272 |
1238 priv = g_hash_table_lookup(xfers_data, xfer); | 1273 priv = g_hash_table_lookup(xfers_data, xfer); |
1239 priv->ready |= PURPLE_XFER_READY_UI; | 1274 priv->ready |= PURPLE_XFER_READY_UI; |
1240 | 1275 |
1241 if (0 == (priv->ready & PURPLE_XFER_READY_PRPL)) | 1276 if (0 == (priv->ready & PURPLE_XFER_READY_PRPL)) { |
1277 purple_debug_misc("xfer", "UI is ready on ft %p, waiting for prpl\n", xfer); | |
1242 return; | 1278 return; |
1279 } | |
1280 | |
1281 purple_debug_misc("xfer", "UI (and prpl) ready on ft %p, so proceeding\n", xfer); | |
1243 | 1282 |
1244 type = purple_xfer_get_type(xfer); | 1283 type = purple_xfer_get_type(xfer); |
1245 if (type == PURPLE_XFER_SEND) | 1284 if (type == PURPLE_XFER_SEND) |
1246 cond = PURPLE_INPUT_WRITE; | 1285 cond = PURPLE_INPUT_WRITE; |
1247 else /* if (type == PURPLE_XFER_RECEIVE) */ | 1286 else /* if (type == PURPLE_XFER_RECEIVE) */ |
1264 | 1303 |
1265 priv = g_hash_table_lookup(xfers_data, xfer); | 1304 priv = g_hash_table_lookup(xfers_data, xfer); |
1266 priv->ready |= PURPLE_XFER_READY_PRPL; | 1305 priv->ready |= PURPLE_XFER_READY_PRPL; |
1267 | 1306 |
1268 /* I don't think fwrite/fread are ever *not* ready */ | 1307 /* I don't think fwrite/fread are ever *not* ready */ |
1269 if (xfer->dest_fp == NULL && 0 == (priv->ready & PURPLE_XFER_READY_UI)) | 1308 if (xfer->dest_fp == NULL && 0 == (priv->ready & PURPLE_XFER_READY_UI)) { |
1309 purple_debug_misc("xfer", "prpl is ready on ft %p, waiting for UI\n", xfer); | |
1270 return; | 1310 return; |
1311 } | |
1312 | |
1313 purple_debug_misc("xfer", "Prpl (and UI) ready on ft %p, so proceeding\n", xfer); | |
1271 | 1314 |
1272 priv->ready = PURPLE_XFER_READY_NONE; | 1315 priv->ready = PURPLE_XFER_READY_NONE; |
1273 | 1316 |
1274 do_transfer(xfer); | 1317 do_transfer(xfer); |
1275 } | 1318 } |