Merge branch 'attr'
[cloudstore.git] / lib / CloudStore / API.pm
index 15b4d39..ef39524 100644 (file)
@@ -30,6 +30,11 @@ sub new {
                warn "## CREATED md5pool $self->{md5}->{dir}\n";
        }
 
+       my $name = $self->{SLICE};
+       $name =~ s/\W+/_/g;
+       $name =~ s/^_+//;
+       $self->{quota} = $name . '_quota';
+
        return $self;
 }
 
@@ -80,7 +85,7 @@ sub create_user {
        }
 
        # FIXME update quota only on create?
-       $self->gearman_do( 'narada_s1_quota_set' => "$found $new_quota" );
+       $self->gearman_do( "$self->{quota}_set" => "$found $new_quota" );
 
        return $found;
 }
@@ -146,7 +151,7 @@ sub usage {
                $sum->{_usage}  += $v[1];
        }
        my ( $usage, $quota ) = split(/ /,
-               $self->gearman_do( 'narada_s1_quota_get' => $user->{uid} )
+               $self->gearman_do( "$self->{quota}_get" => $user->{uid} )
        );
        $sum->{_usage} += $usage;
        $sum->{_quota} = $quota;
@@ -181,21 +186,19 @@ sub send_file {
        my $ok = link $f_full, $t_full; 
        $self->append( $t, 'recv', -s $t_full, $f->{uid}, $t_path );
 
+       $ok = -s $t_full if $ok; # replace true with file size
+
        my $md5;
        if ( $f->{uid} == $self->{md5}->{uid} ) {
                $md5 = $f_path; # we don't have local md5sum db for md5 user!
        } else {
-               $md5 = $self->md5sum($f)->get( $f_path );
+               $md5 = $self->md5_get($f_full);
        }
        if ( ! $md5 ) {
                warn "ERROR: no md5 for $f_path";
                return $ok;
        }
 
-       $self->md5sum($t)->put( $t_path => $md5 );
-       $self->md5sum_close($f);
-       $self->md5sum_close($t);
-
        $self->append_meta('md5sum', $t, $md5 => $t_path ); # md5sum for received files!
 
        return $ok;
@@ -205,19 +208,18 @@ sub rename_file {
        my ( $self, $user, $from, $to ) = @_;
        $user = $self->user_info($user) unless ref $user eq 'HASH';
 
-       $self->mkbasepath( "$user->{dir}/$to", { uid => $user->{uid}, gid => $user->{gid} } );
-       my $ok = rename "$user->{dir}/$from", "$user->{dir}/$to";
+       my $f_full = "$user->{dir}/$from";
+       my $t_full = "$user->{dir}/$to";
 
-       my $md5 = $self->md5sum($user)->get( $from );
+       $self->mkbasepath( $t_full, { uid => $user->{uid}, gid => $user->{gid} } );
+       my $ok = rename $f_full, $t_full;
+
+       my $md5 = $self->md5_get($t_full);
        if ( ! $md5 ) {
                warn "ERROR: no md5sum for $from";
                return $ok; # XXX our internal error
        }
 
-       $self->md5sum($user)->out( $from );
-       $self->md5sum($user)->put( $to => $md5 );
-       $self->md5sum_close($user);
-
        $self->append_meta('md5sum', $user, 'rename' => $from );
        $self->append_meta('md5sum', $user, $md5 => $from );
 
@@ -256,10 +258,15 @@ sub delete {
        $self->append( $user, 'delete', -$deleted_size, $user->{uid}, $path );
        $self->append_meta('md5sum', $user, 'delete', $path );
 
-       $self->md5sum($user)->out( $path );
-       $self->md5sum_close($user);
-
        return $full_path;
 }
 
+sub file_size {
+       my ( $self, $user, $path ) = @_;
+       $user = $self->user_info($user) unless ref $user eq 'HASH';
+
+       my $full_path = "$user->{dir}/$path";
+       return -s $full_path;
+}
+
 1;