# $Id: Save.pm,v 1.6 2002/05/22 01:57:41 muhri Exp $
# -*- perl -*-
package Pronto::Save;
use strict;
use File::Copy;
use SelfLoader;
use vars qw($last_dir);
$last_dir = undef;
1;
__DATA__
sub set_last_dir
{
my ($dir) = @_;
$dir =~ s/(.*)\://;
my @tmp = split('/',$dir);
if ($tmp[0] eq " ") { $tmp[0] = ""; }
$last_dir = join('/',@tmp);
}
sub save_message_as {
my (@selection, $msgid, $filename,);
$msgid = &Pronto::MessageList::get_selected_msgid();
if (!$msgid) {
&main::err_dialog(_("Select the message You want to save!"));
return 1;
}
$filename = "message$msgid.txt";
my $msg_src = &Pronto::Data::Message::get_source($msgid);
&init_fs_window(undef,$filename,$msg_src,"message");
return 1;
}
sub save_attachment
{
my ($widget, $fs_window, $source) = @_;
my ($filename);
$filename = $fs_window->get_filename();
set_last_dir($fs_window->selection_text->get());
$fs_window->destroy;
my $source_fh = FileHandle->new("$source", "r") or return &main::err_dialog(_("Could not open the source file $source"));
my $to_fh = FileHandle->new("$filename", "w") or return &main::err_dialog(_("Could not open $filename for writing!"));
copy($source_fh, $to_fh) or return &main::err_dialog(_("Couldn't copy $source to $filename\n"));
$source_fh->close() if $source_fh;
$to_fh->close() if $to_fh;
return 1;
}
sub file_selection_ok {
my ($widget, $fs_window, $msg_src) = @_;
my ($filename);
$filename = $fs_window->get_filename();
set_last_dir($fs_window->selection_text->get());
$fs_window->destroy;
open(TMP,">$filename") or return &main::err_dialog(_("Couldn't open $filename for writing!"));;
print TMP $msg_src;
close(TMP);
return 1;
}
sub init_fs_window {
my ($widget, $filename, $source, $message) = @_;
if (!$filename) { $filename=""; }
my ($fs_window);
$fs_window = new Gtk::FileSelection _("Save File...");
$fs_window->position(-mouse);
$fs_window->signal_connect("destroy", sub {$fs_window->destroy;});
$fs_window->signal_connect("delete_event" => \&Gtk::false);
if ($message && $message eq "message") {
$fs_window->ok_button->signal_connect("clicked", \&file_selection_ok, $fs_window, $source);
} else {
$fs_window->ok_button->signal_connect("clicked", \&save_attachment, $fs_window, $source);
}
$fs_window->cancel_button->signal_connect("clicked", sub {$fs_window->destroy;});
if ($last_dir) {
$fs_window->set_filename($last_dir."/");
}
$fs_window->selection_entry->set_text($filename);
$fs_window->show;
return 1;
}
1;
syntax highlighted by Code2HTML, v. 0.9.1