diff --git a/src/NzbDrone.Core/Indexers/Definitions/Lostfilm.cs b/src/NzbDrone.Core/Indexers/Definitions/Lostfilm.cs index 4d9137914..a59c0c63f 100644 --- a/src/NzbDrone.Core/Indexers/Definitions/Lostfilm.cs +++ b/src/NzbDrone.Core/Indexers/Definitions/Lostfilm.cs @@ -588,8 +588,9 @@ private IList FetchTrackerReleases(TrackerUrlDetails details) return FollowTrackerRedirection(redirectionUrl, details); } - private IList ParseRelease(IndexerResponse indexerResponse) + private IList ParseEpisodeResponse(IndexerResponse indexerResponse) { + Logger.Debug("ParsingEpisodeResponse: " + indexerResponse.Request.Url.ToString()); var releases = new List(); var parser = new HtmlParser(); var dom = parser.ParseDocument(indexerResponse.Content); @@ -625,12 +626,37 @@ private IList ParseRelease(IndexerResponse indexerResponse) releases.AddRange(episodeReleases); } - return releases; + return releases.ToArray(); } - private IList ParseNewResponse(IndexerResponse indexerResponse) + private IList ParseSeasonResponse(IndexerResponse indexerResponse) { - var releases = new List(); + Logger.Debug("ParsingSeasonResponse: " + indexerResponse.Request.Url.ToString()); + var releases = new List(); + var parser = new HtmlParser(); + var document = parser.ParseDocument(indexerResponse.Content); + var seasons = document.QuerySelectorAll("div.serie-block"); + var rowSelector = "table.movie-parts-list > tbody > tr"; + + foreach (var season in seasons) + { + // Could ne null if serie-block is for Extras + var seasonButton = season.QuerySelector("div.movie-details-block > div.external-btn"); + + var lastEpisode = season.QuerySelector(rowSelector); + var dateColumn = lastEpisode.QuerySelector("td.delta"); + var date = DateFromEpisodeColumn(dateColumn); + + var urlDetails = new TrackerUrlDetails(seasonButton); + var seasonReleases = FetchTrackerReleases(urlDetails); + + foreach (var release in seasonReleases) + { + release.InfoUrl = indexerResponse.Request.Url.ToString(); + release.PublishDate = date; + } + } + return releases.ToArray(); } @@ -638,15 +664,10 @@ public IList ParseResponse(IndexerResponse indexerResponse) { if (indexerResponse.Request.Url.Path.Contains("/episode_")) { - return ParseNewResponse(indexerResponse); + return ParseEpisodeResponse(indexerResponse); } - if (indexerResponse.Request.Url.Path == "/new") - { - return ParseNewResponse(indexerResponse); - } - - return new List().ToArray(); + return ParseSeasonResponse(indexerResponse); } public Action, DateTime?> CookiesUpdater { get; set; } @@ -665,14 +686,14 @@ private string TrimString(string s, string startString, string endString) return (start != -1 && end != -1) ? s.Substring(start + startString.Length, end - start - startString.Length) : null; } - // private DateTime DateFromEpisodeColumn(AngleSharp.Dom.IElement dateColumn) - // { - // var dateString = dateColumn.QuerySelector("span.small-text")?.TextContent; + private DateTime DateFromEpisodeColumn(AngleSharp.Dom.IElement dateColumn) + { + var dateString = dateColumn.QuerySelector("span.small-text")?.TextContent; - // // 'Eng: 23.05.2017' -> '23.05.2017' OR '23.05.2017' -> '23.05.2017' - // dateString = string.IsNullOrEmpty(dateString) ? dateColumn.QuerySelector("span")?.TextContent : dateString.Substring(dateString.IndexOf(":") + 2); - // var date = DateTime.Parse(dateString, new CultureInfo("RU-ru")); // dd.mm.yyyy - // return date; - // } + // 'Eng: 23.05.2017' -> '23.05.2017' OR '23.05.2017' -> '23.05.2017' + dateString = string.IsNullOrEmpty(dateString) ? dateColumn.QuerySelector("span")?.TextContent : dateString.Substring(dateString.IndexOf(":") + 2); + var date = DateTime.Parse(dateString, new CultureInfo("RU-ru")); // dd.mm.yyyy + return date; + } } }