public static GoogleDriveResultWithData <GoogleDriveResourceType> DoesResourceExist(Connection connection, string fileOrFolderId)
        {
            CheckConnectionOrException(connection);

            var request = connection.Service.Files.Get(fileOrFolderId);

            GoogleDriveResultWithData <GoogleDriveResourceType> result = ExecuteRequest <FilesResource.GetRequest, Google.Apis.Drive.v3.Data.File, GoogleDriveResultWithData <GoogleDriveResourceType> >(request, (resp, res) =>
            {
                if (resp.MimeType == FolderMimeType)
                {
                    res.Data = GoogleDriveResourceType.Folder;
                }
                else
                {
                    res.Data = GoogleDriveResourceType.File;
                }
            });

            if (result.ErrorInfo.HttpErrorCode == (int)HttpStatusCode.NotFound)
            {
                result.IsSucceed = true;
                result.Data      = GoogleDriveResourceType.Unavailable;
            }

            return(result);
        }
Пример #2
0
        public static GoogleDriveResultWithData <GoogleDriveFile[]> GetFiles(Connection connection, string folderId = null)
        {
            var rawResult = GetResources(connection, true, folderId);

            var result = new GoogleDriveResultWithData <GoogleDriveFile[]>(rawResult);

            if (rawResult.Data != null)
            {
                result.Data = rawResult.Data.Select(t => new GoogleDriveFile(t.Id, t.Name, t.Description, t.WebViewLink)).ToArray();
            }
            return(result);
        }
