Example #1
0
        public override async Task UpdateContent(IManga manga)
        {
            var chapters = new List <ChapterDto>();

            try
            {
                var document = new HtmlDocument();
                var page     = await GetPageWithRedirect(manga.Uri).ConfigureAwait(false);

                var content = page.Item1.Content;
                var uri     = page.Item2;
                if (content.Contains(AdultOnly))
                {
                    throw new GetSiteInfoException(AdultOnly, manga);
                }
                if (content.Contains(NeedRegister))
                {
                    throw new GetSiteInfoException("Требуется регистрация.", manga);
                }
                document.LoadHtml(content);
                var headerNode = document.GetElementbyId("right");
                if (!headerNode.InnerText.Contains("Похожая манга"))
                {
                    var chapterNodes = headerNode.SelectNodes(".//option");
                    if (chapterNodes != null)
                    {
                        foreach (var node in chapterNodes)
                        {
                            var chapterUri = new Uri(uri, node.Attributes.Single(a => a.Name == "value").Value);
                            chapters.Add(new ChapterDto(chapterUri, WebUtility.HtmlDecode((node.NextSibling ?? node).InnerText))
                            {
                                Number = HentaichanChapter.GetChapterNumber(chapterUri)
                            });
                        }
                    }
                }
                else
                {
                    // Это манга из одной главы.
                    chapters.Add(new ChapterDto(uri, manga.ServerName)
                    {
                        Number = 0
                    });
                }
            }
            catch (NullReferenceException ex)
            {
                Log.Exception(ex, $"Возможно, требуется регистрация для доступа к {manga.Uri}");
            }
            catch (GetSiteInfoException ex)
            {
                Log.Exception(ex);
            }

            FillMangaChapters(manga, chapters);
        }
Example #2
0
        public override async Task UpdateContent(IManga manga)
        {
            var chapters = new List <ChapterDto>();

            try
            {
                var document = new HtmlDocument();
                var client   = await HentaichanPlugin.Instance.GetCookieClient(true).ConfigureAwait(false);

                var mainPage = await client.GetPage(manga.Uri).ConfigureAwait(false);

                var page = await GetPageWithRedirect(manga.Uri).ConfigureAwait(false);

                var content = page.Item1.Content;
                var uri     = page.Item2;
                if (content.Contains(AdultOnly))
                {
                    throw new GetSiteInfoException(AdultOnly, manga);
                }
                if (content.Contains(NeedRegister))
                {
                    throw new GetSiteInfoException("Требуется регистрация.", manga);
                }
                document.LoadHtml(content);
                var headerNode = document.GetElementbyId("right");

                var mainDocument = new HtmlDocument();
                mainDocument.LoadHtml(mainPage.Content);
                var navigationHeader = mainDocument.DocumentNode.SelectSingleNode("//div[@class=\"extaraNavi\"]");
                if (!navigationHeader.InnerText.Contains("Похожая манга"))
                {
                    var chapterNodes = headerNode.SelectNodes(".//option");
                    if (chapterNodes != null)
                    {
                        foreach (var node in chapterNodes)
                        {
                            var chapterUri = new Uri(uri, node.Attributes.Single(a => a.Name == "value").Value);
                            chapterUri = new Uri(chapterUri.GetLeftPart(UriPartial.Path));
                            chapters.Add(new ChapterDto(chapterUri, WebUtility.HtmlDecode(node.InnerText))
                            {
                                Number = HentaichanChapter.GetChapterNumber(chapterUri)
                            });
                        }
                    }
                    else
                    {
                        // Раз не нашли других глав - качаем хотя бы эту.
                        chapters.Add(new ChapterDto(uri, manga.ServerName)
                        {
                            Number = 0
                        });
                    }
                }
                else
                {
                    // Это манга из одной главы.
                    chapters.Add(new ChapterDto(uri, manga.ServerName)
                    {
                        Number = 0
                    });
                }
            }
            catch (NullReferenceException ex)
            {
                Log.Exception(ex, $"Возможно, требуется регистрация для доступа к {manga.Uri}");
            }
            catch (GetSiteInfoException ex)
            {
                Log.Exception(ex);
            }

            var doubles = chapters.GroupBy(c => c.Number).Where(g => g.Count() > 1).ToList();

            foreach (var groupByNumber in doubles)
            {
                var currentNumber = groupByNumber.Key.ToString(CultureInfo.InvariantCulture);
                if (!currentNumber.Contains('.'))
                {
                    currentNumber += '.';
                }
                for (int i = 1; i <= groupByNumber.Count(); i++)
                {
                    var chapter = groupByNumber.ElementAt(i - 1);
                    chapter.Number = double.Parse(currentNumber + i, NumberStyles.Float, CultureInfo.InvariantCulture);
                }
            }

            FillMangaChapters(manga, chapters);
        }