void CheckDuplicate(DItem item) { Dictionary <string, int> dicDup = new Dictionary <string, int>(); foreach (DItem child in item.Children) { if (child.IsFolder) { CheckDuplicate(child); if (child.operation == Operation.CHANGED) { item.operation = Operation.CHANGED; } } else if (dicDup.ContainsKey(child.Name)) { dupList.Add(child); item.operation = child.operation = Operation.CHANGED; } else { dicDup[child.Name] = 1; } } }
async Task get_children(DItem dItem) { IItemRequestBuilder irb = string.IsNullOrEmpty(dItem.Id) ? oneDriveClient.Drive.Root : oneDriveClient.Drive.Items[dItem.Id]; try { List <Task> tasks = new List <Task>(); var request = irb.Children.Request() .Select("id,name,createdDateTime,size,file,folder,parentReference,webUrl"); while (request != null) { var children = await request .GetAsync(); foreach (var item in children) { DItem child = new DItem { Id = item.Id, Name = item.Name, Size = item.Size, WebUrl = item.WebUrl, Checksum = item.File != null && item.File.Hashes != null ? item.File.Hashes.Crc32Hash : null, CreatedDate = item.CreatedDateTime.Value.DateTime, Path = item.ParentReference.Path, IsFolder = item.Folder != null, Parent = dItem }; dItem.Children.Add(child); if (!child.IsFolder) { child.CountFile = 1; } else if (item.Folder.ChildCount > 0) { tasks.Add(get_children(child)); } } // next request if exceed 200 item request = children.NextPageRequest; } await Task.WhenAll(tasks); dItem.Size = dItem.Children.Sum(i => ((KFile)i).Size); dItem.CountFile = dItem.Children.Sum(i => ((KFile)i).CountFile); } catch (ServiceException ex) { MessageBox.Show(ex.Error.Message); } }
async Task OneDrive() { await get_authorize(); rootCloud = new DItem(); await get_children((DItem)rootCloud); show_folder_grid(rootCloud); SaveData(DATA_ONE_DRIVE); }
void SaveMD5(DItem item, string path, StringBuilder fileContent) { foreach (DItem child in item.Children) { if (child.IsFolder) { SaveMD5(child, Path.Combine(path, child.Name), fileContent); } else { fileContent.AppendLine($"{child.Checksum} *{Path.Combine(path, child.Name)}"); } } }
void CalculateSize(DItem item) { foreach (DItem child in item.Children) { if (child.IsFolder) { CalculateSize(child); } else { child.CountFile = 1; } } item.Size = item.Children.Sum(i => ((KFile)i).Size); item.CountFile = item.Children.Sum(i => ((KFile)i).CountFile); }
async Task GDrive() { if (credential == null) { using (var stream = new FileStream("client_secret.json", FileMode.Open, FileAccess.Read)) { credential = await GoogleWebAuthorizationBroker .AuthorizeAsync( stream, new[] { DriveService.Scope.DriveReadonly }, Environment.UserName, CancellationToken.None, new FileDataStore("oauth/drive")) ; } driveService = new DriveService(new BaseClientService.Initializer() { HttpClientInitializer = credential, ApplicationName = this.GetType().ToString(), }); } var req = driveService.About.Get(); req.Fields = "user(displayName,photoLink, me, emailAddress), storageQuota(limit,usage), maxImportSizes, maxUploadSize"; About ab = await req.ExecuteAsync(); lbUserinfo.Text = $"{ab.User.DisplayName} - {ab.User.EmailAddress}"; lbStorageamount.Text = $"{ab.StorageQuota.Usage.ToReadableSize()}/{ab.StorageQuota.Limit.ToReadableSize()}"; List <DItem> listfiles = new List <DItem>(); string pageToken = null; do { // Define parameters of request. FilesResource.ListRequest request = driveService.Files.List(); request.Fields = "nextPageToken, files(id,name,size,mimeType,parents,webViewLink,md5Checksum,createdTime,ownedByMe)"; request.Spaces = "drive"; request.Q = "(trashed = false) and ('me' in owners)"; request.PageToken = pageToken; request.PageSize = 1000; // List files. var result = await request.ExecuteAsync(); listfiles.AddRange(result.Files.Where(f => f.OwnedByMe == true).Select(f => { try { var x = new DItem { Id = f.Id, Name = f.Name, Size = f.Size, IsFolder = f.MimeType == "application/vnd.google-apps.folder", Checksum = f.Md5Checksum, CreatedDate = f.CreatedTime.Value, ParentId = f.Parents[0], WebUrl = f.WebViewLink }; return(x); } catch (Exception ex) { var a = ex; return(null); } })); pageToken = result.NextPageToken; }while (pageToken != null); Dictionary <string, DItem> dicFolder = listfiles.ToDictionary(i => i.Id); foreach (DItem item in listfiles) { if (!dicFolder.ContainsKey(item.ParentId)) { rootCloud = new DItem(); dicFolder[item.ParentId] = (DItem)rootCloud; } item.Parent = dicFolder[item.ParentId]; item.Parent.Children.Add(item); } CalculateSize((DItem)rootCloud); show_folder_grid(rootCloud); lbSource.Text = "Cloud"; SaveData(DATA_GDRIVE); }