new messages.
(update_folders): New function to write out a new .folders file, so
any new folders added in this run are visible to lukem's new(1).
(MAIN): Call update_folders with the hash returned by filter_mail.
use Errno;
use Fcntl qw(O_WRONLY O_EXCL O_CREAT);
use FileHandle;
use Errno;
use Fcntl qw(O_WRONLY O_EXCL O_CREAT);
use FileHandle;
+use File::Temp qw(tempfile);
use File::stat;
use Getopt::Long qw(:config gnu_getopt no_ignore_case);
use POSIX qw(strftime WEXITSTATUS WIFEXITED);
use File::stat;
use Getopt::Long qw(:config gnu_getopt no_ignore_case);
use POSIX qw(strftime WEXITSTATUS WIFEXITED);
my $spam = 0;
my $saved = 0;
my $msgnum;
my $spam = 0;
my $saved = 0;
my $msgnum;
# XXX lame names and hard-coded proportions.
my $nf = int($COLUMNS * 0.1);
# XXX lame names and hard-coded proportions.
my $nf = int($COLUMNS * 0.1);
defined($mhfolder) or ($mhfolder = find_mh_folder($msg, %headers));
$msgnum = store_message($msg, $mhfolder);
defined($mhfolder) or ($mhfolder = find_mh_folder($msg, %headers));
$msgnum = store_message($msg, $mhfolder);
if ($mhfolder eq 'SPAM') {
$spam++;
if ($mhfolder eq 'SPAM') {
$spam++;
for my $hook (@stop_hooks) {
$hook->(\%batons);
}
for my $hook (@stop_hooks) {
$hook->(\%batons);
}
+
+ return %folders;
+}
+
+sub update_folders {
+ my $folders = shift;
+ my ($fh, $fn);
+
+ if (not open($fh, "$mh/.folders")) {
+ warn("open($mh/.folders): $!");
+ return;
+ }
+
+ while (<$fh>) {
+ chomp;
+ $folders->{$_}++;
+ }
+
+ eval { ($fh, $fn) = tempfile("$mh/.folders.XXXXX") };
+ if ($@) {
+ warn("$@");
+ return;
+ }
+
+ for my $folder (sort(keys(%$folders))) {
+ print($fh "$folder\n");
+ }
+
+ if (not close($fh)) {
+ warn("close($fn): $!");
+ unlink($fn) or warn("unlink($fn): $!");
+ return;
+ }
+
+ rename($fn, "$mh/.folders") or warn("rename($fn, $mh/.folders): $!");
}
chdir("$MAILDIR/new") or die("chdir($MAILDIR/new): $!");
}
chdir("$MAILDIR/new") or die("chdir($MAILDIR/new): $!");
- filter_mail(map { $_->[1] }
+ my %folders = filter_mail(map { $_->[1] }
sort { $a->[0] <=> $b->[0] }
map {
if (not ($st = stat($_))) {
sort { $a->[0] <=> $b->[0] }
map {
if (not ($st = stat($_))) {
+ update_folders(\%folders);
+
@SPAM and (exec('scan', '+SPAM', @SPAM) or die);
}
@SPAM and (exec('scan', '+SPAM', @SPAM) or die);
}