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);
        }
Ejemplo n.º 4
0
        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());
            }
        }
Ejemplo n.º 5
0
        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());
            }
        }
Ejemplo n.º 8
0
        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());
        }