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);