]> diplodocus.org Git - minc/commitdiff
(%FOLDERS): Remove this global. Whether to print the folder's name is
authorepg <>
Sat, 31 Aug 2002 23:58:52 +0000 (23:58 +0000)
committerepg <>
Sat, 31 Aug 2002 23:58:52 +0000 (23:58 +0000)
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.

minc

diff --git a/minc b/minc
index 9664413886765c6a6e6377145e69ea5eca25ca8a..e5c22465b60335910d37db12f08945ffce8f126b 100755 (executable)
--- a/minc
+++ b/minc
@@ -329,19 +329,12 @@ sub get_highest_msgnum {
     return $highest;
 }
 
     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;
 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.
 
     # 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)");
         }
         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 {
 }
 
 sub get_headers {
@@ -568,10 +546,36 @@ sub filter_mail {
     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");
+        }
     }
 }
 
     }
 }