return -s $full_path;
}
+sub list_files {
+ my ( $self, $user, $path ) = @_;
+
+ $user =~ s{/+$}{} && warn "cleanup list_files arg [$user]";
+
+ $user = $self->user_info($user) unless ref $user eq 'HASH';
+
+ my $files = $user->{dir} . '/.meta/files';
+ if ( -e $files && -s $files > 0) {
+ local $/ = undef;
+ open(my $fh, '<', $files);
+ my $list = <$fh>;
+ close($fh);
+ warn "# list_files $user->{login} cached ", length($list), " bytes";
+ return $list;
+ }
+
+ my $path = $user->{dir};
+ open(my $pipe, '-|', qq|find -L $path -printf "%y %s %p\n"|);
+ open(my $fh, '>', "$files.new");
+ my $total_usage = 0;
+ my $list_txt;
+ while(<$pipe>) {
+ chomp;
+ my ( $type, $size, $name ) = split(/\s/, $_);
+ $name =~ s{$path}{./};
+ $name =~ s{//+}{/}g;
+ my $line = "$type $size $name\n";
+ print $fh $line;
+ $list_txt .= $line;
+ $total_usage += $size;
+ }
+ close($pipe);
+ close($fh);
+ rename "$files.new", $files;
+
+ open(my $usage, '>', "$files.usage.new");
+ print $usage $total_usage;
+ close($usage);
+ rename "$files.usage.new", "$files.usage";
+
+ warn "# list_files $path usage: $total_usage\n";
+
+ return $list_txt;
+}
+
sub refresh_file_list {
my ( $self, $user ) = @_;
$user = $self->user_info($user) unless ref $user eq 'HASH';
} else {
warn "## refresh_file_list $full_path missing";
}
+
+ unlink "$full_path.usage" if -e "$full_path.usage";
}
1;