use Encode;
use locale;
use File::Find;
+use Storable;
our $loaded;
our $filters;
);
}
+sub _save {
+ my ( $self, $path ) = @_;
+
+ my $name = $path;
+ my $dir = $self->app->home->rel_dir('data');
+ $name =~ s/^$dir//;
+ $name =~ s/\/+/_/g;
+ my $dump_path = '/tmp/mojo_facets.' . $name . '.storable';
+
+ warn "save loaded to $dump_path";
+ my $info = $loaded->{$path};
+ store $info, $dump_path;
+
+ # sync timestamp
+ my $mtime = $loaded->{$path}->{mtime};
+ utime $mtime, $mtime, $dump_path;
+
+ warn $dump_path, ' ', -s $dump_path, " bytes\n";
+}
+
sub _load_path {
my ( $self, $path ) = @_;
warn dump($stats);
- $loaded->{ $path } = {
+ my $info = {
header => [ @header ],
stats => $stats,
full_path => $full_path,
data => $data,
};
+ $loaded->{ $path } = $info;
+ $self->_save( $path );
+
}
sub _loaded {
my ( $self, $name ) = @_;
my $path = $self->session('path');
- die "$path $name doesn't exist in loaded ",dump( $loaded )
- unless defined $loaded->{$path}->{$name};
+ if ( ! defined $loaded->{$path}->{$name} ) {
+ warn "$path $name doesn't exist in loaded ",dump( $loaded );
+ $self->redirect_to('/data/index');
+ }
return $loaded->{$path}->{$name};
}
my $i = $_ + $offset;
last unless defined $filtered->[$i];
$i = $from_end - $i if $from_end;
- push @$sorted_items, $data->{items}->[ $filtered->[$i] ];
+ my $id = $filtered->[$i];
+ push @$sorted_items,
+ my $item = $data->{items}->[ $id ];
+ $item->{_row_id} ||= $id;
}
warn "# sorted_items ", $#$sorted_items + 1, " offset $offset limit $limit order $sort";