From: epg <> Date: Fri, 2 Sep 2005 22:25:12 +0000 (+0000) Subject: (find_mh_folder): Take %headers as arguments, don't call get_headers X-Git-Url: https://diplodocus.org/git/minc/commitdiff_plain/258eaea79eb8c90ff9fb7e062e42d469eca640fe?ds=sidebyside;hp=68a4ee3a17937925b02ea2197e6d30e745d4dc3b (find_mh_folder): Take %headers as arguments, don't call get_headers or log_headers here. (filter_mail): .mincfilters, mincspam, and .minchooks are now just one file, .minc. Now we don't magically know the name of some spam_start_hook, spam_stop_hook, spam_check, and post_store_hook, but instead run all the hooks in the @start_hooks, @stop_hooks, @filter_hooks, and @post_store_hooks lists. Call get_headers and log_headers here so we can pass them to the hooks. --- diff --git a/minc b/minc index e216504..c98c633 100755 --- a/minc +++ b/minc @@ -468,7 +468,7 @@ sub get_headers { sub find_mh_folder { my $msg = shift; - my %headers; + my %headers = @_; my $filterref; my @filter; my $header; @@ -478,13 +478,10 @@ sub find_mh_folder { my $expression; my $result; - %headers = get_headers($msg); if (not %headers) { return 'malformed'; } - log_headers(%headers); - # Walk the list of filters. This structure is documented in # pod at the end of the program. foreach $filterref (@FILTERS) { @@ -540,26 +537,19 @@ sub filter_mail { my $msgnum; my %FOLDERS = ('SPAM'=>1); - if (-f "$HOME/.mincspam") { - require "$HOME/.mincspam"; - } else { - eval "sub spam_start_hook { return (); }"; - eval "sub spam_stop_hook { }"; - eval "sub spam_check { return 0; }"; + if (-f "$HOME/.minc") { + require "$HOME/.minc"; } - if (-f "$HOME/.mincfilter") { - require "$HOME/.mincfilter"; - } - - if (-f "$HOME/.minchooks") { - require "$HOME/.minchooks"; - } else { - eval "sub post_store_hook { }"; + our (@start_hooks, @stop_hooks, @filter_hooks, @post_store_hooks); + my %batons; + for my $hook (@start_hooks) { + my ($handle, @baton) = $hook->(); + if (defined($handle)) { + $batons{$handle} = [@baton]; + } } - @baton = spam_start_hook(); - foreach $msg (@msglist) { ($msg eq '.' or $msg eq '..') and next; @@ -567,17 +557,28 @@ sub filter_mail { print("$msg\n"); } - if (spam_check($msg, @baton)) { - $mhfolder = 'SPAM'; - $spam = @SPAM + 1; + my %headers = get_headers($msg); + log_headers(%headers); + + undef($mhfolder); + for my $hook (@filter_hooks) { + my $result = $hook->(\%batons, \%headers, $msg); + defined($result) and ($mhfolder = $result); + } + + defined($mhfolder) or ($mhfolder = find_mh_folder($msg, %headers)); + + if ($mhfolder eq 'SPAM') { + $spam++; } else { - $mhfolder = find_mh_folder($msg); $saved++; } $msgnum = store_message($msg, $mhfolder); - post_store_hook($mhfolder, $msgnum); + for my $hook (@post_store_hooks) { + $hook->(\%batons, \%headers, $mhfolder, $msgnum); + } print("\r"); if (not $FOLDERS{$mhfolder}) { @@ -593,7 +594,9 @@ sub filter_mail { } print("\n"); - spam_stop_hook(@baton); + for my $hook (@stop_hooks) { + $hook->(\%batons); + } }