diff --git a/lib/SixteenColors/Archive.pm b/lib/SixteenColors/Archive.pm index 8f9abe4..67dc23e 100644 --- a/lib/SixteenColors/Archive.pm +++ b/lib/SixteenColors/Archive.pm @@ -3,6 +3,7 @@ package SixteenColors::Archive; use Moose; use Moose::Util::TypeConstraints; use Archive::Zip; +use Directory::Scratch; subtype 'SixteenColors::Types::Filename', as 'Str', @@ -34,17 +35,19 @@ sub files { sub extract { my ( $self, $dir ) = @_; my $zip = $self->archive; + $dir = Directory::Scratch->new; # custom extraction dir not yet supported my $warn = ''; eval { local $SIG{ __WARN__ } = sub { $warn = shift }; - $zip->extractTree; + $zip->extractTree( '.', $dir ); }; - return unless $@ || $warn =~ m{Unsupported compression combination}i; + return $dir unless $@ || $warn =~ m{Unsupported compression combination}i; my $file = $self->file; - `unzip -o ${file}`; + `unzip -o ${file} -d $dir`; + return $dir; } no Moose; diff --git a/lib/SixteenColors/Schema/Result/Pack.pm b/lib/SixteenColors/Schema/Result/Pack.pm index 7841dea..5141553 100644 --- a/lib/SixteenColors/Schema/Result/Pack.pm +++ b/lib/SixteenColors/Schema/Result/Pack.pm @@ -6,9 +6,7 @@ use warnings; use base qw( DBIx::Class ); use File::Basename (); -use Cwd (); use SixteenColors::Archive; -use Directory::Scratch; use GD (); use Text::Markdown (); @@ -136,16 +134,8 @@ sub pack_folder_location { } sub extract { - my ( $self ) = @_; - my $archive = SixteenColors::Archive->new( { filename => $self->file_path } ); - my $temp = Directory::Scratch->new; - my $cwd = Cwd::getcwd(); - - chdir( $temp ); - $archive->extract; - chdir( $cwd ); - - return $temp; + my $self = shift; + return SixteenColors::Archive->new( { filename => $self->file_path } )->extract( @_ ); } my @months