/// <summary> /// Adds the specified sync task. /// </summary> /// <param name="syncTask">The sync task.</param> /// <param name="syncItem">The sync item.</param> internal void Add(SyncTask syncTask, SyncItemBase syncItem) { if (syncTask == null) { throw new ArgumentNullException("syncTask"); } if (syncItem == null) { throw new ArgumentNullException("syncItem"); } SyncTaskPreview syncTaskPreview; if (this.SyncTaskPreviewBySyncTask.TryGetValue(syncTask, out syncTaskPreview)) { syncTaskPreview.Add(syncItem); } else { syncTaskPreview = new SyncTaskPreview(); syncTaskPreview.Add(syncItem); this.SyncTaskPreviewBySyncTask[syncTask] = syncTaskPreview; } }
/// <summary> /// Gets the <see cref="SyncTaskPreview"/> by the given <see cref="SyncTask"/>. /// </summary> /// <param name="syncTask">The <see cref="SyncTaskPreview"/></param> public SyncTaskPreview this[SyncTask syncTask] { get { return(this.SyncTaskPreviewBySyncTask[syncTask]); } }
/// <summary> /// Executed when a directory was found on target directory. /// </summary> /// <param name="directory">The found directory.</param> /// <param name="syncTask">The sync task.</param> /// <param name="syncPreview">The sync preview.</param> private static void DirectoryFoundOnTargetDirectory(string directory, SyncTask syncTask, SyncPreview syncPreview) { string relativePath = directory.Substring(syncTask.TargetDirectory.Length); string targetDirectory = Path.Combine(syncTask.ReferenceDirectory, relativePath); SyncItemBase syncItem = syncTask.SyncMode.DirectoryFoundOnTargetDirectory(targetDirectory, directory); if (syncItem != null) { syncPreview.Add(syncTask, syncItem); } }
/// <summary> /// Executed when a file was found on reference directory. /// </summary> /// <param name="file">The found file.</param> /// <param name="syncTask">The sync task.</param> /// <param name="syncPreview">The sync preview.</param> private static void FileFoundOnReferenceDirectory(string file, SyncTask syncTask, SyncPreview syncPreview) { string relativePath = file.Substring(syncTask.ReferenceDirectory.Length); string targetFile = Path.Combine(syncTask.TargetDirectory, relativePath); SyncItemBase syncItem = syncTask.SyncMode.FileFoundOnReferenceDirectory(file, targetFile); if (syncItem != null) { syncPreview.Add(syncTask, syncItem); } }
/// <summary> /// Performs synchronization of the given sync preview. /// </summary> /// <param name="syncPreview">The sync preview.</param> /// <returns>The sync report.</returns> public SyncReport Synchronize(SyncPreview syncPreview) { if (syncPreview == null) { throw new ArgumentNullException("syncPreview"); } this.canceled = false; SyncReport syncReport = new SyncReport(); syncReport.TotalCopyFiles = syncPreview.CountOfActiveCopyFiles; syncReport.TotalDeleteFiles = syncPreview.CountOfActiveDeleteFiles; syncReport.TotalCreateDirectories = syncPreview.CountOfActiveCreateDirectories; syncReport.TotalDeleteDirectories = syncPreview.CountOfActiveDeleteDirectories; foreach (var task in syncPreview.SyncTaskPreviewBySyncTask) { if (this.canceled) { break; } SyncTask syncTask = task.Key; SyncTaskPreview syncTaskPreview = task.Value; syncTask.Status = Resources.SyncStatusDeletingFiles; this.syncLogger.Log(syncTask.ToString()); foreach (var syncItem in syncTaskPreview.DeleteFileSyncItems) { if (this.canceled) { break; } if (!syncItem.IsActive) { continue; } this.OnSynchronizing(syncItem.TargetPath); if (syncItem.Synchronize() == SyncResult.Error) { syncReport.AddFailedSyncItem(syncItem); } else { syncReport.SuccessDeleteFiles++; } this.syncLogger.Log(syncItem.ToString()); } syncTask.Status = Resources.SyncStatusDeletingDirectories; foreach (var syncItem in syncTaskPreview.DeleteDirectorySyncItems) { if (this.canceled) { break; } if (!syncItem.IsActive) { continue; } this.OnSynchronizing(syncItem.TargetPath); if (syncItem.Synchronize() == SyncResult.Error) { syncReport.AddFailedSyncItem(syncItem); } else { syncReport.SuccessDeleteDirectories++; } this.syncLogger.Log(syncItem.ToString()); } syncTask.Status = Resources.SyncStatusCreatingDirectories; foreach (var syncItem in syncTaskPreview.CreateDirectorySyncItems) { if (this.canceled) { break; } if (!syncItem.IsActive) { continue; } this.OnSynchronizing(syncItem.TargetPath); if (syncItem.Synchronize() == SyncResult.Error) { syncReport.AddFailedSyncItem(syncItem); } else { syncReport.SuccessCreateDirectories++; } this.syncLogger.Log(syncItem.ToString()); } syncTask.Status = Resources.SyncStatusCopyingFiles; foreach (var syncItem in syncTaskPreview.CopyFileSyncItems) { if (this.canceled) { break; } if (!syncItem.IsActive) { continue; } this.OnSynchronizing(syncItem.TargetPath); if (syncItem.Synchronize() == SyncResult.Error) { syncReport.AddFailedSyncItem(syncItem); } else { syncReport.SuccessCopyFiles++; } this.syncLogger.Log(syncItem.ToString()); } syncTask.Status = null; if (!this.canceled) { syncTask.LastSyncDate = DateTime.Now; } } syncReport.LogFilePath = this.syncLogger.WriteToFile(); return(syncReport); }