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); }
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); }