private void DoOperation(StorageServicesAdapter storageServiceAdapter, SynchronizedFile file) { try { var operation = file.Operation; if (operation == SynchronizationOperation.Delete) { storageServiceAdapter.Delete(file.ObjectOnDevice); file.IsOnDevice = false; file.SizeOnDevice = 0; file.ObjectOnDevice = null; } if (operation == SynchronizationOperation.Copy) { StorageServicesAdapter.PushProgressReport pushProgressReport = (int totalBytesRead) => { _userInterface.ReportInformation(string.Format("\tCopy: {0} out of {1} = {2}%", FormatFileSize(totalBytesRead), FormatFileSize(file.SizeOnComputer), 100 * totalBytesRead / file.SizeOnComputer )); }; file.ObjectOnDevice = (PortableDeviceFileObject)storageServiceAdapter.Push(file.Parent.ObjectOnDevice, file.ObjectOnComputer.OpenRead(), file.Name, (ulong)file.SizeOnComputer, pushProgressReport); file.IsOnDevice = true; file.SizeOnDevice = file.SizeOnComputer; } } catch (Exception e) { _userInterface.ReportError(string.Format("Exception: {0}", e.Message)); } }
private void SynchronizeDirectory(SynchronizedDirectory parentDirectory, StorageServicesAdapter storageServiceAdapter) { var operation = parentDirectory.Operation; if (operation == SynchronizationOperation.Copy) { _userInterface.ReportInformation(string.Format("Create directory {0}", parentDirectory.Path)); DoOperation(storageServiceAdapter, parentDirectory); } foreach (var file in parentDirectory.Files.Where(file => file.Operation == SynchronizationOperation.Delete)) { _userInterface.ReportInformation(string.Format("Delete file {0}", file.Path)); DoOperation(storageServiceAdapter, file); } foreach (var directory in parentDirectory.Directories) { SynchronizeDirectory(directory, storageServiceAdapter); } foreach (var file in parentDirectory.Files.Where(file => file.Operation == SynchronizationOperation.Copy)) { _userInterface.ReportInformation(string.Format("Copy file {0}", file.Path)); DoOperation(storageServiceAdapter, file); } if (operation == SynchronizationOperation.Delete) { _userInterface.ReportInformation(string.Format("Delete directory {0}", parentDirectory.Path)); DoOperation(storageServiceAdapter, parentDirectory); } }
private void DoOperation(StorageServicesAdapter storageServiceAdapter, SynchronizedDirectory directory) { try { var operation = directory.Operation; if (operation == SynchronizationOperation.Delete) { storageServiceAdapter.Delete(directory.ObjectOnDevice); directory.IsOnDevice = false; directory.ObjectOnDevice = null; } if (operation == SynchronizationOperation.Copy) { directory.ObjectOnDevice = (PortableDeviceContainerObject)storageServiceAdapter.Mkdir(directory.Parent.ObjectOnDevice, directory.Name); directory.IsOnDevice = true; } } catch (Exception e) { _userInterface.ReportError(string.Format("Exception: {0}", e.Message)); } }
private void Synchronize(PortableDevice device) { var storageServiceAdapter = new StorageServicesAdapter(device); SynchronizeDirectory(Root, storageServiceAdapter); }