mirror of
https://github.com/Jackett/Jackett.git
synced 2025-09-17 17:34:09 +02:00
Add support for Case selectors
This commit is contained in:
@@ -16,6 +16,7 @@ using static Jackett.Models.IndexerConfig.ConfigurationData;
|
|||||||
using AngleSharp.Parser.Html;
|
using AngleSharp.Parser.Html;
|
||||||
using System.Text.RegularExpressions;
|
using System.Text.RegularExpressions;
|
||||||
using System.Web;
|
using System.Web;
|
||||||
|
using AngleSharp.Dom;
|
||||||
|
|
||||||
namespace Jackett.Indexers
|
namespace Jackett.Indexers
|
||||||
{
|
{
|
||||||
@@ -438,37 +439,55 @@ namespace Jackett.Indexers
|
|||||||
return Data;
|
return Data;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected string handleSelector(selectorBlock Selector, AngleSharp.Dom.IElement Dom)
|
protected string handleSelector(selectorBlock Selector, IElement Dom)
|
||||||
{
|
{
|
||||||
if (Selector.Text != null)
|
if (Selector.Text != null)
|
||||||
{
|
{
|
||||||
return applyFilters(Selector.Text, Selector.Filters);
|
return applyFilters(Selector.Text, Selector.Filters);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
IElement selection = Dom;
|
||||||
string value = null;
|
string value = null;
|
||||||
|
|
||||||
if (Selector.Selector != null)
|
if (Selector.Selector != null)
|
||||||
{
|
{
|
||||||
AngleSharp.Dom.IElement selection = Dom.QuerySelector(Selector.Selector);
|
selection = Dom.QuerySelector(Selector.Selector);
|
||||||
if (selection == null)
|
if (selection == null)
|
||||||
{
|
{
|
||||||
throw new Exception(string.Format("Selector \"{0}\" didn't match {1}", Selector.Selector, Dom.OuterHtml));
|
throw new Exception(string.Format("Selector \"{0}\" didn't match {1}", Selector.Selector, Dom.OuterHtml));
|
||||||
}
|
}
|
||||||
if (Selector.Remove != null)
|
}
|
||||||
|
|
||||||
|
if (Selector.Remove != null)
|
||||||
|
{
|
||||||
|
foreach(var i in selection.QuerySelectorAll(Selector.Remove))
|
||||||
{
|
{
|
||||||
foreach(var i in selection.QuerySelectorAll(Selector.Remove))
|
i.Remove();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Selector.Case != null)
|
||||||
|
{
|
||||||
|
foreach(var Case in Selector.Case)
|
||||||
|
{
|
||||||
|
if (selection.Matches(Case.Key) || selection.QuerySelector(Case.Key) != null)
|
||||||
{
|
{
|
||||||
i.Remove();
|
value = Case.Value;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (Selector.Attribute != null)
|
if(value == null)
|
||||||
{
|
throw new Exception(string.Format("None of the case selectors \"{0}\" matched {1}", string.Join(",", Selector.Case), selection.OuterHtml));
|
||||||
value = selection.GetAttribute(Selector.Attribute);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
value = selection.TextContent;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
else if (Selector.Attribute != null)
|
||||||
|
{
|
||||||
|
value = selection.GetAttribute(Selector.Attribute);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
value = selection.TextContent;
|
||||||
|
}
|
||||||
|
|
||||||
return applyFilters(value, Selector.Filters); ;
|
return applyFilters(value, Selector.Filters); ;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user