using System; using System.Collections.Generic; namespace Jackett.Common.Models { // A Dictionary allowing the same key multiple times public class KeyValuePairList : List>, IDictionary { public selectorBlock this[string key] { get => throw new NotImplementedException(); set => Add(new KeyValuePair(key, value)); } public ICollection Keys => throw new NotImplementedException(); public ICollection Values => throw new NotImplementedException(); public void Add(string key, selectorBlock value) => Add(new KeyValuePair(key, value)); public bool ContainsKey(string key) => throw new NotImplementedException(); public bool Remove(string key) => throw new NotImplementedException(); public bool TryGetValue(string key, out selectorBlock value) => throw new NotImplementedException(); } // Cardigann yaml classes public class IndexerDefinition { public string Id { get; set; } public List Settings { get; set; } public string Name { get; set; } public string Description { get; set; } public string Type { get; set; } public string Language { get; set; } public string Encoding { get; set; } public double? RequestDelay { get; set; } public List Links { get; set; } public List Legacylinks { get; set; } public bool Followredirect { get; set; } = false; public bool Testlinktorrent { get; set; } = true; public List Certificates { get; set; } public capabilitiesBlock Caps { get; set; } 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 { public string Name { get; set; } public string Type { get; set; } public string Label { get; set; } public string Default { get; set; } public string[] Defaults { get; set; } public Dictionary Options { get; set; } } public class CategorymappingBlock { public string id { get; set; } public string cat { get; set; } public string desc { get; set; } public bool Default { get; set; } } public class capabilitiesBlock { public int? LimitsMax { get; set; } public int? LimitsDefault { get; set; } public Dictionary Categories { get; set; } public List Categorymappings { get; set; } public Dictionary> Modes { get; set; } public bool Allowrawsearch { get; internal set; } } public class captchaBlock { public string Type { get; set; } public string Selector { get; set; } public string Input { get; set; } } public class loginBlock { public string Path { get; set; } public string Submitpath { get; set; } public List Cookies { get; set; } public string Method { get; set; } public string Form { get; set; } public bool Selectors { get; set; } = false; public Dictionary Inputs { get; set; } public Dictionary Selectorinputs { get; set; } public Dictionary Getselectorinputs { get; set; } public List Error { get; set; } public pageTestBlock Test { get; set; } public captchaBlock Captcha { get; set; } public Dictionary> Headers { get; set; } } public class errorBlock { public string Path { get; set; } public string Selector { get; set; } public selectorBlock Message { get; set; } } public class selectorBlock { public string Selector { get; set; } public bool Optional { get; set; } = false; public string Default { get; set; } public string Text { get; set; } public string Attribute { get; set; } public string Remove { get; set; } public List Filters { get; set; } public Dictionary Case { get; set; } } public class filterBlock { public string Name { get; set; } public dynamic Args { get; set; } } public class pageTestBlock { public string Path { get; set; } public string Selector { get; set; } } public class ratioBlock : selectorBlock { public string Path { get; set; } } public class searchBlock { public int PageSize { get; set; } public string Pageable { get; set; } public string Path { get; set; } public List Paths { get; set; } public Dictionary> Headers { get; set; } public List Keywordsfilters { get; set; } public bool AllowEmptyInputs { get; set; } public Dictionary Inputs { get; set; } public List Error { get; set; } public List Preprocessingfilters { get; set; } public rowsBlock Rows { get; set; } public KeyValuePairList Fields { get; set; } } public class rowsBlock : selectorBlock { public int After { get; set; } //public string Remove { get; set; } // already inherited public selectorBlock Dateheaders { get; set; } public selectorBlock Count { get; set; } public bool Multiple { get; set; } = false; public bool MissingAttributeEqualsNoResults { get; set; } = false; } public class searchPathBlock : requestBlock { public List Categories { get; set; } = new List(); public bool Inheritinputs { get; set; } = true; public bool Followredirect { get; set; } = false; public responseBlock Response { get; set; } } public class requestBlock { public string Path { get; set; } public string Method { get; set; } public Dictionary Inputs { get; set; } public string Queryseparator { get; set; } = "&"; } public class beforeBlock : requestBlock { public selectorField Pathselector { get; set; } } public class infohashBlock { public selectorField Hash { get; set; } public selectorField Title { get; set; } public bool Usebeforeresponse { get; set; } = false; } public class downloadBlock { public List Selectors { get; set; } public string Method { get; set; } public beforeBlock Before { get; set; } public infohashBlock Infohash { get; set; } public Dictionary> Headers { get; set; } } public class selectorField { public string Selector { get; set; } public string Attribute { get; set; } public bool Usebeforeresponse { get; set; } = false; public List Filters { get; set; } } public class responseBlock { public string Type { get; set; } public string NoResultsMessage { get; set; } } }