File-Dropbox
view release on metacpan or search on metacpan
lib/File/Dropbox.pm view on Meta::CPAN
if ($type eq 'move' or $type eq 'copy') {
@arguments = (
from_path => $source,
to_path => $target,
);
} else {
@arguments = (
path => $source,
);
}
push @arguments, root => $self->{'root'};
my $response = $furl->post($url, $self->__headers__(), \@arguments);
return $self->__error__($response)
if $response->code != 200;
$self->{'meta'} = from_json($response->content());
return 1;
} # __fileops__
sub __error__ {
my ($self, $response) = @_;
my $code = $response->code();
if ($code == 400) {
$! = EINVAL;
}
elsif ($code == 401 or $code == 403) {
$! = EACCES;
}
elsif ($code == 404) {
$! = ENOENT;
return 0;
}
elsif ($code == 406) {
$! = EPERM;
return 0;
}
elsif ($code == 500 and $response->content() =~ m{\A(?:Cannot|Failed)}) {
$! = ECANCELED;
}
elsif ($code == 503) {
$self->{'meta'} = { retry => $response->header('Retry-After') };
$! = EAGAIN;
}
elsif ($code == 507) {
$! = EFBIG;
}
else {
die join ' ', $code, $response->decoded_content();
}
return 0;
} # __error__
sub contents ($;$$) {
my ($handle, $path, $hash) = @_;
die 'GLOB reference expected'
unless ref $handle eq 'GLOB';
*$handle->{'hash'} = $hash
if $hash;
if (open $handle, '<', $path || '/' or $! != EISDIR) {
delete *$handle->{'meta'};
return;
}
undef $!;
return @{ *$handle->{'meta'}{'contents'} };
} # contents
sub putfile ($$$) {
my ($handle, $path, $data) = @_;
die 'GLOB reference expected'
unless ref $handle eq 'GLOB';
close $handle or return 0;
my $self = *$handle{'HASH'};
my $furl = $self->{'furl'};
my ($url, $length);
$url = 'https://';
$url .= join '/', $hosts->{'content'}, $version;
$url .= join '/', '/files_put', $self->{'root'}, $path;
{
use bytes;
$length = length $data;
}
my $response = $furl->put($url, $self->__headers__(), $data);
return $self->__error__($response)
if $response->code != 200;
$self->{'path'} = $path;
$self->{'meta'} = from_json($response->content());
return 1;
} # putfile
sub movefile ($$$) { __fileops__('move', @_) }
sub copyfile ($$$) { __fileops__('copy', @_) }
sub deletefile ($$) { __fileops__('delete', @_) }
sub createfolder ($$) { __fileops__('create_folder', @_) }
( run in 0.708 second using v1.01-cache-2.11-cpan-39bf76dae61 )