make_path $path unless -d $path;
}
-sub append {
- my $self = shift @_;
- my $user = shift @_;
- my $path;
+sub user_dir {
+ my ( $self,$user, $dir ) = @_;
$user = $self->user_info($user) unless ref $user eq 'HASH';
+ my $path;
if ( exists $user->{dir} ) {
- $path = $user->{dir} . '/.log';
+ $path = $user->{dir} . '/' . $dir;
} else {
die "no dir in ", dump $user;
}
+ $path =~ s{//+}{/}g;
+# warn "## user_dir $path";
+ return $path;
+}
+
+sub append {
+ my $self = shift @_;
+ my $user = shift @_;
+ my $path = $self->user_dir( $user => '.log');
my $line = join('#',@_);
open(my $fh, '>>', $path);
print $fh "$line\n";
close $fh;
warn "## $path $line\n";
+ $user = $self->user_info($user) unless ref $user eq 'HASH';
+}
+
+sub usage {
+ my ( $self, $user ) = @_;
+ my $path = $self->user_dir( $user => '.log');
+ my $sum;
+ open(my $fh, '<', $path);
+ while(<$fh>) {
+ chomp;
+ my @v = split(/#/,$_);
+ $sum->{ $v[0] } += $v[1];
+ $sum->{_total} += $v[1];
+ }
+ warn "## usage ",dump($user, $sum), $/;
+ return $sum;
}
sub send_file {
warn "# send_file - move $f_uid $f_path to pool\n";
chown $self->{md5}->{uid}, $self->{md5}->{gid}, $f_full;
chmod oct("0444"), $f_full;
+ $self->append( $f, 'sent', -s $f_full, $t->{uid}, $f_path );
} elsif ( $uid == $self->{md5}->{uid} ) {
warn "# send_file - shared $f_full\n";
}
$self->delete( $t, $t_path ) if -e $t_full;
- $self->append( $f, 'sent', -s $f_full, $t->{uid}, $f_path );
link $f_full, $t_full;
$self->append( $t, 'recv', -s $t_full, $f->{uid}, $t_path );
}
warn "delete $deleted_size bytes shared\n";
- $self->append( $user, 'delete', -$deleted_size, $path );
-}
-
-sub usage {
- my ( $uid ) = @_;
-
+ $self->append( $user, 'delete', -$deleted_size, $user->{uid}, $path );
}
1;
use strict;
use warnings;
-use Test::More tests => 17;
+use Test::More tests => 25;
use Data::Dump qw(dump);
use lib 'lib';
ok chown $test->{uid}, $test->{gid}, "$test->{dir}/foo.txt", 'chown';
ok my $uid2 = $o->create_user('test2@example.com','password',100_000_000), 'create_user test2';
+ok my $test2 = $o->user_info( $uid2 ), "user_info $uid2";
+
+foreach ( $test->{dir}, $test2->{dir} ) {
+ $_ .= "/.log";
+ unlink $_ if -e $_;
+}
+
+sub usage {
+ ok my $u = $o->usage( $_[0] ), 'usage';
+# diag dump $u;
+}
ok $o->send_file( $uid => '/foo.txt', $uid2 => 'dir1/dir2/bar.txt' ), 'send_file';
+usage $uid;
+usage $uid2;
ok $o->send_file( $uid2 => 'dir1/dir2/bar.txt', $uid => 'bar.txt' ), 'send_file back';
+usage $uid;
+usage $uid2;
ok $o->delete( $uid, 'foo.txt' );
+usage $uid;
ok $o->delete( $uid2, 'dir1' );
+usage $uid2;
ok $o->delete( $uid, 'bar.txt' );
+usage $uid;