Mercurial > pidgin
comparison src/prpl.c @ 2189:dca8e00d7de0
[gaim-migrate @ 2199]
I've decided I like Russ Dill's file transfer stuff and will have that go into gaim when i get around to it.
committer: Tailor Script <tailor@pidgin.im>
| author | Eric Warmenhoven <eric@warmenhoven.org> |
|---|---|
| date | Wed, 29 Aug 2001 20:58:08 +0000 |
| parents | 0befa2d2e540 |
| children | 657dbe515608 |
comparison
equal
deleted
inserted
replaced
| 2188:98c434792ab7 | 2189:dca8e00d7de0 |
|---|---|
| 547 } | 547 } |
| 548 gtk_label_set_text(GTK_LABEL(gc->email_label), buf); | 548 gtk_label_set_text(GTK_LABEL(gc->email_label), buf); |
| 549 } else if (gc->email_win) | 549 } else if (gc->email_win) |
| 550 gtk_widget_destroy(gc->email_win); | 550 gtk_widget_destroy(gc->email_win); |
| 551 } | 551 } |
| 552 | |
| 553 /* | |
| 554 struct ft_req { | |
| 555 struct gaim_connection *gc; | |
| 556 gboolean send; | |
| 557 gboolean multiple; | |
| 558 guint size; | |
| 559 char *name; | |
| 560 ft_callback cb; | |
| 561 gpointer data; | |
| 562 GtkWidget *fd; | |
| 563 }; | |
| 564 | |
| 565 static void ftrrno(gpointer w, struct ft_req *fr) | |
| 566 { | |
| 567 if (fr->fd && (w != fr->fd)) { | |
| 568 gtk_widget_destroy(fr->fd); | |
| 569 return; | |
| 570 } | |
| 571 if (fr->cb) | |
| 572 fr->cb(fr->gc, NULL, TRUE, fr->data); | |
| 573 if (fr->name) | |
| 574 g_free(fr->name); | |
| 575 g_free(fr); | |
| 576 } | |
| 577 | |
| 578 static void do_exist_dialog(const char *name, unsigned long size, struct ft_req *fr) | |
| 579 { | |
| 580 \* | |
| 581 GtkWidget *window; | |
| 582 GtkWidget *vbox; | |
| 583 GtkWidget *label; | |
| 584 GtkWidget *hbox; | |
| 585 GtkWidget *button; | |
| 586 char buf[8192]; | |
| 587 | |
| 588 g_snprintf(buf, sizeof(buf), "It appears that %s already exists. Do you want to " | |
| 589 "overwrite the file%s or cancel the transfer?", name, | |
| 590 (size <= fr->size) ? ", resume the download," : ""); | |
| 591 | |
| 592 window = gtk_window_new(GTK_WINDOW_DIALOG); | |
| 593 *\ | |
| 594 } | |
| 595 | |
| 596 static void ftgotfile(gpointer w, struct ft_req *fr) | |
| 597 { | |
| 598 const char *fname = gtk_file_selection_get_filename(GTK_FILE_SELECTION(fr->fd)); | |
| 599 if (!fr->multiple && file_is_dir(fname, fr->fd)) | |
| 600 return; | |
| 601 | |
| 602 if (!fr->multiple && !fr->send) { | |
| 603 struct stat st; | |
| 604 if (stat(fname, &st) == 0) { | |
| 605 do_exist_dialog(fname, st.st_size, fr); | |
| 606 return; | |
| 607 } | |
| 608 } | |
| 609 | |
| 610 fr->cb(fr->gc, fname, FT_EXIST_DNE, fr->data); | |
| 611 fr->cb = NULL; | |
| 612 | |
| 613 gtk_widget_destroy(fr->fd); | |
| 614 } | |
| 615 | |
| 616 static void ftrrok(gpointer w, struct ft_req *ft) | |
| 617 { | |
| 618 \* ft is going to be free'd as soon as we leave this function, so we'll copy it *\ | |
| 619 struct ft_req *fr = g_memdup(ft, sizeof(struct ft_req)); | |
| 620 char buf[256]; | |
| 621 | |
| 622 if (fr->send) | |
| 623 fr->fd = gtk_file_selection_new(_("Gaim - Select File")); | |
| 624 else | |
| 625 fr->fd = gtk_file_selection_new(_("Gaim - Send File")); | |
| 626 | |
| 627 g_snprintf(buf, sizeof(buf), "%s/%s", g_get_home_dir(), fr->name ? fr->name : ""); | |
| 628 gtk_file_selection_set_filename(GTK_FILE_SELECTION(fr->fd), buf); | |
| 629 | |
| 630 gtk_signal_connect(GTK_OBJECT(GTK_FILE_SELECTION(fr->fd)->ok_button), "clicked", | |
| 631 GTK_SIGNAL_FUNC(ftgotfile), fr); | |
| 632 gtk_signal_connect(GTK_OBJECT(GTK_FILE_SELECTION(fr->fd)->cancel_button), "clicked", | |
| 633 GTK_SIGNAL_FUNC(ftrrno), fr); | |
| 634 gtk_signal_connect(GTK_OBJECT(fr->fd), "destroy", GTK_SIGNAL_FUNC(ftrrno), fr); | |
| 635 | |
| 636 gtk_widget_show(fr->fd); | |
| 637 } | |
| 638 | |
| 639 void ft_receive_request(struct gaim_connection *gc, const char *who, gboolean send, gboolean multiple, | |
| 640 char *name, guint size, ft_callback cb, gpointer data) | |
| 641 { | |
| 642 char buf[8192]; | |
| 643 struct ft_req *fr = g_new0(struct ft_req, 1); | |
| 644 | |
| 645 fr->gc = gc; | |
| 646 fr->send = send; | |
| 647 fr->multiple = multiple; | |
| 648 fr->size = size; | |
| 649 if (name) | |
| 650 fr->name = g_strdup(name); | |
| 651 fr->cb = cb; | |
| 652 fr->data = data; | |
| 653 | |
| 654 if (send) | |
| 655 g_snprintf(buf, sizeof(buf), "%s has just asked %s to send a file.", | |
| 656 who, gc->username); | |
| 657 else if (multiple) | |
| 658 g_snprintf(buf, sizeof(buf), "%s has just asked %s to receive some files.", | |
| 659 who, gc->username); | |
| 660 else if (name && size) | |
| 661 g_snprintf(buf, sizeof(buf), "%s has just asked %s to receive %s (%d bytes).", | |
| 662 who, gc->username, name, size); | |
| 663 else if (name) | |
| 664 g_snprintf(buf, sizeof(buf), "%s has just asked %s to receive %s.", | |
| 665 who, gc->username, name); | |
| 666 else | |
| 667 g_snprintf(buf, sizeof(buf), "%s has just asked %s to receive a file.", | |
| 668 who, gc->username); | |
| 669 | |
| 670 do_ask_dialog(buf, fr, ftrrok, ftrrno); | |
| 671 } | |
| 672 */ |
