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 )