diff --git a/src/Jackett/Indexers/CardigannIndexer.cs b/src/Jackett/Indexers/CardigannIndexer.cs index cddc5cabc..3349997ab 100644 --- a/src/Jackett/Indexers/CardigannIndexer.cs +++ b/src/Jackett/Indexers/CardigannIndexer.cs @@ -50,6 +50,7 @@ namespace Jackett.Indexers public loginBlock Login { get; set; } public ratioBlock Ratio { get; set; } public searchBlock Search { get; set; } + public downloadBlock Download { get; set; } // IndexerDefinitionStats not needed/implemented } public class settingsField @@ -124,6 +125,11 @@ namespace Jackett.Indexers public selectorBlock Dateheaders { get; set; } } + public class downloadBlock + { + public string Selector { get; set; } + } + protected readonly string[] OptionalFileds = new string[] { "imdb" }; public CardigannIndexer(IIndexerManagerService i, IWebClient wc, Logger l, IProtectionService ps) @@ -986,6 +992,34 @@ namespace Jackett.Indexers return releases; } + + public override async Task Download(Uri link) + { + if(Definition.Download != null) + { + var Download = Definition.Download; + if (Download.Selector != null) + { + var response = await RequestStringWithCookies(link.ToString()); + var results = response.Content; + var SearchResultParser = new HtmlParser(); + var SearchResultDocument = SearchResultParser.Parse(results); + var DlUri = SearchResultDocument.QuerySelector(Download.Selector); + if (DlUri != null) + { + logger.Debug(string.Format("CardigannIndexer ({0}): Download selector {1} matched:{2}", ID, Download.Selector, DlUri.OuterHtml)); + var href = DlUri.GetAttribute("href"); + link = resolvePath(href); + } + else + { + logger.Error(string.Format("CardigannIndexer ({0}): Download selector {1} didn't match:\n{2}", ID, Download.Selector, results)); + throw new Exception(string.Format("Download selector {0} didn't match", Download.Selector)); + } + } + } + return await base.Download(link); + } } }