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.
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");
+ }
+ }
}
- return $msgnum;
+ if (not $FOLDERS{$mhfolder}) {
+ print("+$mhfolder\n");
+ $FOLDERS{$mhfolder} = 1;
+ }
}
sub get_headers {
my @msglist = @_;
my $msg;
my $mhfolder;
- my $msgnum;
- my %folders;
- my $ref;
- my $messages;
- my $status;
foreach $msg (@msglist) {
$mhfolder = find_mh_folder($msg);
- $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");
- }
+ store_message($msg, $mhfolder);
}
}