private void IngestCore(CleanupIngestResult result, string src, string target) { _cancellationToken.ThrowIfCancellationRequested(); foreach (var dir in Directory.EnumerateDirectories(target, "*", SearchOption.TopDirectoryOnly)) { _cancellationToken.ThrowIfCancellationRequested(); var srcPath = Path.Combine(src, new DirectoryInfo(dir).Name); if (!Directory.Exists(srcPath)) { _cleanupQueue.Enqueue(new CleanupInfo(result.SyncConfig) { FullPath = dir, IsFile = false }); } IngestCore(result, srcPath, dir); } foreach (var file in Directory.EnumerateFiles(target, "*", SearchOption.TopDirectoryOnly)) { _cancellationToken.ThrowIfCancellationRequested(); var srcPath = Path.Combine(src, Path.GetFileName(file)); if (!File.Exists(srcPath)) { _cleanupQueue.Enqueue(new CleanupInfo(result.SyncConfig) { FullPath = file, IsFile = true }); } } }
public async Task <CleanupIngestResult> IngestAsync(SyncConfig syncConfig) { var result = new CleanupIngestResult(syncConfig); await Task.Run(() => { IngestCore(result, syncConfig.Source, syncConfig.Target); }, _cancellationToken); return(result); }