From ab207ac75be4c1761adad0ab7ffe678c8ab3b7d2 Mon Sep 17 00:00:00 2001 From: Dmitry Chepurovskiy Date: Thu, 9 Jun 2022 19:07:09 +0300 Subject: [PATCH] Lostfilm parse /new page in IndexerRequestsGenerarator to parse in IndexerParser only releases pages --- .../Indexers/Definitions/Lostfilm.cs | 69 ++++++++----------- 1 file changed, 27 insertions(+), 42 deletions(-) diff --git a/src/NzbDrone.Core/Indexers/Definitions/Lostfilm.cs b/src/NzbDrone.Core/Indexers/Definitions/Lostfilm.cs index 79c233341..4d9137914 100644 --- a/src/NzbDrone.Core/Indexers/Definitions/Lostfilm.cs +++ b/src/NzbDrone.Core/Indexers/Definitions/Lostfilm.cs @@ -182,8 +182,29 @@ public LostfilmRequestGenerator() { } - private IList GetSearchPageURLs(string term, int? season, string episode) + private IList GetNewReleaseURLs() { + Logger.Debug("GetNewReleaseURLs"); + var urls = new List(); + + var req = new IndexerRequest(Settings.BaseUrl + "new", HttpAccept.Html); + var response = new IndexerResponse(req, HttpClient.ExecuteProxied(req.HttpRequest, Definition)); + + var parser = new HtmlParser(); + var dom = parser.ParseDocument(response.Content); + var rows = dom.QuerySelectorAll("div.row"); + foreach (var r in rows) + { + var path = r.QuerySelector("a").GetAttribute("href"); + urls.Add(Settings.BaseUrl + path.TrimStart('/')); + } + + return urls; + } + + private IList GetSearchReleaseURLs(string term, int? season, string episode) + { + Logger.Debug("GetSearchReleaseURLs"); var urls = new List(); /* Torznab query for some series could contains sanitized title. E.g. "Star Wars: The Clone Wars" will become "Star Wars The Clone Wars". @@ -247,8 +268,8 @@ private IList GetSearchPageURLs(string term, int? season, string episode requestBuilder.PostProcess += r => r.RequestTimeout = TimeSpan.FromSeconds(15); requestBuilder.SetCookies(Indexer.GetCookiesPublic()); - var req = new IndexerRequest(requestBuilder.Build()); - var response = new IndexerResponse(req, HttpClient.ExecuteProxied(req.HttpRequest, Definition)); + var request = new IndexerRequest(requestBuilder.Build()); + var response = new IndexerResponse(request, HttpClient.ExecuteProxied(request.HttpRequest, Definition)); if (response.Content == null) { @@ -322,13 +343,14 @@ private IEnumerable GetPagedRequests(string term, int[] categori if (string.IsNullOrWhiteSpace(term)) { - requestUrls.Add(Settings.BaseUrl + "new"); + requestUrls.AddRange(GetNewReleaseURLs()); } else { - requestUrls.AddRange(GetSearchPageURLs(term, season, episode)); + requestUrls.AddRange(GetSearchReleaseURLs(term, season, episode)); } + Logger.Debug("GetPagedRequests: " + requestUrls.Count.ToString()); foreach (var url in requestUrls) { yield return new IndexerRequest(url, HttpAccept.Html); @@ -607,38 +629,6 @@ private IList ParseRelease(IndexerResponse indexerResponse) } private IList ParseNewResponse(IndexerResponse indexerResponse) - { - var releases = new List(); - - var parser = new HtmlParser(); - var dom = parser.ParseDocument(indexerResponse.Content); - var rows = dom.QuerySelectorAll("div.row"); - foreach (var r in rows) - { - var link = r.QuerySelector("a").GetAttribute("href"); - var releaseRequest = new IndexerRequest(_settings.BaseUrl + link.TrimStart('/'), HttpAccept.Html); - var releaseResponse = new IndexerResponse(releaseRequest, HttpClient.ExecuteProxied(releaseRequest.HttpRequest, Definition)); - - // Throw common http errors here before we try to parse - if (releaseResponse.HttpResponse.HasHttpError) - { - if ((int)releaseResponse.HttpResponse.StatusCode == 429) - { - throw new TooManyRequestsException(releaseRequest.HttpRequest, releaseResponse.HttpResponse); - } - else - { - throw new IndexerException(releaseResponse, "Http error code: " + releaseResponse.HttpResponse.StatusCode); - } - } - - releases.AddRange(ParseRelease(releaseResponse)); - } - - return releases.ToArray(); - } - - private IList ParseSearchResponse(IndexerResponse indexerResponse) { var releases = new List(); return releases.ToArray(); @@ -646,11 +636,6 @@ private IList ParseSearchResponse(IndexerResponse indexerResponse) public IList ParseResponse(IndexerResponse indexerResponse) { - if (indexerResponse.Request.Url.Path == "/new") - { - return ParseNewResponse(indexerResponse); - } - if (indexerResponse.Request.Url.Path.Contains("/episode_")) { return ParseNewResponse(indexerResponse);