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); }
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); }
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";