use autodie;
use JSON::XS;
-use File::Path qw();
+use File::Path qw(make_path);
use File::Slurp qw();
use Cache::Memcached;
use Digest::MD5 qw(md5_base64);
my $buckets = {
files => 5800,
- usage => 5801,
+ session => 5801,
};
sub new {
sub usage_decr {
my ($self,$data) = @_;
- $self->{usage}->decr( $data->{login} => $data->{size} );
+ $self->{session}->decr( $data->{login} . ':usage' => $data->{size} );
}
sub usage_incr {
my ($self,$data) = @_;
- $self->{usage}->incr( $data->{login} => $data->{size} );
+ $self->{session}->incr( $data->{login} . ':usage' => $data->{size} );
}
sub usage {
my ($self,$data) = @_;
- $self->{usage}->get( $data->{login} );
+ $self->{session}->get( $data->{login} . ':usage' );
+}
+
+sub _key {
+ my $data = shift;
+ #md5_base64( $data->{login} . '/' . $data->{file} );
+ $data->{login} . ':' . $data->{file};
}
sub file_set {
my ($self,$data) = @_;
- my $k = md5_base64( $data->{login} . '/' . $data->{file} );
+ my $k = _key $data;
my $json = encode_json $data;
$self->{files}->set( $k => $json );
return $json;
sub file_get {
my ($self,$data) = @_;
- my $k = md5_base64( $data->{login} . '/' . $data->{file} );
+ my $k = _key $data;
if ( my $json = $self->{files}->get($k) ) {
return decode_json $json;
}
sub remove_file {
my ( $self, $data ) = @_;
$self->usage_decr( $data );
- my $k = md5_base64( $data->{login} . '/' . $data->{file} );
+ my $k = _key $data;
$self->{files}->delete( $k );
}
}
-sub remove_dir {
- my ( $self, $data ) = @_;
-
-}
-
sub transfer {
my ( $self,$data ) = @_;
- $data->{base64_path} ||= md5_base64( $data->{login} . '/' . $data->{file} );
-
my $blob = "users/$data->{login}/blob";
my $path = "$blob/$data->{file}";
die "unknown type $type ", dump $data;
}
} elsif ( $data->{itemize} =~ m/\*deleting/ ) {
- if ( -d $path ) {
- $self->remove_dir($data);
- } elsif ( -f $path ) {
- $self->remove_file($data);
- } else {
- die "unknown delete ", dump $data;
- }
+ $self->remove_file($data);
}
return $data;
}
my $new = "users/$data->{login}/blob/$dir$file";
if ( ! -e $new ) {
# create path from md5sum file
- my $dir = $1 if $new =~ m{^(.+)/[^/]+$};
- make_path $dir unless -d $dir;
+ my $only_dir = $1 if $new =~ m{^(.+)/[^/]+$};
+ make_path $only_dir unless -d $only_dir;
$imported += link "md5/$md5", $new;
- $self->new_file( $data );
+ my $fake = {
+ login => $data->{login},
+ host => $data->{host},
+ file => $dir . $file,
+ md5 => $md5,
+ size => -s $new,
+ };
+ $self->new_file($fake);
+ warn "fake ",dump($fake);
} else {
md5pool $new => $md5;
}