AnyEvent-Net-Amazon-S3

 view release on metacpan or  search on metacpan

lib/AnyEvent/Net/Amazon/S3.pm  view on Meta::CPAN

use Module::AnyEvent::Helper;
use AnyEvent;

sub list_bucket_all_async {
    my ( $self, $conf ) = @_;
    $conf ||= {};
    my $bucket = $conf->{bucket};
    croak 'must specify bucket' unless $bucket;

    my $cv = AE::cv;
    Module::AnyEvent::Helper::bind_scalar($cv, $self->list_bucket_async($conf), sub {

        my $response = shift->recv;
        return $response unless $response->{is_truncated};
        my $all = $response;

        my $iter; $iter = sub {
            my $next_marker = $response->{next_marker}
                || $response->{keys}->[-1]->{key};
            $conf->{marker} = $next_marker;
            $conf->{bucket} = $bucket;
            Module::AnyEvent::Helper::bind_scalar($cv, $self->list_bucket_async($conf), sub {
                $response       = shift->recv;
                push @{ $all->{keys} }, @{ $response->{keys} };
                if($response->{is_truncated}) {
                    $iter->();
                } else {
                    delete $all->{is_truncated};
                    delete $all->{next_marker};
                    return $all;
                }
            });

lib/AnyEvent/Net/Amazon/S3/Client/Bucket.pm  view on Meta::CPAN

            bucket  => $self->name,
            keys    => [map {
                if (ref($_)) {
                    $_->key
                } else {
                    $_
                }
            } splice @objects, 0, ((scalar(@objects) > 1000) ? 1000 : scalar(@objects))]
        )->http_request;

        Module::AnyEvent::Helper::bind_scalar($cv, $self->client->_send_request_async($http_request), sub {
            my $last_result = shift->recv;
            if(!$last_result->is_success() || scalar(@objects) == 0) {
                return $last_result;
            } else {
                $iter->();
            }
        });
    };
    $iter->();
    return $cv;



( run in 1.113 second using v1.01-cache-2.11-cpan-2398b32b56e )