You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
223 lines
7.5 KiB
223 lines
7.5 KiB
using System;
|
|
using System.Collections.Generic;
|
|
|
|
namespace NzbDrone.Core.Indexers.Definitions.Cardigann
|
|
{
|
|
// A Dictionary allowing the same key multiple times
|
|
public class KeyValuePairList : List<KeyValuePair<string, SelectorBlock>>, IDictionary<string, SelectorBlock>
|
|
{
|
|
public SelectorBlock this[string key]
|
|
{
|
|
get => throw new NotImplementedException();
|
|
|
|
set => Add(new KeyValuePair<string, SelectorBlock>(key, value));
|
|
}
|
|
|
|
public ICollection<string> Keys => throw new NotImplementedException();
|
|
|
|
public ICollection<SelectorBlock> Values => throw new NotImplementedException();
|
|
|
|
public void Add(string key, SelectorBlock value) => Add(new KeyValuePair<string, SelectorBlock>(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 CardigannDefinition
|
|
{
|
|
public CardigannDefinition()
|
|
{
|
|
Legacylinks = new List<string>();
|
|
}
|
|
|
|
public string Id { get; set; }
|
|
public List<SettingsField> 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<string> Links { get; set; }
|
|
public List<string> Legacylinks { get; set; }
|
|
public bool Followredirect { get; set; }
|
|
public bool TestLinkTorrent { get; set; } = true;
|
|
public List<string> 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; }
|
|
}
|
|
|
|
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<string, string> 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<string, string> Categories { get; set; }
|
|
public List<CategorymappingBlock> Categorymappings { get; set; }
|
|
public Dictionary<string, List<string>> Modes { get; set; }
|
|
public bool Allowrawsearch { get; set; }
|
|
}
|
|
|
|
public class CaptchaBlock
|
|
{
|
|
public string Type { get; set; }
|
|
public string Selector { get; set; }
|
|
public string Image { get => throw new Exception("Deprecated, please use Login.Captcha.Selector instead"); set => throw new Exception("Deprecated, please use login/captcha/selector instead of image"); }
|
|
public string Input { get; set; }
|
|
}
|
|
|
|
public class LoginBlock
|
|
{
|
|
public string Path { get; set; }
|
|
public string Submitpath { get; set; }
|
|
public List<string> Cookies { get; set; }
|
|
public string Method { get; set; }
|
|
public string Form { get; set; }
|
|
public bool Selectors { get; set; }
|
|
public Dictionary<string, string> Inputs { get; set; }
|
|
public Dictionary<string, SelectorBlock> Selectorinputs { get; set; }
|
|
public Dictionary<string, SelectorBlock> Getselectorinputs { get; set; }
|
|
public List<ErrorBlock> Error { get; set; }
|
|
public PageTestBlock Test { get; set; }
|
|
public CaptchaBlock Captcha { get; set; }
|
|
public Dictionary<string, List<string>> 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; }
|
|
public string Default { get; set; }
|
|
public string Text { get; set; }
|
|
public string Attribute { get; set; }
|
|
public string Remove { get; set; }
|
|
public List<FilterBlock> Filters { get; set; }
|
|
public Dictionary<string, string> 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 int FirstPageNumber { get; set; }
|
|
public string Path { get; set; }
|
|
public List<SearchPathBlock> Paths { get; set; }
|
|
public Dictionary<string, List<string>> Headers { get; set; }
|
|
public List<FilterBlock> Keywordsfilters { get; set; }
|
|
public bool AllowEmptyInputs { get; set; }
|
|
public Dictionary<string, string> Inputs { get; set; }
|
|
public List<ErrorBlock> Error { get; set; }
|
|
public List<FilterBlock> Preprocessingfilters { get; set; }
|
|
public RowsBlock Rows { get; set; }
|
|
public KeyValuePairList Fields { get; set; }
|
|
}
|
|
|
|
public class RowsBlock : SelectorBlock
|
|
{
|
|
public int After { get; set; }
|
|
public SelectorBlock Dateheaders { get; set; }
|
|
public SelectorBlock Count { get; set; }
|
|
public bool Multiple { get; set; }
|
|
public bool MissingAttributeEqualsNoResults { get; set; }
|
|
}
|
|
|
|
public class SearchPathBlock : RequestBlock
|
|
{
|
|
public List<string> Categories { get; set; }
|
|
public bool Inheritinputs { get; set; } = true;
|
|
public bool Followredirect { get; set; }
|
|
public ResponseBlock Response { get; set; }
|
|
}
|
|
|
|
public class RequestBlock
|
|
{
|
|
public string Path { get; set; }
|
|
public string Method { get; set; }
|
|
public Dictionary<string, string> Inputs { get; set; }
|
|
public string Queryseparator { get; set; } = "&";
|
|
}
|
|
|
|
public class DownloadBlock
|
|
{
|
|
public List<SelectorField> Selectors { get; set; }
|
|
public string Method { get; set; }
|
|
public BeforeBlock Before { get; set; }
|
|
public InfohashBlock Infohash { get; set; }
|
|
public Dictionary<string, List<string>> Headers { get; set; }
|
|
}
|
|
|
|
public class InfohashBlock
|
|
{
|
|
public SelectorField Hash { get; set; }
|
|
public SelectorField Title { get; set; }
|
|
public bool Usebeforeresponse { get; set; }
|
|
}
|
|
|
|
public class SelectorField
|
|
{
|
|
public string Selector { get; set; }
|
|
public string Attribute { get; set; }
|
|
public bool Usebeforeresponse { get; set; }
|
|
public List<FilterBlock> Filters { get; set; }
|
|
}
|
|
|
|
public class BeforeBlock : RequestBlock
|
|
{
|
|
public SelectorField Pathselector { get; set; }
|
|
}
|
|
|
|
public class ResponseBlock
|
|
{
|
|
public string Type { get; set; }
|
|
public string NoResultsMessage { get; set; }
|
|
}
|
|
}
|