diff --git a/src/NzbDrone.Core/Indexers/Definitions/SceneTime.cs b/src/NzbDrone.Core/Indexers/Definitions/SceneTime.cs index fba3a624a..6645bf1f5 100644 --- a/src/NzbDrone.Core/Indexers/Definitions/SceneTime.cs +++ b/src/NzbDrone.Core/Indexers/Definitions/SceneTime.cs @@ -41,7 +41,7 @@ public override IIndexerRequestGenerator GetRequestGenerator() public override IParseIndexerResponse GetParser() { - return new SceneTimeParser(Settings, Capabilities.Categories); + return new SceneTimeParser(Settings, Capabilities.Categories, _logger); } protected override bool CheckIfLoginNeeded(HttpResponse httpResponse) @@ -59,7 +59,7 @@ protected override IDictionary GetCookies() return CookieUtil.CookieHeaderToDictionary(Settings.Cookie); } - private IndexerCapabilities SetCapabilities() + private static IndexerCapabilities SetCapabilities() { var caps = new IndexerCapabilities { @@ -213,11 +213,13 @@ public class SceneTimeParser : IParseIndexerResponse { private readonly SceneTimeSettings _settings; private readonly IndexerCapabilitiesCategories _categories; + private readonly Logger _logger; - public SceneTimeParser(SceneTimeSettings settings, IndexerCapabilitiesCategories categories) + public SceneTimeParser(SceneTimeSettings settings, IndexerCapabilitiesCategories categories, Logger logger) { _settings = settings; _categories = categories; + _logger = logger; } public IList ParseResponse(IndexerResponse indexerResponse) @@ -227,20 +229,22 @@ public IList ParseResponse(IndexerResponse indexerResponse) var parser = new HtmlParser(); using var dom = parser.ParseDocument(indexerResponse.Content); - var table = dom.QuerySelector("table.movehere"); + var table = dom.QuerySelector("table#torrenttable"); if (table == null) { - return releaseInfos; // no results + _logger.Error("No results, table element is not present in page."); + return releaseInfos; } - var headerColumns = table.QuerySelectorAll("thead > tr > th.cat_Head") - .Select(x => x.GetAttribute("title").IsNotNullOrWhiteSpace() ? x.GetAttribute("title") : x.TextContent) + var headerColumns = table.QuerySelectorAll("thead > tr > th") + .Select(x => x.GetAttribute("title") ?? x.QuerySelector("a[title]")?.GetAttribute("title") ?? x.TextContent) .ToList(); + var categoryIndex = headerColumns.FindIndex(x => x.Equals("Type", StringComparison.OrdinalIgnoreCase)); var nameIndex = headerColumns.FindIndex(x => x.Equals("Name", StringComparison.OrdinalIgnoreCase)); var sizeIndex = headerColumns.FindIndex(x => x.Equals("Size", StringComparison.OrdinalIgnoreCase)); - var seedersIndex = headerColumns.FindIndex(x => x.Equals("Seeder(s)", StringComparison.OrdinalIgnoreCase)); - var leechersIndex = headerColumns.FindIndex(x => x.Equals("Leecher(s)", StringComparison.OrdinalIgnoreCase)); + var seedersIndex = headerColumns.FindIndex(x => x.Equals("Seeders", StringComparison.OrdinalIgnoreCase)); + var leechersIndex = headerColumns.FindIndex(x => x.Equals("Leechers", StringComparison.OrdinalIgnoreCase)); var rows = table.QuerySelectorAll("tbody > tr"); @@ -248,7 +252,7 @@ public IList ParseResponse(IndexerResponse indexerResponse) { var qDescCol = row.Children[nameIndex]; var qLink = qDescCol.QuerySelector("a"); - var title = qLink.QuerySelector("span.torrent-text").TextContent.Trim(); + var title = qLink.QuerySelector("span.bw-torrent-name").TextContent.Trim(); var infoUrl = _settings.BaseUrl + qLink.GetAttribute("href")?.TrimStart('/'); var torrentId = ParseUtil.GetArgumentFromQueryString(infoUrl, "id");