summary |
shortlog |
log |
commit | commitdiff |
tree
raw |
patch |
inline | side by side (from parent 1:
560f85f)
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.
-# 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;
sub store_message {
my $msg = shift;
my $mhfolder = shift;
my $msgnum;
my $try;
my $mhmsg;
# We must do this even in -n mode because later steps fail without
# it. This should be harmless.
# 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)");
}
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;
- }
my @msglist = @_;
my $msg;
my $mhfolder;
my @msglist = @_;
my $msg;
my $mhfolder;
+ my $msgnum;
+ my %folders;
+ my $ref;
+ my $messages;
+ my $status;
foreach $msg (@msglist) {
$mhfolder = find_mh_folder($msg);
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");
+ }