### CMail::In::mbox
# module for checking for messages in mbox mailboxes
package CMail::In::mbox;

use strict;

BEGIN {
	use CMail::In::Base;
	use vars qw($VERSION @ISA);

	$VERSION = do { my @r = (q$Revision: 1.1 $ =~ /\d+/g); sprintf "%d."."%02d" x $#r, @r };

	@ISA = qw( CMail::In::Base );
}

# methods
sub count {
	my $self = shift;
	my $file = $self->parse_uri;
	my $verbose = $self->{verbose};

	my $total	= 0;
	my $new		= 0;
	my $old		= 0;

	# First, save the access time, so we can put it back later
	# so that MUAs and biffs that rely on it will still properly
	# detect new mail. (Contributed by David McNett)
	my $atime = ( stat $file )[8];
	warn "mbox: saving access time of $atime\n" if $verbose > 1;

	# Now open the file and check for messages
	warn "mbox: Opening '$file' and counting messages.\n" if $verbose;
	if ( not open(MBOX, $file) ) {
		warn "mbox: can't open $file: $!" if $verbose;
		return(0,0);
	}
	
	$total = grep {
		$old++ if /^Status:.*O/;	# Check for old message flag

		# This regex finds the first line of a message
		/^From .* [MTWFS][a-z]{2} [A-Z][a-z]{2} [ 0-9]{2} [0-9:]{8} [0-9]{4}/;
	} <MBOX>;

	close MBOX;

	$new = $total - $old;

	# Restore atime of file
	my $modtime = ( stat $file )[9];
	utime $atime, $modtime, $file;
	warn "mbox: restored atime $atime to $file\n" if $verbose > 1;

	return ( $total, $new );
}

1;


syntax highlighted by Code2HTML, v. 0.9.1