void IAction.CopyFileItem(ProgressInfo progressInfo) { var fileInfo = (FileInfo)child; Models.Item fileItem = null; fileName = child.Name; try { fileItem = client.Items.ByPath(uploadTarget.url, "/" + child.Name).Execute(); } catch (ODataException e) { if (e.Code != System.Net.HttpStatusCode.NotFound) { throw e; } } bool duplicate = fileItem != null && fileItem is Models.File; bool hashcodeMatches = duplicate ? (fileItem as Models.File).Hash.Equals(Utility.GetMD5HashFromFile(child.FullName)) : false; if (duplicate && actionType == ActionType.None) { throw new IOException("File already exist"); } else if (!duplicate || actionType == ActionType.Force || (actionType == ActionType.Sync && !hashcodeMatches)) { var uploadSpec = new UploadSpecificationRequest { CanResume = false, Details = details, FileName = fileInfo.Name, FileSize = fileInfo.Length, Method = UploadMethod.Threaded, Parent = uploadTarget.url, ThreadCount = 4, Raw = true }; using (var platformFileInfo = new PlatformFileInfo(fileInfo)) { var uploader = client.GetAsyncFileUploader(uploadSpec, platformFileInfo); progressInfo.ProgressTotal(progressInfo.FileIndex, fileInfo.Length); uploader.OnTransferProgress = (sender, args) => { if (args.Progress.TotalBytes > 0) { progressInfo.ProgressTransferred(progressInfo.FileIndex, args.Progress.BytesTransferred); } }; Task.Run(() => uploader.UploadAsync()).Wait(); fileSupportDelegate(fileInfo.Name); } } }
void IAction.CopyFileItem() { var fileInfo = (FileInfo)child; Models.Item fileItem = null; try { fileItem = client.Items.ByPath(uploadTarget.url, "/" + child.Name).Execute(); } catch (ODataException e) { if (e.Code != System.Net.HttpStatusCode.NotFound) { throw e; } } bool duplicate = fileItem != null && fileItem is Models.File; bool hashcodeMatches = duplicate ? (fileItem as Models.File).Hash.Equals(Utility.GetMD5HashFromFile(child.FullName)) : false; if (duplicate && actionType == ActionType.None) { throw new IOException("File already exist"); } else if (!duplicate || actionType == ActionType.Force || (actionType == ActionType.Sync && !hashcodeMatches)) { var uploadSpec = new UploadSpecificationRequest { CanResume = false, Details = details, FileName = fileInfo.Name, FileSize = fileInfo.Length, Method = UploadMethod.Threaded, Parent = uploadTarget.url, ThreadCount = 4, Raw = true }; var uploader = client.GetAsyncFileUploader(uploadSpec, new PlatformFileInfo(fileInfo)); var progressBar = new ProgressBar(copySfItem); progressBar.SetProgress(fileInfo.Name, 0); uploader.OnTransferProgress = (sender, args) => { int pct = 100; if (args.Progress.TotalBytes > 0) { pct = (int)(((float)args.Progress.BytesTransferred / args.Progress.TotalBytes) * 100); } progressBar.SetProgress(fileInfo.Name, pct); }; Task task = Task.Run(() => uploader.UploadAsync()); task.ContinueWith(t => progressBar.Finish()); task.Wait(); } }