From: epg <> Date: Sat, 31 Aug 2002 23:58:52 +0000 (+0000) Subject: (%FOLDERS): Remove this global. Whether to print the folder's name is X-Git-Url: https://diplodocus.org/git/minc/commitdiff_plain/169de404776d51648f7c39cd4d104e6a7e6d2581?hp=560f85f023d93fe441ec74c8c4b6fb1725455f68 (%FOLDERS): Remove this global. Whether to print the folder's name is now being subsumed into the marking unseen messages functionality moving into filter_mail. (store_message): Don't run mark messages unseen, and start returning the stored message number for callers to use. (filter_mail): Keep a hash of folders and message numbers, printing each folder name only once and running one mark(1) command for each folder to mark the new messages unseen. --- diff --git a/minc b/minc index 9664413..e5c2246 100755 --- a/minc +++ b/minc @@ -329,19 +329,12 @@ sub get_highest_msgnum { return $highest; } -# We want to print the name of each list that has new mail only once, -# so use this hash to store the lists that have already been printed. -# Start the list out with SPAM already in it, since we don't care when -# new messages are added to it. -my %FOLDERS = ('SPAM'=>1); - sub store_message { my $msg = shift; my $mhfolder = shift; my $msgnum; my $try; my $mhmsg; - my $status; # We must do this even in -n mode because later steps fail without # it. This should be harmless. @@ -389,24 +382,9 @@ sub store_message { if (not rename($msg, $mhmsg)) { err(&EX_TEMPFAIL, "Failed rename($msg, $mhmsg)"); } - - # XXX: Lame! Instead, keep a hash of arrays. Keys are folder - # names, array elements are message numbers in that list. - # Then after all the messages have been sorted, run one mark - # command per folder, marking all messages for that folder in - # one sweep. - if ($mhfolder ne 'SPAM') { - $status = system("mark +$mhfolder $msgnum -sequence unseen -add"); - if (not (WIFEXITED($status) and WEXITSTATUS($status) == 0)) { - errx(&EX_TEMPFAIL, "Failed to mark message unseen"); - } - } } - if (not $FOLDERS{$mhfolder}) { - print("+$mhfolder\n"); - $FOLDERS{$mhfolder} = 1; - } + return $msgnum; } sub get_headers { @@ -568,10 +546,36 @@ sub filter_mail { my @msglist = @_; my $msg; my $mhfolder; + my $msgnum; + my %folders; + my $ref; + my $messages; + my $status; foreach $msg (@msglist) { $mhfolder = find_mh_folder($msg); - store_message($msg, $mhfolder); + $msgnum = store_message($msg, $mhfolder); + + if (not $folders{$mhfolder}) { + print("+$mhfolder\n"); + $folders{$mhfolder} = (); + } + + push(@{$folders{$mhfolder}}, $msgnum); + } + + foreach $mhfolder (keys(%folders)) { + $ref = $folders{$mhfolder}; + + $messages = ''; + foreach $msgnum (@$ref) { + $messages .= ' ' . $msgnum; + } + + $status = system("mark +$mhfolder $messages -sequence unseen -add"); + if (not (WIFEXITED($status) and WEXITSTATUS($status) == 0)) { + errx(&EX_TEMPFAIL, "Failed to mark messages unseen"); + } } }