Skip to content

Commit

Permalink
Rewrite code for inode management from array to hash, issue #110, #122
Browse files Browse the repository at this point in the history
  • Loading branch information
azumakuniyuki committed Nov 22, 2015
1 parent a74b941 commit 170db7b
Show file tree
Hide file tree
Showing 3 changed files with 15 additions and 15 deletions.
18 changes: 9 additions & 9 deletions lib/Sisimai/Mail/Maildir.pm
Original file line number Diff line number Diff line change
Expand Up @@ -25,16 +25,16 @@ sub new {
# not a directory or does not exist
my $class = shift;
my $argvs = shift // return undef;
my $param = { 'inodes' => [] };

return undef unless -d $argvs;

$param->{'dir'} = $argvs;
$param->{'file'} = undef;
$param->{'path'} = undef;
$param->{'inodes'} = [];
$param->{'handle'} = IO::Dir->new( $argvs );

my $param = {
'dir' => $argvs,
'file' => undef,
'path' => undef,
'inodes' => {},
'handle' => IO::Dir->new( $argvs ),
};
return bless( $param, __PACKAGE__ );
}

Expand Down Expand Up @@ -68,7 +68,7 @@ sub read {
# Get inode number of the file
$self->{'path'} = $emailindir;
$emailinode = [ stat $emailindir ]->[1];
next if grep { $emailinode == $_ } @{ $self->{'inodes'} };
next if exists $self->{'inodes'}->{ $emailinode };
$filehandle = IO::File->new( $emailindir, 'r' );
while( <$filehandle> ) {
Expand All @@ -77,7 +77,7 @@ sub read {
}
$filehandle->close;
push @{ $self->{'inodes'} }, $emailinode;
$self->{'inodes'}->{ $emailinode } = 1;
$self->{'file'} = $r;
last;
Expand Down
6 changes: 3 additions & 3 deletions t/022-mail-maildir.t
Original file line number Diff line number Diff line change
Expand Up @@ -25,18 +25,18 @@ MAKE_TEST: {
can_ok $maildir, @{ $MethodNames->{'object'} };
is $maildir->dir, $SampleEmail, '->dir = '.$maildir->dir;
is $maildir->file, undef, '->file = ""';
isa_ok $maildir->inodes, 'ARRAY';
isa_ok $maildir->inodes, 'HASH';
isa_ok $maildir->handle, 'IO::Dir';

while( my $r = $maildir->read ) {
ok length $r, 'maildir->read('.( $emindex + 1 ).')';
ok length $maildir->file, '->file = '.$maildir->file;
ok $maildir->path, '->path = '.$maildir->path;
ok scalar @{ $maildir->inodes };
ok scalar keys %{ $maildir->inodes };
$emindex++;
}
ok $emindex > 1;
is $emindex, scalar @{ $maildir->inodes };
is $emindex, scalar keys %{ $maildir->inodes };
}
}

Expand Down
6 changes: 3 additions & 3 deletions t/800-cannot-parse-yet.t
Original file line number Diff line number Diff line change
Expand Up @@ -19,18 +19,18 @@ MAKE_TEST: {
isa_ok $maildir, 'Sisimai::Mail::Maildir';
is $maildir->dir, $CannotParse, '->dir = '.$maildir->dir;
is $maildir->file, undef, '->file = ""';
isa_ok $maildir->inodes, 'ARRAY';
isa_ok $maildir->inodes, 'HASH';
isa_ok $maildir->handle, 'IO::Dir';

while( my $r = $maildir->read ) {
ok length $r, 'maildir->read('.( $emindex + 1 ).')';
ok length $maildir->file, '->file = '.$maildir->file;
ok $maildir->path, '->path = '.$maildir->path;
ok scalar @{ $maildir->inodes };
ok scalar keys %{ $maildir->inodes };
$emindex++;
}
ok $emindex > 0;
is $emindex, scalar @{ $maildir->inodes };
is $emindex, scalar keys %{ $maildir->inodes };
}

MESSAGE: {
Expand Down

0 comments on commit 170db7b

Please sign in to comment.