regex to parse it:
$delay =~ m/[+-]d(?:ela?y?)?[-+]([^\@]+)/;
- $delay = $1; $delay =~ s/_/ /;
+ $delay = $1;
+ $delay =~ s/_/ /;
+ $delay =~ s/=/:/;
-Thus, foo-delay-now+5_min@bar.baz becomes now+5 min
+Thus, foo-delay-now+5_min@bar.baz becomes now+5 min and
+foo-del+00=30=00@bar.baz becomes 00:30:00
=item B<--list>
$delay =~ s/\n//g;
if ($options{email}) {
$delay =~ m/[+-]d(?:ela?y?)?[-+]([^\@]+)/;
- $delay = $1; $delay =~ s/_/ /;
+ $delay = $1;
+ $delay =~ s/_/ /;
+ $delay =~ s/=/:/;
}
# slurp email
local $/;
my $email = <STDIN>;
# rip subject out of email
# we cheat for now; this isn't correct at all.
- my ($subject) = $email =~ /^Subject:\s*(.+)/i;
+ my ($subject) = $email =~ /^Subject:\s*(.+)/mi;
$subject = decode_rfc1522($subject);
$subject =~ s/\n//g;
+ my $time = time;
# create a queue entry
- my $queue_fn = time . $$;
+ my $queue_fn = $time . $$;
my $q_fh = IO::File->new("$options{queue}/$queue_fn",'w') or
die "Unable to open $options{queue}/$queue_fn for writing";
print {$q_fh} "delay: $delay\n";
+ print {$q_fh} "time: $time\n";
print {$q_fh} "mailto: $options{mailto}\n";
print {$q_fh} "entry: $queue_fn\n";
print {$q_fh} "subject: $subject\n";
print {$q_fh} "#####\n";
print {$q_fh} $email;
my $at_fh;
- open($at_fh,'|-','at',$delay) or exit 1;
+ my $pid = open($at_fh,'|-','at',$delay) or exit 1;
print {$at_fh} "$0 '--queue' '$options{queue}' '--process' '$queue_fn';\n";
- close $at_fh;
- waitpid(-1,0);
- exit $?;
+ close $at_fh or exit $?;
+ exit 0;
}
elsif ($options{list}) {
my $dir = IO::Dir->new($options{queue}) or
last if not defined $entry;
next if $entry !~ /^\d+$/;
# they're also just readable files
- next if not -f $entry or not -r $entry;
+ next if not -f "$options{queue}/$entry" or not -r "$options{queue}/$entry";
print STDERR "Still dealing with $entry\n" if $DEBUG;
push @queue,parse_queue_entry($entry);
}
for my $q_e (@queue) {
- print "$q_e->{entry}: send $q_e->{subject} to $q_e->{mailto} at $q_e->{delay}\n";
+ $q_e->{time} ||='';
+ print "$q_e->{entry}: send $q_e->{subject} to $q_e->{mailto} at $q_e->{delay} ($q_e->{time})\n";
}
}
elsif ($options{dequeue}) {
}
}
elsif ($options{process}) {
- my $q_e;
if (-e "$options{queue}/$options{process}") {
my $q_e = parse_queue_entry($options{process});
if (not defined $q_e) {