private void InvokeGroupProgress() { if (GroupProgress != null) { GroupProgress.Invoke(); } }
private void MirrorGroup(FileGroup group) { using (_engine = new MirrorMaker(_progress)) { try { _engine.StartingDirectory += OnStartingDirectory; _engine.StartingFile += OnStartingFile; _engine.ItemHandlingError += OnItemHandlingError; string destinationSubFolder = group.GetDestinationSubFolder(DestinationRootForThisUser); _progress.WriteVerbose("[{0}] Source={1}", group.Name, group.RootFolder); _progress.WriteVerbose("[{0}] Destination={1}", group.Name, destinationSubFolder); //_engine.PreviewMode = false; _engine.Run(group.RootFolder, destinationSubFolder); if (_engine.WasCancelled) { _currentGroup.Disposition = FileGroup.DispositionChoice.Cancelled; } else { group.Disposition = FileGroup.DispositionChoice.WasBackedUp; } } catch (IOException error) { _gotIOExceptionProbablyDiskFull = true; //enhance: we could clarify that it was partially backed up _currentGroup.Disposition = FileGroup.DispositionChoice.NotEnoughRoom; _progress.WriteWarning(error.Message); } if (GroupProgress != null) { GroupProgress.Invoke(); } } }
public void DoSynchronization() { _cancelRequested = false; var options = FileSyncOptions.RecycleDeletedFiles; foreach (var group in _groups) { if (_cancelRequested) { break; } _currentSource = group; //used by callbacks if (group.Disposition == FileSource.DispositionChoice.WillBeSkipped) { continue; } group.ClearStatistics(); group.Disposition = FileSource.DispositionChoice.Synchronizing; InvokeGroupProgress(); using (var sourceProvider = new FileSyncProvider(group.SourceGuid, group.RootFolder, group.Filter, options)) using (var destinationProvider = new FileSyncProvider(group.DestGuid, group.GetDestinationSubFolder(DestinationRootForThisUser), group.Filter, options)) { destinationProvider.PreviewMode = false; destinationProvider.ApplyingChange += (OnDestinationChange); PreviewOrSynchronizeCore(destinationProvider, sourceProvider); } group.Disposition = FileSource.DispositionChoice.WasBackedUp; if (GroupProgress != null) { GroupProgress.Invoke(); } } InvokeGroupProgress(); }
public void DoSynchronization() { _cancelRequested = false; //nb: a value of FileSyncOptions.RecycleDeletedFiles is implicated in a ton of //ConflictLoserWriteError + "PathTooLong" errors I was getting on a flash drive // (even though it wasn't full) //until I reformated it. Since small Flash drives don't have a recycle bin, I don't //know what the semantics are for this anyhow //var options = FileSyncOptions.RecycleDeletedFiles; var options = FileSyncOptions.None; _alreadyAccountedFor = new HashSet <string>(); try { foreach (var group in _groups) { if (_cancelRequested) { break; } _currentGroup = group; //used by callbacks if (group.Disposition == FileGroup.DispositionChoice.Hide) { _progress.WriteMessage("Skipping group {0}", group.Name); continue; } if (_gotIOExceptionProbablyDiskFull) { group.Disposition = FileGroup.DispositionChoice.NotEnoughRoom; continue; } _progress.WriteMessage("Beginning group {0}", group.Name); if (group.Disposition == FileGroup.DispositionChoice.NotEnoughRoom) { continue; } group.ClearStatistics(); group.Disposition = FileGroup.DispositionChoice.Synchronizing; InvokeGroupProgress(); string tempDirectory = Path.GetDirectoryName(group.SourceTempMetaFile); try { using (var sourceProvider = new FileSyncProvider(group.SourceGuid, group.RootFolder, group.Filter, options, tempDirectory, Path.GetFileName(group.SourceTempMetaFile), tempDirectory, tempDirectory)) { string destinationSubFolder = group.GetDestinationSubFolder(DestinationRootForThisUser); using ( var destinationProvider = new FileSyncProvider(group.DestGuid, destinationSubFolder, group.Filter, options, tempDirectory, Path.GetFileName(group.SourceTempMetaFile), tempDirectory, tempDirectory)) { _progress.WriteVerbose("[{0}] Source={1}", group.Name, group.RootFolder); _progress.WriteVerbose("[{0}] Destination={1}", group.Name, destinationSubFolder); destinationProvider.PreviewMode = false; destinationProvider.SkippedChange += OnDestinationSkippedChange; destinationProvider.ApplyingChange += OnDestinationApplyingChange; PreviewOrSynchronizeCore(destinationProvider, sourceProvider); } } group.Disposition = FileGroup.DispositionChoice.WasBackedUp; } catch (IOException error) { _gotIOExceptionProbablyDiskFull = true; //enhance: we could clarify that it was partially backed up _currentGroup.Disposition = FileGroup.DispositionChoice.NotEnoughRoom; _progress.WriteWarning(error.Message); } if (GroupProgress != null) { GroupProgress.Invoke(); } } InvokeGroupProgress(); } catch (Exception error) { Palaso.Reporting.ErrorReport.NotifyUserOfProblem(error, "Sorry, something didn't work."); } finally { CleanupTempFiles(); } }