libarchive-sevenzip-perl/lib/Archive/SevenZip/Entry.pm
2017-09-14 11:26:13 +02:00

138 lines
2.3 KiB
Perl

package Archive::SevenZip::Entry;
use strict;
use Time::Piece; # for strptime
use File::Basename ();
use Path::Class ();
use vars qw($VERSION);
$VERSION= '0.06';
sub new {
my( $class, %options) = @_;
bless \%options => $class
}
sub archive {
$_[0]->{_Container}
}
sub fileName {
my( $self ) = @_;
my $res = $self->{Path};
# Normalize to unixy path names
$res =~ s!\\!/!g;
# If we're a directory, append the slash:
if( $self->{Folder} eq '+') {
$res .= '/';
};
$res
}
# Class::Path API
sub basename {
Path::Class::file( $_[0]->{Path} )->basename
}
sub components {
my $cp = file( $_[0]->{Path} );
$cp->components()
}
sub lastModFileDateTime {
0
}
sub crc32 {
hex( $_[0]->{CRC} );
}
sub crc32String {
lc $_[0]->{CRC};
}
sub desiredCompressionMethod {
$_[0]->{Method}
}
sub uncompressedSize {
$_[0]->{Size}
}
sub dir {
# We need to return the appropriate class here
# so that further calls to (like) dir->list
# still work properly
die "->dir Not implemented";
}
sub open {
my( $self, $mode, $permissions )= @_;
$self->archive->openMemberFH( membername => $self->fileName, binmode => $mode );
}
{ no warnings 'once';
*fh = \&open; # Archive::Zip API
}
# Path::Class API
sub slurp {
my( $self, %options )= @_;
my $fh = $self->archive->openMemberFH( membername => $self->fileName, binmode => $options{ iomode } );
local $/;
<$fh>
}
# Archive::Zip API
#externalFileName()
# Archive::Zip API
#fileName()
# Archive::Zip API
#lastModFileDateTime()
# Archive::Zip API
#lastModTime()
# Archive::Zip API
sub extractToFileNamed {
my($self, $target) = @_;
$self->archive->extractMember( $self->fileName, $target );
};
1;
=head1 REPOSITORY
The public repository of this module is
L<http://github.com/Corion/archive-sevenzip>.
=head1 SUPPORT
The public support forum of this module is
L<https://perlmonks.org/>.
=head1 BUG TRACKER
Please report bugs in this module via the RT CPAN bug queue at
L<https://rt.cpan.org/Public/Dist/Display.html?Name=Archive-SevenZip>
or via mail to L<archive-sevenzip-Bugs@rt.cpan.org>.
=head1 AUTHOR
Max Maischein C<corion@cpan.org>
=head1 COPYRIGHT (c)
Copyright 2015-2016 by Max Maischein C<corion@cpan.org>.
=head1 LICENSE
This module is released under the same terms as Perl itself.
=cut