package Pronto::Data::MessageOp; # -*- perl -*- use strict; use SelfLoader; use Text::ParseWords; 1; __DATA__ sub edit { my ($msgid, $sql, $query, $acctid, $subject, $cc, $to, @fields); $msgid = &Pronto::MessageList::get_selected_msgid(); if (! $msgid) { &main::err_dialog(_("Select a message to edit!")); return 1; } $sql = "select accountid, subject, cc, sentto from messages where id=?"; $query=$main::conn->prepare($sql); $query->execute($msgid); ($acctid, $subject, $cc, $to) = $query->fetchrow_array(); $fields[0] = $to; $fields[1] = $cc; $fields[2] = $subject; &Pronto::Compose::init_msg_window(0, undef, \@fields, $msgid, $acctid, 3); return 1; } sub parse_csv { return quotewords(", ",1, $_[0]); } sub reply { my ($widget, $quote) = @_; my ($msgid, $sql, $query, $acctid, $subject, $reply, $from, @fields); $msgid = &Pronto::MessageList::get_selected_msgid(); if (! $msgid) { &main::err_dialog(_("Select a message to reply to!")); return 1; } $sql = "select accountid, subject, replyto, sentfrom from messages where id=?"; $query=$main::conn->prepare($sql); $query->execute($msgid); ($acctid, $subject, $reply, $from) = $query->fetchrow_array(); if (!$reply) { $reply = $from; } unless ($subject =~ /^Re: /i) { $subject = "Re: " . $subject; } $fields[0] = $reply; $fields[1] = ""; $fields[2] = $subject; foreach(0..1) { my @tmp=split(/,/,$fields[$_]); foreach(@tmp) { s/\(.*\)$//; } $fields[$_] = join(',',@tmp); } if (defined $quote and $quote eq "y") { &Pronto::Compose::init_msg_window(0, undef, \@fields, $msgid, $acctid, 1); } else { &Pronto::Compose::init_msg_window(0, undef, \@fields, $msgid, $acctid, 5); } return 1; } sub reply_to_list { my ($msgid, $sql, $query, $acctid, $subject, $reply, $from, @fields,$slice); $msgid = &Pronto::MessageList::get_selected_msgid(); if (! $msgid) { &main::err_dialog(_("Select a message to reply to!")); return 1; } my $headers = &Pronto::Data::Message::get_headers($msgid); $slice = 0; $sql = "select accountid, subject, replyto, sentfrom from messages where id=?"; $query=$main::conn->prepare($sql); $query->execute($msgid); ($acctid, $subject, $reply, $from) = $query->fetchrow_array(); if (!$reply) { $reply = $from; } if (defined $headers->{'x-beenthere'}) { $reply = $headers->{'x-beenthere'}; $slice = 1; } elsif (defined $headers->{'x-mailinglist'}) { $reply = $headers->{'x-mailinglist'}; $slice = 1; } elsif (defined $headers->{'x-mailing-list'}) { $reply = $headers->{'x-mailing-list'}; $slice = 1; } unless ($subject =~ /^Re: /i) { $subject = "Re: " . $subject; } if ($slice) { #some lists have the xmailing field as sometext so we wipe it out $reply =~ s/\//g; $reply =~ s/ (.*)//g; } $fields[0] = $reply; $fields[1] = ""; $fields[2] = $subject; &Pronto::Compose::init_msg_window(0, undef, \@fields, $msgid, $acctid, 1); return 1; } sub reply_all { my ($widget, $remove_self) = @_; my ($msgid, $sql, $query, $acctid, $subject, $reply, $from, $to, $cc, @msgbody, @row, @fields, @temp); $msgid = &Pronto::MessageList::get_selected_msgid(); if (! $msgid) { &main::err_dialog(_("Select a message to reply to!")); return 1; } $sql = "select accountid, subject, replyto, sentto, cc, sentfrom from messages where id=?"; $query=$main::conn->prepare($sql); $query->execute($msgid); ($acctid, $subject, $reply, $to, $cc, $from) = $query->fetchrow_array(); if (!$reply) { $reply = $from; } unless ($subject =~ /^Re: /i) { $subject = "Re: " . $subject; } $to =~ s/,/, /g; if ($cc) { $cc =~ s/,/, /g; } $fields[0] = $reply . ", " . $to; if ($reply =~ /$to/i) { $fields[0] =~ s/$reply,/ /; } # add from field to the to listing if the reply to is set... $fields[0].= ", ".$from if ($reply && $reply ne $from); $fields[1] = $cc; $fields[2] = $subject; if ($remove_self and $remove_self eq "y") { $sql = "select friendly,reply from accounts where id = ?"; $query=$main::conn->prepare($sql); $query->execute($acctid); while (my ($friendly, $email) = $query->fetchrow_array()) { my @temp = parse_csv($fields[0]); $fields[0] = ""; foreach(@temp) { if (/$email/i) { # just in case and to fix the commas $_ = ""; } $fields[0].= ", ".$_ if $_ ne "" && $fields[0] ne ""; $fields[0] = $_ if $_ ne "" && $fields[0] eq ""; } @temp = parse_csv($fields[1]); $fields[1] = ""; foreach(@temp) { if (/$email/i) { #just in case again $_ = ""; } $fields[1].= ", ".$_ if $_ ne "" && $fields[1] ne ""; $fields[1] = $_ if $_ ne "" && $fields[1] eq ""; } } } &Pronto::Compose::init_msg_window(0, undef, \@fields, $msgid, $acctid, 1); return 1; } sub forward { my ($msgid, $sql, $query, @selection, $acctid, $subject, @msgbody, @row, @fields); $msgid = &Pronto::MessageList::get_selected_msgid(); if (! $msgid) { &main::err_dialog(_("Select message to forward!")); return 1; } $sql = "select accountid, subject from messages where id = ?"; $query=$main::conn->prepare($sql); $query->execute($msgid); ($acctid, $subject) = $query->fetchrow_array(); unless ($subject =~ /^Fw: /i) { $subject = "Fw: " . $subject; } $fields[0] = ""; $fields[1] = ""; $fields[2] = $subject; &Pronto::Compose::init_msg_window(0, undef, \@fields, $msgid, $acctid, 2); return 1; } sub verify { my $msgid = &Pronto::MessageList::get_selected_msgid(); if (!$msgid) { &main::err_dialog(_("Select a message first!")); return; } my $text = &Pronto::Data::Message::get_source($msgid); if (!$text) { &main::err_dialog(_("Could not get message text!")); return; } my ($stdout, $stderr) = &Pronto::Data::Message::verify($text); &main::err_dialog("@$stdout\n@$stderr","y",_("Verify results: ").$msgid); return; } sub decrypt { my $msgid = &Pronto::MessageList::get_selected_msgid(); if (!$msgid) { &main::err_dialog(_("Select a message first!")); return; } my $text = &Pronto::Data::Message::get_source($msgid); if (!$text) { &main::err_dialog(_("Could not get message text!")); return; } my ($stdout, $stderr) = &Pronto::Data::Message::decrypt($text); # &main::err_dialog("@$stdout\n@$stderr","y",_("Decrypt results:")); my $win = new Gtk::Window("toplevel"); $win->set_title(_("Decrypt Results: ").$msgid); $win->set_default_size(500,400); $win->set_position(-mouse); $win->{TEXT} = new Gtk::Text(undef,undef); $win->{SW} = new Gtk::ScrolledWindow(undef,undef); $win->{SW}->set_policy('automatic','automatic'); $win->{SW}->add($win->{TEXT}); $win->add($win->{SW}); $win->{TEXT}->insert('','','', "@$stdout\n@$stderr"); $win->show_all(); return; } 1;