Пример #3
0
        public static GoogleDriveResultWithData <GoogleDriveFile> UploadFile(Connection connection, string localFilePath, string fileName = null, string parentFolderId = null, Action <IUploadProgress> progessUpdate = null)
        {
            CorrectFolderId(ref parentFolderId);
            CheckConnectionOrException(connection);
            if (fileName == null)
            {
                fileName = System.IO.Path.GetFileName(localFilePath);
            }

            if (string.IsNullOrEmpty(localFilePath))
            {
                throw new ArgumentNullException("localFilePath", "localFilePath cannot be null or empty.");
            }

            //MimeMapping is not part of .Net Core so we have to do it a different way
            FileExtensionContentTypeProvider provider = new FileExtensionContentTypeProvider();
            string mimeType;

            if (!provider.TryGetContentType(fileName, out mimeType))
            {
                mimeType = "application/octet-stream";
            }

            using (System.IO.FileStream stream = System.IO.File.OpenRead(localFilePath))
                try
                {
                    var fileMetadata = new File()
                    {
                        Name     = fileName,
                        MimeType = mimeType,
                        Parents  = new List <string> {
                            parentFolderId
                        }
                    };

                    var request = connection.Service.Files.Create(fileMetadata, stream, mimeType);
                    request.Fields = "id, name, mimeType, description, webViewLink";

                    if (progessUpdate != null)
                    {
                        request.ProgressChanged += progessUpdate;
                    }

                    GoogleDriveResultWithData <GoogleDriveFile> result = UploadRequest(request);

                    return(result);
                }
                finally {
                    stream.Close();
                }
        }
        private static GoogleDriveResultWithData <List <Google.Apis.Drive.v3.Data.File> > GetResources(Connection connection, bool wantsFiles, string folderId = null)
        {
            CorrectFolderId(ref folderId);
            CheckConnectionOrException(connection);

            List <Google.Apis.Drive.v3.Data.File> files = new List <Google.Apis.Drive.v3.Data.File>();

            FilesResource.ListRequest listRequest = connection.Service.Files.List();
            if (wantsFiles)
            {
                listRequest.Q = $"mimeType != '{FolderMimeType}' and '{folderId}' in parents and trashed = false";
            }
            else
            {
                listRequest.Q = $"mimeType = '{FolderMimeType}' and '{folderId}' in parents and trashed = false";
            }

            listRequest.Fields = "nextPageToken, files(id, name, mimeType, description, webViewLink)";

            FileList googleDriveFileList;
            GoogleDriveBaseResult partialResult;

            do
            {
                googleDriveFileList = null;
                partialResult       = ExecuteRequest <FilesResource.ListRequest, FileList, GoogleDriveBaseResult>(listRequest, (aFileList, _) =>
                {
                    googleDriveFileList = aFileList;
                    files.AddRange(googleDriveFileList.Files);
                    listRequest.PageToken = googleDriveFileList.NextPageToken;
                });

                if (!partialResult.IsSucceed)
                {
                    return(new GoogleDriveResultWithData <List <Google.Apis.Drive.v3.Data.File> >(partialResult));
                }
            } while (googleDriveFileList != null && googleDriveFileList.NextPageToken != null);

            var result = new GoogleDriveResultWithData <List <Google.Apis.Drive.v3.Data.File> > (partialResult)
            {
                Data = files
            };

            return(result);
        }
        public static GoogleDriveResultWithData <GoogleDrivePermission> SetResourcePermissions(Connection connection, string fileOrFolderId, GoogleDrivePermission permission)
        {
            CheckConnectionOrException(connection);
            CheckPermissionOrException(permission);

            PermissionsResource.CreateRequest request = connection.Service.Permissions.Create(new Permission()
            {
                EmailAddress = permission.Email,
                Type         = permission.Type.ToString(),
                Role         = permission.Role.ToString()
            }, fileOrFolderId);

            GoogleDriveResultWithData <GoogleDrivePermission> result = ExecuteRequest <PermissionsResource.CreateRequest, Permission, GoogleDriveResultWithData <GoogleDrivePermission> >(request, (resp, res) =>
            {
                res.Data = new GoogleDrivePermission(resp.Id, resp.EmailAddress, permission.Type, permission.Role);
            });

            return(result);
        }
        public static GoogleDriveResultWithData <GoogleDriveFile> UploadFile(Connection connection, string localFilePath, string fileName = null, string parentFolderId = null, Action <IUploadProgress> progessUpdate = null)
        {
            CorrectFolderId(ref parentFolderId);
            CheckConnectionOrException(connection);
            if (fileName == null)
            {
                fileName = System.IO.Path.GetFileName(localFilePath);
            }

            if (string.IsNullOrEmpty(localFilePath))
            {
                throw new ArgumentNullException("localFilePath", "localFilePath cannot be null or empty.");
            }

            using (System.IO.FileStream stream = System.IO.File.OpenRead(localFilePath))
                try
                {
                    var fileMetadata = new File()
                    {
                        Name     = fileName,
                        MimeType = MimeMapping.GetMimeMapping(fileName),
                        Parents  = new List <string> {
                            parentFolderId
                        }
                    };

                    var request = connection.Service.Files.Create(fileMetadata, stream, MimeMapping.GetMimeMapping(fileName));
                    request.Fields = "id, name, mimeType, description, webViewLink";

                    if (progessUpdate != null)
                    {
                        request.ProgressChanged += progessUpdate;
                    }

                    GoogleDriveResultWithData <GoogleDriveFile> result = UploadRequest(request);

                    return(result);
                }
                finally {
                    stream.Close();
                }
        }
        public static GoogleDriveResultWithData <GoogleDrivePermission[]> GetResourcePermissions(Connection connection, string fileOrFolderId)
        {
            CheckConnectionOrException(connection);

            FilesResource.GetRequest request = connection.Service.Files.Get(fileOrFolderId);
            request.Fields = "permissions";

            GoogleDriveResultWithData <GoogleDrivePermission[]> result = ExecuteRequest <FilesResource.GetRequest, File, GoogleDriveResultWithData <GoogleDrivePermission[]> >(request, (resp, res) =>
            {
                if (resp.Permissions == null)
                {
                    res.Data = new GoogleDrivePermission[] { }
                }
                ;
                else
                {
                    res.Data = resp.Permissions.Select(x => new GoogleDrivePermission(x.Id, x.EmailAddress, TranslatePermType(x.Type), TranslateRole(x.Role))).ToArray();
                }
            });

            return(result);
        }
        private static GoogleDriveResultWithData <GoogleDriveFile> UploadRequest(Google.Apis.Drive.v3.FilesResource.CreateMediaUpload request)
        {
            var status = request.Upload();

            if (status.Status == UploadStatus.Completed)
            {
                var file = request.ResponseBody;
                if (file != null)
                {
                    return(new GoogleDriveResultWithData <GoogleDriveFile>()
                    {
                        Data = new GoogleDriveFile(file.Id, file.Name, file.Description, file.WebViewLink),
                        IsSucceed = true
                    });
                }
                else
                {
                    return new GoogleDriveResultWithData <GoogleDriveFile>()
                           {
                               IsSucceed = false, ErrorInfo = new GoogleDriveErrorInfo {
                                   ErrorMessage = "Unknown error"
                               }
                           }
                };
            }

            var result = new GoogleDriveResultWithData <GoogleDriveFile>();

            if (result.FillFromException(status.Exception))
            {
                return(result);
            }
            throw status.Exception;
        }

        const string FolderMimeType = "application/vnd.google-apps.folder";