NAME
    Net::Google::Drive - simple Google drive API module

SYNOPSIS
    This module use to upload, download, share file on Google drive use
    Net::Google::Drive;

        #Create disk object. You need send in param 'access_token', 'refresh_token', 'client_id' and 'client_secret'. 
        #Values of 'client_id' and 'client_secret' uses to create Net::Google::OAuth object so that update value of 'access_token'.
        my $disk = Net::Google::Drive->new(
                                            -client_id          => $client_id,
                                            -client_secret      => $client_secret,
                                            -access_token       => $access_token,
                                            -refresh_token      => $refresh_token,
                                            );

        # Search file by name
        my $file_name = 'upload.doc';
        my $files = $disk->searchFileByName( -filename => $file_name ) or croak "File '$file_name' not found";
        my $file_id = $files->[0]->{id};
        print "File id: $file_id\n";

        #Download file
        my $dest_file = '/home/upload.doc';
        $disk->downloadFile(
                                -file_id        => $file_id,
                                -dest_file      => $dest_file,
                                );

        #Upload file
        my $source_file = '/home/upload.doc';
        my $res = $disk->uploadFile( -source_file   => $source_file );
        print "File: $source_file uploaded. File id: $res->{id}\n";

METHODS
  new(%opt)
    Create Net::Google::Disk object

        %opt:
            -client_id          => Your app client id (Get from google when register your app)
            -client_secret      => Your app client secret (Get from google when register your app)
            -access_token       => Access token value (Get from L<Net::Google::OAuth>)
            -refresh_token      => Refresh token value (Get from L<Net::Google::OAuth>)

  searchFileByName(%opt)
    Search file on google disk by name. Return arrayref to info with found
    files. If files not found - return empty arrayref

        %opt:
            -filename           => Name of file to find
        Return:
       [
            [0] {
                id         "1f13sLfo6UEyUuFpn-NWPnY",
                kind       "drive#file",
                mimeType   "application/x-perl",
                name       "drive.t"
            }
        ]
    
  searchFileByNameContains(%opt)
    Search files on google drive by name contains value in param '-filename'
    Param and return value same as in method searchFileByName

  downloadFile(%opt)
    Download file from google dist to -dest_file on local system. Return 1
    if success, die in otherwise

        %opt: 
            -dest_file          => Name of file on disk in which you will download file from google disk
            -file_id            => Id of file on google disk

  deleteFile(%opt)
    Delete file from google disk. Return 1 if success, die in otherwise

        %opt: 
            -file_id            => Id of file on google disk

  uploadFile(%opt)
    Upload file from local system to google drive. Return file_info hashref
    if success, die in otherwise

        %opt:
            -source_file        => File on local system
            -parents            => Optional arrayref of parent ids
        Return:
           {
                id         "1LVAr2PpqX9m314JyZ6YJ4v_KIzG0Gey2",
                kind       "drive#file",
                mimeType   "application/octet-stream",
                name       "gogle_upload_file"
           }

  setFilePermission(%opt)
    Set permissions for file on google drive. Return permission hashref, die
    in otherwise

        %opt:
            -file_id            => Id of file on google disk
            -type               => The type of the grantee. Valid values are: (user, group, domain, anyone)
            -role               => The role granted by this permission. Valid values are: (owner, organizer, fileOrganizer, writer, commenter, reader)
        Return:
            {
                allowFileDiscovery   JSON::PP::Boolean  {
                    Parents       Types::Serialiser::BooleanBase
                    public methods (0)
                    private methods (0)
                    internals: 0
                },
                id                   "anyoneWithLink",
                kind                 "drive#permission",
                role                 "reader",
                type                 "anyone"
            }

  getFileMetadata(%opt)
    Get metadata of file. Return hashref with metadata if success, die in
    otherwise

        %opt: 
            -file_id            => Id of file on google disk
        Return:
                {                                                                                                                                                         alternateLink                  "https://drive.google.com/file/d/10Z5YDCHn3gnj0S4_Lf0poc2Lm5so0Sut/view?usp=drivesdk",
                appDataContents                JSON::PP::Boolean  {
                    Parents       Types::Serialiser::BooleanBase
                    public methods (0)
                    private methods (0)
                    internals: 0
                },
                capabilities                   {
                    canCopy   JSON::PP::Boolean  {
                        Parents       Types::Serialiser::BooleanBase
                        public methods (0)
                        private methods (0)
                        internals: 1
                    },
                    canEdit   var{capabilities}{canCopy}
                },
                copyable                       var{capabilities}{canCopy},
                copyRequiresWriterPermission   var{appDataContents},
                createdDate                    "2018-10-04T12:05:15.896Z",
                downloadUrl                    "https://doc-0g-7o-docs.googleusercontent.com/docs/securesc/ck8i7vfbvef13kb30b8mkrcjv4ihp2uj/3mfn1kbr655euhlo7tctg5mmn8oirg
            gf/1538654400000/10526805100525201667/10526805100525201667/10Z5YDCHn3gnj0S4_Lf0poc2Lm5so0Sut?e=download&gd=true",
                editable                       var{capabilities}{canCopy},
                embedLink                      "https://drive.google.com/file/d/10Z5YDCHn3gnj0S4_Lf0poc2Lm5so0Sut/preview?usp=drivesdk",
                etag                           ""omwGuTP8OdxhZkubyp-j43cFdJQ/MTUzODY1NDcxNTg5Ng"",
                explicitlyTrashed              var{appDataContents},
                fileExtension                  "",
                fileSize                       1000000,
                headRevisionId                 "0B4HgPHxdPy22UmZXSFVRTkRLbXhFakdzZjFSUGkrNWZIVFN3PQ",
                iconLink                       "https://drive-thirdparty.googleusercontent.com/16/type/application/octet-stream",
                id                             "10Z5YDCHn3gnj0S4_Lf0poc2Lm5so0Sut",
                kind                           "drive#file",
                labels                         {
                    hidden       var{appDataContents},
                    restricted   var{appDataContents},
                    starred      var{appDataContents},
                    trashed      var{appDataContents},
                    viewed       var{appDataContents}
                },
                lastModifyingUser              {
                        displayName           "Ларри Уолл",
                        emailAddress          "perlgogledrivemodule@gmail.com",
                        isAuthenticatedUser   var{capabilities}{canCopy},
                        kind                  "drive#user",
                        permissionId          10526805100525201667
                },
                lastModifyingUserName          "Ларри Уолл",
                markedViewedByMeDate           "1970-01-01T00:00:00.000Z",
                md5Checksum                    "ded2a2983b3e1743152d8224549510e1",
                mimeType                       "application/octet-stream",
                modifiedByMeDate               "2018-10-04T12:05:15.896Z",
                modifiedDate                   "2018-10-04T12:05:15.896Z",
                originalFilename               "gogle_upload_file",
                ownerNames                     [
                    [0] "Ларри Уолл"
                ],
                owners                         [
                    [0] {
                        displayName           "Ларри Уолл",
                        emailAddress          "perlgogledrivemodule@gmail.com",
                        isAuthenticatedUser   var{capabilities}{canCopy},
                        kind                  "drive#user",
                        permissionId          10526805100525201667
                    }
                ],
                parents                        [
                    [0] {
                        id           "0AIHgPHxdPy22Uk9PVA",
                        isRoot       var{capabilities}{canCopy},
                        kind         "drive#parentReference",
                        parentLink   "https://www.googleapis.com/drive/v2/files/0AIHgPHxdPy22Uk9PVA",
                        selfLink     "https://www.googleapis.com/drive/v2/files/10Z5YDCHn3gnj0S4_Lf0poc2Lm5so0Sut/parents/0AIHgPHxdPy22Uk9PVA"
                    }
                ],
                quotaBytesUsed                 1000000,
                selfLink                       "https://www.googleapis.com/drive/v2/files/10Z5YDCHn3gnj0S4_Lf0poc2Lm5so0Sut",
                shared                         var{appDataContents},
                spaces                         [
                    [0] "drive"
                ],
                title                          "gogle_upload_file",
                userPermission                 {
                    etag       ""omwGuTP8OdxhZkubyp-j43cFdJQ/N52l-iUAo-dARaTch8nQXOzl348"",
                    id         "me",
                    kind       "drive#permission",
                    role       "owner",
                    selfLink   "https://www.googleapis.com/drive/v2/files/10Z5YDCHn3gnj0S4_Lf0poc2Lm5so0Sut/permissions/me",
                    type       "user"
                },
                version                        2,
                webContentLink                 "https://drive.google.com/uc?id=10Z5YDCHn3gnj0S4_Lf0poc2Lm5so0Sut&export=download",
                writersCanShare                var{capabilities}{canCopy}
            }

  shareFile(%opt)
    Share file for download. Return download link if success, die in
    otherwise

        %opt: 
            -file_id            => Id of file on google disk

DEPENDENCE
    Net::Google::OAuth, LWP::UserAgent, JSON::XS, URI, HTTP::Request,
    File::Basename

AUTHORS
    *   Pavel Andryushin <vrag867@gmail.com>

COPYRIGHT AND LICENSE
    This software is copyright (c) 2018 by Pavel Andryushin.

    This is free software; you can redistribute it and/or modify it under
    the same terms as the Perl 5 programming language system itself.