comparison src/prpl.c @ 2050:ddd696ccb46b

[gaim-migrate @ 2060] oh yes. revenge shall be mine. committer: Tailor Script <tailor@pidgin.im>
author Eric Warmenhoven <eric@warmenhoven.org>
date Sun, 17 Jun 2001 20:25:36 +0000
parents 948a67a691a6
children 424a40f12a6c
comparison
equal deleted inserted replaced
2049:44f762499309 2050:ddd696ccb46b
18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19 * 19 *
20 */ 20 */
21 21
22 #include "prpl.h" 22 #include "prpl.h"
23 #include <sys/types.h>
24 #include <sys/stat.h>
25 #include <unistd.h>
23 26
24 #include "pixmaps/ok.xpm" 27 #include "pixmaps/ok.xpm"
25 #include "pixmaps/cancel.xpm" 28 #include "pixmaps/cancel.xpm"
26 #include "pixmaps/register.xpm" 29 #include "pixmaps/register.xpm"
27 30
474 g_list_free(tmp); 477 g_list_free(tmp);
475 c = g_slist_next(c); 478 c = g_slist_next(c);
476 } 479 }
477 } 480 }
478 } 481 }
482
483 struct ft_req {
484 struct gaim_connection *gc;
485 gboolean send;
486 gboolean multiple;
487 guint size;
488 char *name;
489 ft_callback cb;
490 gpointer data;
491 GtkWidget *fd;
492 };
493
494 static void ftrrno(gpointer w, struct ft_req *fr)
495 {
496 if (fr->fd && (w != fr->fd)) {
497 gtk_widget_destroy(fr->fd);
498 return;
499 }
500 if (fr->cb)
501 fr->cb(fr->gc, NULL, TRUE, fr->data);
502 if (fr->name)
503 g_free(fr->name);
504 g_free(fr);
505 }
506
507 static void do_exist_dialog(const char *name, unsigned long size, struct ft_req *fr)
508 {
509 /*
510 GtkWidget *window;
511 GtkWidget *vbox;
512 GtkWidget *label;
513 GtkWidget *hbox;
514 GtkWidget *button;
515 char buf[8192];
516
517 g_snprintf(buf, sizeof(buf), "It appears that %s already exists. Do you want to "
518 "overwrite the file%s or cancel the transfer?", name,
519 (size <= fr->size) ? ", resume the download," : "");
520
521 window = gtk_window_new(GTK_WINDOW_DIALOG);
522 */
523 }
524
525 static void ftgotfile(gpointer w, struct ft_req *fr)
526 {
527 const char *fname = gtk_file_selection_get_filename(GTK_FILE_SELECTION(fr->fd));
528 if (!fr->multiple && file_is_dir(fname, fr->fd))
529 return;
530
531 if (!fr->multiple && !fr->send) {
532 struct stat st;
533 if (stat(fname, &st) == 0) {
534 do_exist_dialog(fname, st.st_size, fr);
535 return;
536 }
537 }
538
539 fr->cb(fr->gc, fname, FT_EXIST_DNE, fr->data);
540 fr->cb = NULL;
541
542 gtk_widget_destroy(fr->fd);
543 }
544
545 static void ftrrok(gpointer w, struct ft_req *ft)
546 {
547 /* ft is going to be free'd as soon as we leave this function, so we'll copy it */
548 struct ft_req *fr = g_memdup(ft, sizeof(struct ft_req));
549 char buf[256];
550
551 if (fr->send)
552 fr->fd = gtk_file_selection_new(_("Gaim - Select File"));
553 else
554 fr->fd = gtk_file_selection_new(_("Gaim - Send File"));
555
556 g_snprintf(buf, sizeof(buf), "%s/%s", g_get_home_dir(), fr->name ? fr->name : "");
557 gtk_file_selection_set_filename(GTK_FILE_SELECTION(fr->fd), buf);
558
559 gtk_signal_connect(GTK_OBJECT(GTK_FILE_SELECTION(fr->fd)->ok_button), "clicked",
560 GTK_SIGNAL_FUNC(ftgotfile), fr);
561 gtk_signal_connect(GTK_OBJECT(GTK_FILE_SELECTION(fr->fd)->cancel_button), "clicked",
562 GTK_SIGNAL_FUNC(ftrrno), fr);
563 gtk_signal_connect(GTK_OBJECT(fr->fd), "destroy", GTK_SIGNAL_FUNC(ftrrno), fr);
564
565 gtk_widget_show(fr->fd);
566 }
567
568 void ft_receive_request(struct gaim_connection *gc, const char *who, gboolean send, gboolean multiple,
569 char *name, guint size, ft_callback cb, gpointer data)
570 {
571 char buf[8192];
572 struct ft_req *fr = g_new0(struct ft_req, 1);
573
574 fr->gc = gc;
575 fr->send = send;
576 fr->multiple = multiple;
577 fr->size = size;
578 if (name)
579 fr->name = g_strdup(name);
580 fr->cb = cb;
581 fr->data = data;
582
583 if (send)
584 g_snprintf(buf, sizeof(buf), "%s has just asked %s to send a file.",
585 who, gc->username);
586 else if (multiple)
587 g_snprintf(buf, sizeof(buf), "%s has just asked %s to receive some files.",
588 who, gc->username);
589 else if (name && size)
590 g_snprintf(buf, sizeof(buf), "%s has just asked %s to receive %s (%d bytes).",
591 who, gc->username, name, size);
592 else if (name)
593 g_snprintf(buf, sizeof(buf), "%s has just asked %s to receive %s.",
594 who, gc->username, name);
595 else
596 g_snprintf(buf, sizeof(buf), "%s has just asked %s to receive a file.",
597 who, gc->username);
598
599 do_ask_dialog(buf, fr, ftrrok, ftrrno);
600 }