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 }