public async Task UploadFolders(List <FolderMapping> mappings, ProgressBarStepper stepper) { foreach (FolderMapping mapping in mappings) { await UploadFolderImpl(mapping, stepper); } }
public async Task UploadFolder(FolderMapping mapping) { progressUpdateAction.Invoke(0); var stepper = new ProgressBarStepper(GetLocalFiles(mapping.ClientSidePath).Length); await UploadFolderImpl(mapping, stepper); progressUpdateAction.Invoke(100); }
public async Task DownloadFolder(FolderMapping mapping) { progressUpdateAction.Invoke(0); var stepper = new ProgressBarStepper(await GetRemoteFilesCount(mapping)); await DownloadFolderImpl(mapping, stepper); progressUpdateAction.Invoke(100); }
public void Test100Items() { var stepper = new ProgressBarStepper(100); Assert.AreEqual(0, stepper.Value); for (int i = 0; i < 101; i++) { Assert.AreEqual(i, stepper.Value); Assert.AreEqual(i + 1, stepper.Step()); } }
private async Task Sync() { var toUpload = new List <FolderMapping>(); var toDownload = new List <FolderMapping>(); foreach (MappingViewModel mapping in Mappings) { if (mapping.InSync) { continue; } if (mapping.LocalNewer) { toUpload.Add(mapping.Mapping); } else { toDownload.Add(mapping.Mapping); } } int totalFiles = 0; foreach (FolderMapping mapping in toUpload) { totalFiles += Directory.GetFiles(mapping.ClientSidePath, "*", SearchOption.AllDirectories).Length; } totalFiles += await serverConnection.FileCount(toDownload); OperationProgress = 0; var stepper = new ProgressBarStepper(totalFiles); await serverConnection.UploadFolders(toUpload, stepper); await serverConnection.DownloadFolders(toDownload, stepper); OperationProgress = 100; foreach (MappingViewModel mapping in Mappings) { await mapping.UpdateLocalAndServerAge(); } }
private async Task DownloadFolderImpl(FolderMapping mapping, ProgressBarStepper stepper) { DateTime latestSync = await LatestSync(mapping); string remotePath = folderRoot + mapping.FriendlyName + "/" + DateTimeDirUtils.GetDirDateTimeString(latestSync) + "/"; List <FtpListItem> remoteFiles = await client.GetRecursiveListing(remotePath); foreach (FtpListItem file in remoteFiles) { string clientSidePath = mapping.ClientSidePath + @"\" + file.FullName.Substring(remotePath.Length).Replace("/", @"\"); await client.DownloadFileAsync(clientSidePath, file.FullName, true, FtpVerify.Retry); File.SetLastWriteTime(clientSidePath, latestSync); progressUpdateAction.Invoke(stepper.Step()); } }
private async Task UploadFolderImpl(FolderMapping mapping, ProgressBarStepper stepper) { string[] files = GetLocalFiles(mapping.ClientSidePath); var filePaths = from f in files select f.Substring(mapping.ClientSidePath.Length); DateTime uploadDateTime = DirUtils.GetLatestFileWriteTimeInDir(mapping.ClientSidePath); string datetimeFolderString = DateTimeDirUtils.GetDirDateTimeString(uploadDateTime); string serverSideFolderPath = folderRoot + mapping.FriendlyName + "/" + datetimeFolderString; client.CreateDirectory(serverSideFolderPath); foreach (string file in filePaths) { string uploadPath = serverSideFolderPath + file.Replace(@"\", "/"); await client.UploadFileAsync(mapping.ClientSidePath + file, uploadPath, FtpExists.Overwrite, true, FtpVerify.Retry); progressUpdateAction.Invoke(stepper.Step()); } }
public void Test101Items() { var stepper = new ProgressBarStepper(101); Assert.AreEqual(0, stepper.Value); Assert.AreEqual(0, stepper.Step()); Assert.AreEqual(1, stepper.Step()); for (int i = 0; i < 49; i++) { stepper.Step(); } Assert.AreEqual(50, stepper.Value); Assert.AreEqual(51, stepper.Step()); for (int i = 0; i < 49; i++) { stepper.Step(); } Assert.AreEqual(99, stepper.Value); Assert.AreEqual(100, stepper.Step()); }