Mercurial > pidgin
comparison src/ft.c @ 9932:3fa121db91d0
[gaim-migrate @ 10824]
A patch from Dave West. This prints happygood messages to conversation
windows when doing file transfer stuff. Nicely done.
committer: Tailor Script <tailor@pidgin.im>
| author | Mark Doliner <mark@kingant.net> |
|---|---|
| date | Thu, 02 Sep 2004 02:49:00 +0000 |
| parents | ccf5a52730b9 |
| children | cee849d17167 |
comparison
equal
deleted
inserted
replaced
| 9931:7101987a49c8 | 9932:3fa121db91d0 |
|---|---|
| 110 g_return_if_fail(xfer != NULL); | 110 g_return_if_fail(xfer != NULL); |
| 111 | 111 |
| 112 xfer->status = status; | 112 xfer->status = status; |
| 113 } | 113 } |
| 114 | 114 |
| 115 static void | |
| 116 gaim_xfer_conversation_write(GaimXfer *xfer, char *message, gboolean is_error) | |
| 117 { | |
| 118 GaimConversation *conv = NULL; | |
| 119 GString *gs_message = NULL; | |
| 120 GaimMessageFlags flags = GAIM_MESSAGE_SYSTEM; | |
| 121 | |
| 122 g_return_if_fail(xfer != NULL); | |
| 123 g_return_if_fail(message != NULL); | |
| 124 | |
| 125 conv = gaim_find_conversation_with_account(xfer->who, gaim_xfer_get_account(xfer)); | |
| 126 | |
| 127 if (conv == NULL) | |
| 128 return; | |
| 129 | |
| 130 gs_message = g_string_new(message); | |
| 131 | |
| 132 if (is_error) | |
| 133 flags = GAIM_MESSAGE_ERROR; | |
| 134 | |
| 135 gaim_conversation_write(conv, NULL, gs_message->str, flags, time(NULL)); | |
| 136 g_string_free(gs_message, TRUE); | |
| 137 } | |
| 138 | |
| 115 static void gaim_xfer_show_file_error(GaimXfer *xfer, const char *filename) | 139 static void gaim_xfer_show_file_error(GaimXfer *xfer, const char *filename) |
| 116 { | 140 { |
| 117 gchar *msg = NULL; | 141 gchar *msg = NULL; |
| 118 GaimXferType xfer_type = gaim_xfer_get_type(xfer); | 142 GaimXferType xfer_type = gaim_xfer_get_type(xfer); |
| 119 | 143 |
| 130 msg = g_strdup_printf(_("Error accessing %s: \n%s.\n"), | 154 msg = g_strdup_printf(_("Error accessing %s: \n%s.\n"), |
| 131 filename, strerror(errno)); | 155 filename, strerror(errno)); |
| 132 break; | 156 break; |
| 133 } | 157 } |
| 134 | 158 |
| 159 gaim_xfer_conversation_write(xfer, msg, TRUE); | |
| 135 gaim_xfer_error(xfer_type, xfer->who, msg); | 160 gaim_xfer_error(xfer_type, xfer->who, msg); |
| 136 g_free(msg); | 161 g_free(msg); |
| 137 } | 162 } |
| 138 | 163 |
| 139 static void | 164 static void |
| 313 xfer->ops.init(xfer); | 338 xfer->ops.init(xfer); |
| 314 return; | 339 return; |
| 315 } | 340 } |
| 316 | 341 |
| 317 if (type == GAIM_XFER_SEND) { | 342 if (type == GAIM_XFER_SEND) { |
| 343 char *msg; | |
| 344 | |
| 318 /* Check the filename. */ | 345 /* Check the filename. */ |
| 319 if (g_strrstr(filename, "..")) { | 346 if (g_strrstr(filename, "..")) { |
| 320 char *msg; | 347 |
| 321 | 348 msg = g_strdup_printf(_("%s is not a valid filename.\n"), filename); |
| 322 msg = g_strdup_printf(_("%s is not a valid filename.\n"), | |
| 323 filename); | |
| 324 | |
| 325 gaim_xfer_error(type, xfer->who, msg); | 349 gaim_xfer_error(type, xfer->who, msg); |
| 326 | |
| 327 g_free(msg); | 350 g_free(msg); |
| 351 | |
| 328 gaim_xfer_unref(xfer); | 352 gaim_xfer_unref(xfer); |
| 329 return; | 353 return; |
| 330 } | 354 } |
| 331 | 355 |
| 332 if (stat(filename, &st) == -1) { | 356 if (stat(filename, &st) == -1) { |
| 335 return; | 359 return; |
| 336 } | 360 } |
| 337 | 361 |
| 338 gaim_xfer_set_local_filename(xfer, filename); | 362 gaim_xfer_set_local_filename(xfer, filename); |
| 339 gaim_xfer_set_size(xfer, st.st_size); | 363 gaim_xfer_set_size(xfer, st.st_size); |
| 364 | |
| 365 msg = g_strdup_printf(_("Offering to send %s to %s"), | |
| 366 filename, xfer->who); | |
| 367 gaim_xfer_conversation_write(xfer, msg, FALSE); | |
| 368 g_free(msg); | |
| 340 } | 369 } |
| 341 else { | 370 else { |
| 342 xfer->status = GAIM_XFER_STATUS_ACCEPTED; | 371 xfer->status = GAIM_XFER_STATUS_ACCEPTED; |
| 343 gaim_xfer_set_local_filename(xfer, filename); | 372 gaim_xfer_set_local_filename(xfer, filename); |
| 344 } | 373 } |
| 800 } | 829 } |
| 801 | 830 |
| 802 void | 831 void |
| 803 gaim_xfer_end(GaimXfer *xfer) | 832 gaim_xfer_end(GaimXfer *xfer) |
| 804 { | 833 { |
| 834 char *msg = NULL; | |
| 835 | |
| 805 g_return_if_fail(xfer != NULL); | 836 g_return_if_fail(xfer != NULL); |
| 806 | 837 |
| 807 /* See if we are actually trying to cancel this. */ | 838 /* See if we are actually trying to cancel this. */ |
| 808 if (gaim_xfer_get_status(xfer) != GAIM_XFER_STATUS_DONE) { | 839 if (gaim_xfer_get_status(xfer) != GAIM_XFER_STATUS_DONE) { |
| 809 gaim_xfer_cancel_local(xfer); | 840 gaim_xfer_cancel_local(xfer); |
| 810 return; | 841 return; |
| 811 } | 842 } |
| 812 | 843 |
| 844 msg = g_strdup_printf(_("Transfer of %s complete"), | |
| 845 gaim_xfer_get_filename(xfer)); | |
| 846 gaim_xfer_conversation_write(xfer, msg, FALSE); | |
| 847 g_free(msg); | |
| 848 | |
| 813 if (xfer->ops.end != NULL) | 849 if (xfer->ops.end != NULL) |
| 814 xfer->ops.end(xfer); | 850 xfer->ops.end(xfer); |
| 815 | 851 |
| 816 if (xfer->watcher != 0) { | 852 if (xfer->watcher != 0) { |
| 817 gaim_input_remove(xfer->watcher); | 853 gaim_input_remove(xfer->watcher); |
| 844 | 880 |
| 845 void | 881 void |
| 846 gaim_xfer_cancel_local(GaimXfer *xfer) | 882 gaim_xfer_cancel_local(GaimXfer *xfer) |
| 847 { | 883 { |
| 848 GaimXferUiOps *ui_ops; | 884 GaimXferUiOps *ui_ops; |
| 885 char *msg = NULL; | |
| 849 | 886 |
| 850 g_return_if_fail(xfer != NULL); | 887 g_return_if_fail(xfer != NULL); |
| 851 | 888 |
| 852 gaim_xfer_set_status(xfer, GAIM_XFER_STATUS_CANCEL_LOCAL); | 889 gaim_xfer_set_status(xfer, GAIM_XFER_STATUS_CANCEL_LOCAL); |
| 890 | |
| 891 msg = g_strdup_printf(_("You canceled the transfer of %s"), | |
| 892 gaim_xfer_get_filename(xfer)); | |
| 893 gaim_xfer_conversation_write(xfer, msg, FALSE); | |
| 894 g_free(msg); | |
| 853 | 895 |
| 854 if (gaim_xfer_get_type(xfer) == GAIM_XFER_SEND) | 896 if (gaim_xfer_get_type(xfer) == GAIM_XFER_SEND) |
| 855 { | 897 { |
| 856 if (xfer->ops.cancel_send != NULL) | 898 if (xfer->ops.cancel_send != NULL) |
| 857 xfer->ops.cancel_send(xfer); | 899 xfer->ops.cancel_send(xfer); |
| 892 gchar *msg; | 934 gchar *msg; |
| 893 | 935 |
| 894 g_return_if_fail(xfer != NULL); | 936 g_return_if_fail(xfer != NULL); |
| 895 | 937 |
| 896 gaim_request_close_with_handle(xfer); | 938 gaim_request_close_with_handle(xfer); |
| 939 gaim_xfer_set_status(xfer, GAIM_XFER_STATUS_CANCEL_REMOTE); | |
| 897 | 940 |
| 898 msg = g_strdup_printf(_("%s canceled the transfer of %s"), | 941 msg = g_strdup_printf(_("%s canceled the transfer of %s"), |
| 899 xfer->who, gaim_xfer_get_filename(xfer)); | 942 xfer->who, gaim_xfer_get_filename(xfer)); |
| 943 gaim_xfer_conversation_write(xfer, msg, TRUE); | |
| 900 gaim_xfer_error(gaim_xfer_get_type(xfer), xfer->who, msg); | 944 gaim_xfer_error(gaim_xfer_get_type(xfer), xfer->who, msg); |
| 901 g_free(msg); | 945 g_free(msg); |
| 902 | |
| 903 gaim_xfer_set_status(xfer, GAIM_XFER_STATUS_CANCEL_REMOTE); | |
| 904 | 946 |
| 905 if (gaim_xfer_get_type(xfer) == GAIM_XFER_SEND) | 947 if (gaim_xfer_get_type(xfer) == GAIM_XFER_SEND) |
| 906 { | 948 { |
| 907 if (xfer->ops.cancel_send != NULL) | 949 if (xfer->ops.cancel_send != NULL) |
| 908 xfer->ops.cancel_send(xfer); | 950 xfer->ops.cancel_send(xfer); |
