Google-OAuth
view release on metacpan or search on metacpan
samples/google.pm view on Meta::CPAN
sub url {
my $package = shift ;
my $token = shift ;
my @args = @_ ;
push @args, '?maxResults=200' unless @args ;
return join '/', 'https://www.googleapis.com/drive/v2/files', @args ;
}
## an alternative URL
sub upload {
my $package = shift ;
my $token = shift ;
return join '/', 'https://www.googleapis.com/upload/drive/v2/files',
@_ ;
}
## same as new() with one argument
sub download {
my $package = shift ;
my $token = shift ;
my $o = $token->content( GET => $package->url( $token, @_ ) ) ;
return $o->{downloadUrl}?
$token->content( GET => $o->{downloadUrl} ): $o ;
}
sub about {
## See CAVEATS in NoSQL::PL2SQL::Simple
my $self = shift ;
$self = $self->db unless ref $self ;
my $token = shift or return warn 'requires token' ;
my @out = () ;
my $o = $token->content( GET => root( '', '', 'about' ) ) ;
map { delete $o->{$_} } qw( additionalRoleInfo
user importFormats exportFormats maxUploadSizes ) ;
my $ekey = $token->{emailkey} ;
my @r = $self->query( about => $ekey )->records ;
if ( @r ) {
my $r = $self->record( $r[0]{record} ) ;
@out = ( $r->{largestChangeId} .. $o->{largestChangeId} ) ;
$r->save( $o ) ;
}
else {
my $r = $self->save( $o ) ;
$self->save( {
about => $ekey,
record => $r->SQLObjectID
} ) ;
}
return @out ;
}
sub update {
my $self = shift ;
$self = $self->db unless ref $self ;
my $token = shift or return warn 'requires token' ;
my @changes = $self->about( $token ) ;
shift @changes ; ##rerun
push @changes, @_ ;
my @updates = grep $_->{file},
map { $token->content( GET => $_ ) }
map { $self->root( $token, changes => $_ ) }
@changes ;
foreach my $o ( @updates ) {
$o->{file}->{parent} = $o->{file}->{parents}->[0]->{id} ;
my @ok = $self->id( $o->{file}->{id} )->records ;
if ( $o->{deleted} ) {
$ok[0]->delete if @ok ;
}
elsif ( @ok == 0 ) {
$self->save( $o->{file} ) ;
}
else {
$ok[0]->save( $o->{file} ) ;
}
}
return scalar @updates ;
}
## Deprecated in favor of update()
##
sub reload {
my $self = shift ;
my $token = shift or return warn 'requires token' ;
$self = $self->db unless ref $self ;
my $m = new multihash ;
my %etag = reverse $self->etag ;
my @items = @{ Google::Drive->new( $token )->{items} } ;
my %ok = map { $_->{etag} => 1 } @items ;
map { $ok{$_}-- } keys %etag ;
map { $m->{ $ok{$_} } = $_ } ## +1 new ; 0 existing ; -1 deleted
keys %ok ;
map { $self->delete( $_ ) }
map { $self->etag( $_ ) }
@{ $m->{-1} || [] } ; ## delete
map { $self->save( $_ ) }
map { $_->{parent} = $_->{parents}->[0]->{id} ; $_ }
grep $ok{ $_->{etag} } == 1, @items ; ## insert
return $m ;
}
package Google::TQIS ;
( run in 0.601 second using v1.01-cache-2.11-cpan-13bb782fe5a )