Пример #1
0
        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);
            }
        }
Пример #2
0
 public Task <M> TryReadFreshAsync(ModelPaths modelPaths, Action <IDataItem> dataItemsCallback)
 {
     parserService.StartMonitorDataChanges(modelPaths);
     return(parserService.ParseAsync(modelPaths, dataItemsCallback));
 }