public async void RunExecute() { try { if (!ValidatePaths()) { return; } IFilesLoader filesLoader = new FilesLoader(); CDBuilder cdBuilder = new CDBuilder(); foreach (var(nameInIso, fullName) in filesLoader.GetFiles(SourcePath)) { cdBuilder.AddFile(nameInIso, fullName); } IsNotRunning = false; await cdBuilder.BuildAsync(DestinationPath, (current, max) => ProgressValue = current / (double)max * 100); ProgressValue = 100; IsNotRunning = true; MessageBox.Show("Operation complete"); } catch (Exception exception) { MessageBox.Show( $"Problem has occurred during processing. Details below:{Environment.NewLine}{exception.Message}"); IsNotRunning = true; ProgressValue = 0; } }
public async Task <ActionResult> ParseStart() { int start = 1; int end = 1; if (Request.Params["start"] != null) { start = Int32.Parse(Request.Params["start"]); } if (Request.Params["end"] != null) { end = Int32.Parse(Request.Params["end"]); } List <Product> newProductsList = new List <Product>(); ParserWorker <List <Product> > parser = new ParserWorker <List <Product> >( new SiteParser(), new SiteSettings(start, end) ); for (int i = parser.Settings.StartPoint; i <= parser.Settings.EndPoint; i++) { var source = await parser.Loader.GetSourceByPageId(i); var domParser = new HtmlParser(); var document = await domParser.ParseAsync(source); var result = parser.Parser.Parse(document); newProductsList.AddRange(result); } foreach (var product in newProductsList) { Product matches = db.Products.FirstOrDefault(p => p.Name == product.Name); if (matches == null) { string imgPath = parser.Settings.BaseUrl + product.ImgUrl; string fileName = System.IO.Path.GetFileName(imgPath); string newPath = Server.MapPath("~/Images/Catalog/") + System.IO.Path.GetFileName(fileName); await FilesLoader.DownloadFileAsync(imgPath, newPath); product.ImgName = fileName; db.Products.Add(product); } } await db.SaveChangesAsync(); return(RedirectToAction("Index")); }