/// <summary> /// Will process the report generated by the Compare methods by adding, removing and updating files to the <paramref name="destStore"/> file store. /// </summary> /// <param name="report">The report, generated by one of the Compare methods, to process.</param> /// <param name="sourcePath">The source directory to process.</param> /// <param name="destStore">The file store to process.</param> /// <param name="feedback">Provides a means to gather feedback from the mirroring process.</param> public static void MirrorSourceToDestination( IEnumerable <ICompareResult> report, string sourcePath, IFileStore destStore, Action <ICompareResult, double> feedback) { // **** initialize var total = (from x in report where x.ItemType == CompareType.File && (x.Action == CompareAction.New || x.Action == CompareAction.Update || x.Action == CompareAction.Remove) select x).Count(); var count = 0; // **** save the original 'original filenames' var originalFilenames = ((IFileStoreAdvanced)destStore).GetOriginalFilenames(); // **** delete REMOVE files from MIRROR foreach (var item in from x in report where x.ItemType == CompareType.File && x.Action == CompareAction.Remove select x) { if (feedback != null) { feedback(item, (double)((double)count / (double)total)); ++count; } if (destStore.Contains(item.DestinationRootFilename)) { destStore.Delete(item.DestinationRootFilename); } } // **** add NEW and UPDATE files to SOURCE foreach (var item in from x in report where x.ItemType == CompareType.File && (x.Action == CompareAction.New || x.Action == CompareAction.Update) select x) { if (feedback != null) { feedback(item, (double)((double)count / (double)total)); ++count; } destStore.Add(item.SourceRootFilename, item.SourceFullPath, item.SourceLastModifiedTimeUtc, item.SourceFileSizeInBytes); } // **** save store (finalize mirror process) feedback?.Invoke(null, 1); destStore.Save(false); // **** clear/restore the 'original filenames' ((IFileStoreAdvanced)destStore).ClearOriginalFilenames(); ((IFileStoreAdvanced)destStore).SetOriginalFilenames(originalFilenames); }
public async Task <IActionResult> SourceFileLoad(SourceFileStub SourceFileStub) { if (ModelState.IsValid) { try { SourceFile model = new SourceFile(); FileStore fmodel = new FileStore(); model.SourceType = SourceFileStub.SourceType; using (var memoryStream = new MemoryStream()) { await SourceFileStub.File.CopyToAsync(memoryStream); fmodel.File = memoryStream.ToArray(); model.Length = SourceFileStub.File.Length; model.FileName = SourceFileStub.File.FileName; } _sourceFile.Add(model); _sourceFile.Save(); fmodel.id = model.id; _fileStore.Add(fmodel); _fileStore.Save(); TempData["Error"] = "This file is Added FileSores"; } catch (Exception ex) { TempData["Error"] = ex.Message.ToString(); } } return(RedirectToAction("SourceFileLoad")); }
/// <summary> /// Will process the report generated by the Compare methods by adding, removing and updating files to the <paramref name="destStore"/> file store. /// </summary> /// <param name="report">The report, generated by one of the Compare methods, to process.</param> /// <param name="sourceStore">The file store to process.</param> /// <param name="destStore">The file store to process.</param> /// <param name="feedback">Provides a means to gather feedback from the mirroring process.</param> public static void MirrorSourceToDestination( IEnumerable <ICompareResult> report, IFileStore sourceStore, IFileStore destStore, Action <ICompareResult, double> feedback) { // **** initialize var total = (from x in report where x.ItemType == CompareType.File && (x.Action == CompareAction.New || x.Action == CompareAction.Update || x.Action == CompareAction.Remove) select x).Count(); var count = 0; // create temporary extraction folder var tempPath = CreateTemporaryDirectory(); // temporarily change source extraction path var originalExtractionPath = sourceStore.ExtractionRootDirectory; sourceStore.ExtractionRootDirectory = tempPath; // save the original 'original filenames' var originalFilenames = ((IFileStoreAdvanced)destStore).GetOriginalFilenames(); // **** extract NEW and UPDATE files from SOURCE to temporary extraction folder var list = new List <IFileStoreItem>(); foreach (var item in from x in report where x.ItemType == CompareType.File && (x.Action == CompareAction.New || x.Action == CompareAction.Update) select x) { if (feedback != null) { feedback(item, (double)((double)count / (double)total)); ++count; } if (sourceStore.Contains(item.SourceRootFilename)) { list.Add(sourceStore.Get(item.SourceRootFilename)); } } sourceStore.Extract(list, true); // **** delete REMOVE files from MIRROR foreach (var item in from x in report where x.ItemType == CompareType.File && x.Action == CompareAction.Remove select x) { if (feedback != null) { feedback(item, (double)((double)count / (double)total)); ++count; } if (destStore.Contains(item.DestinationRootFilename)) { destStore.Delete(item.DestinationRootFilename); } } // **** add/update NEW and UPDATE files, from temporary extraction folder, into MIRROR foreach (var item in list) { destStore.Add(item.RootFilename, item.ExtractedFilename, item.RootFileLastModifiedTimeUtc, item.FileSize); } // **** save store (finalize mirror process) destStore.Save(false); // **** clear/restore the 'original filenames' ((IFileStoreAdvanced)destStore).ClearOriginalFilenames(); ((IFileStoreAdvanced)destStore).SetOriginalFilenames(originalFilenames); // **** restore original source extraction path sourceStore.ExtractionRootDirectory = originalExtractionPath; // **** delete temporary extraction folder DeleteDirectory(tempPath); }