public async Task DownloadAsync(string comicUrl, string nameSelector, string chapterSelector, string imageSelector, string storeDirectory) { var host = comicUrl.GetAbsoluteHost(); var names = await parserService.ParseAsync(comicUrl, nameSelector, x => x.GetTitleOrContent()); var comicName = names.First().ToFriendlyUrl(500); Console.WriteLine($"Downloading commic {comicName} at {comicUrl}..."); var storePath = CreateDirectoryIfNotExist(storeDirectory, comicName); var chapters = await parserService.ParseAsync(comicUrl, chapterSelector, x => new Chapter { Url = x.GetAbsuluteUrl(host), Name = x.GetTitleOrContent(), Images = new List <string>() }, default); if (chapters.Count == 0) { Console.WriteLine("No chapters found."); return; } Console.WriteLine($"{chapters.Count} chapter(s) found. Starting download..."); var chapterName = string.Empty; var chapterPath = string.Empty; foreach (var chapter in chapters) { var images = await parserService.ParseAsync(chapter.Url, imageSelector, x => x.GetAttribute("src"), default); chapterName = chapter.Name.ToFriendlyUrl(500); chapterPath = CreateDirectoryIfNotExist(storePath, chapterName); Console.WriteLine($"Downloading chapter {chapter.Name}...{images.Count} image(s) found!"); var index = 0; foreach (var image in images) { if (IsIgnorable(image)) { continue; } // save image to {Comic}/{Chap-1}/{comic}-{chap}-{index}.png var filename = $"{comicName}-{chapterName}-{index++}.png"; await storageService.StoreAsync(image, filename, chapterPath); await Task.Delay(100); } await Task.Delay(500); } }
public Task <M> TryReadFreshAsync(ModelPaths modelPaths, Action <IDataItem> dataItemsCallback) { parserService.StartMonitorDataChanges(modelPaths); return(parserService.ParseAsync(modelPaths, dataItemsCallback)); }