## # bmf.pl - flail/bmf integration # # Time-stamp: <2007-02-27 18:11:12 attila@stalphonsos.com> ## use vars qw($BmfProgram); $BmfProgram = '/usr/local/bin/bmf'; sub call_bmf { my($args,$folder,@range) = @_; if (!defined($FOLDER)) { flail_emit("No current folder.\n"); return; } else { @range = ($FOLDER->current_message) unless @range; my @tmp; eval { @tmp = parse_range("@range",1); }; if ($@) { warn("range expression bad (@range): $@\n"); return; } @range = @tmp; my @move = (); foreach my $msgno (@range) { my $msg = $FOLDER->get_message($msgno); if (!$msg) { warn("message $msgno does not exist - skipping\n") unless $Quiet; } else { open(BMF, "|$BmfProgram $args") or die(qq{could not invoke $BmfProgram $args on $msgno: $!\n}); print BMF $msg->as_string(); close(BMF); push(@move,$msgno); } } flail_emit("[Passed ".scalar(@move)." msgs through: $BmfProgram $args]\n") unless $Quiet; flail_move(@move,$folder) if (!$::OPT->{'test'} && $folder && scalar(@move)); } } sub cmd_bmf_spam { call_bmf("-s",spam_folder_name(),@_); } sub cmd_bmf_notspam { call_bmf("-n",$IncomingFolder,@_); } sub cmd_bmf_respam { call_bmf("-S",spam_folder_name(),@_); } sub cmd_bmf_renotspam { call_bmf("-N",$IncomingFolder,@_); } sub cmd_bmf_test { call_bmf("-t",undef,@_); } sub cmd_bmf { my @args = @_; my $opt = "-s"; my $folder = latest_spam_folder(); flail_emit("[This folder: ".$FOLDER->foldername()."]\n") unless $Quiet; if ($::OPT->{"re"}) { if ($::OPT->{"no"} || $::OPT->{"not"}) { $opt = "-N"; $folder = $IncomingFolder; } else { $opt = "-S"; } } elsif ($::OPT->{"no"} || $::OPT->{"not"}) { $opt = "-n"; $folder = $IncomingFolder; } elsif ($::OPT->{"test"}) { $opt = "-t"; $folder = undef; } $folder = undef if (defined($FOLDER) && ($folder eq $FOLDER->foldername())); call_bmf($opt,$folder,@args); } flail_defcmd1("spam",\&cmd_bmf,"bmf cmds: spam/no, spam/re, spam/no/re, spam/test (all w/noexec)"); flail_emit(" [BMF]") unless $Quiet; 1; # Local variables: # mode: perl # indent-tabs-mode: nil # tab-width: 4 # perl-indent-level: 4 # End: