public async Task ListFilesAsync(Containers.Directory directory) { using (DriveService service = DriveClient.GetInfo()) { try { FilesResource.ListRequest listRequest = service.Files.List(); listRequest.Q = "'" + directory.id + "' in parents and trashed = false"; listRequest.OrderBy = "name"; listRequest.Fields = "nextPageToken, files" + "(id, name, mimeType, permissions, webContentLink, description, size, shared, owners, parents)"; Google.Apis.Drive.v3.Data.FileList ListResponse = listRequest.Execute(); while (ListResponse.Files != null && ListResponse.Files.Count != 0) { List <Task> tasks = new List <Task>(); foreach (var item in ListResponse.Files) { tasks.Add(Task.Run(() => AddToParentDirectoryObject(item, directory))); } Task.WaitAll(tasks.ToArray()); if (ListResponse.NextPageToken == null) { break; } listRequest.PageToken = ListResponse.NextPageToken; ListResponse = listRequest.Execute(); } } catch (Exception e) { throw new Exception(e.StackTrace); } } }
// Returns the Google Drive provided specific id of the root directory. public Containers.Directory GetRoot() { Containers.Directory root = new Containers.Directory() { id = "root", }; return(root); }
internal Containers.Directory CreateDirectoryObject(Google.Apis.Drive.v3.Data.File item, Containers.Directory parentDirectory) { Containers.Directory directory = new Containers.Directory() { id = item.Id, Name = item.Name, Description = item.Description, Size = item.Size, SharedLink = GetSharedLink(item), Owners = GetOwners(item), CreationTime = item.CreatedTime.ToString(), Users = GetUsers(item), path = parentDirectory.path + parentDirectory.Name + "\\", mimeType = "application/folder", Parent = (List <string>)item.Parents, }; return(directory); }
// Deserialize transaction file and assign the returned object to global variable CloudItems private bool DeserializeTransactioFile() { try { DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(Containers.Directory)); lock (thisLock) { using (FileStream stream = new FileStream(transactionLog.path, FileMode.Open)) { stream.Position = 0; rootDirectory = (Containers.Directory)ser.ReadObject(stream); } } } catch (Exception e) { return(false); } return(true); }
public void UploadDirectory(Containers.Directory item) { try { using (var service = DriveClient.GetInfo()) { var fileMetadata = new Google.Apis.Drive.v3.Data.File() { Name = item.Name, MimeType = "application/vnd.google-apps.folder", Parents = item.Parent, }; var request = service.Files.Create(fileMetadata).Execute(); } } catch (Exception e) { throw e; } }
private async Task CopyFilesFromCloudToLocal(bool resume = false) { try { if (resume) { DeserializeTransactioFile(); Copy(); } else { CreateTransactionLogFile(); fileQueue.Enqueue(rootDirectory); Copy(); } fileQueue.Clear(); rootDirectory = null; } catch (Exception e) { throw e; } }
private async Task GetRootFromSource() { ListResource files = new ListResource(cloud); rootDirectory = await files.GetFiles(); }
internal void AddToParentDirectoryObject(Google.Apis.Drive.v3.Data.File item, Containers.Directory directory) { if (isDirectory(item.MimeType)) { if (directory.SubDirectories == null) { directory.SubDirectories = new List <Containers.Directory>(); } directory.SubDirectories.Add(CreateDirectoryObject(item, directory)); } else { if (directory.Files == null) { directory.Files = new List <Containers.File>(); } directory.Files.Add(CreateFileObject(item, directory)); } }
internal Containers.File CreateFileObject(Google.Apis.Drive.v3.Data.File item, Containers.Directory parentDirectory) { Containers.File file = new Containers.File() { id = item.Id, Name = item.Name, Description = item.Description, Size = item.Size, SharedLink = item.WebContentLink, Owners = GetOwners(item), CreationTime = item.CreatedTime.ToString(), Users = GetUsers(item), path = parentDirectory.path + parentDirectory.Name + "\\", mimeType = item.MimeType, Parent = (List <string>)item.Parents, }; return(file); }