mirror of
https://github.com/M66B/FairEmail.git
synced 2025-02-22 22:21:18 +00:00
Allow jsoup text expressions
This commit is contained in:
parent
e65d7b9c75
commit
8c00260019
2 changed files with 21 additions and 5 deletions
9
FAQ.md
9
FAQ.md
|
@ -2571,9 +2571,16 @@ Note that email addresses are formatted like this:
|
|||
"Somebody" <somebody@example.org>
|
||||
``
|
||||
|
||||
Note that message texts are normalized, which means that all whitespaces (spaces, tabs, line breaks, etc) are replaced by a single space.
|
||||
Note that message texts are normalized when not using a regex, which means that all whitespaces (spaces, tabs, line breaks, etc) are replaced by a single space.
|
||||
This makes it easier to match texts on multiple lines or when the line break is at different places.
|
||||
|
||||
Since version 1.1996 it is possible to use [Jsoup selectors](https://jsoup.org/cookbook/extracting-data/selector-syntax) to match HTML elements,
|
||||
by prefixing the selector by *jsoup:* and entering it as text contains condition, like for example:
|
||||
|
||||
```
|
||||
html > body > div > a[href=https://example.org]
|
||||
```
|
||||
|
||||
You can use multiple rules, possibly with a *stop processing*, for an *or* or a *not* condition.
|
||||
|
||||
Matching is not case sensitive, unless you use [regular expressions](https://en.wikipedia.org/wiki/Regular_expression).
|
||||
|
|
|
@ -126,6 +126,7 @@ public class EntityRule {
|
|||
static final String EXTRA_SUBJECT = "subject";
|
||||
static final String EXTRA_RECEIVED = "received";
|
||||
|
||||
private static final String JSOUP_PREFIX = "jsoup:";
|
||||
private static final long SEND_DELAY = 5000L; // milliseconds
|
||||
|
||||
private static final ExecutorService executor = Helper.getBackgroundExecutor(1, "rule");
|
||||
|
@ -365,7 +366,9 @@ public class EntityRule {
|
|||
boolean regex = jbody.getBoolean("regex");
|
||||
boolean skip_quotes = jbody.optBoolean("skip_quotes");
|
||||
|
||||
if (!regex)
|
||||
boolean jsoup = value.startsWith(JSOUP_PREFIX);
|
||||
|
||||
if (!regex && !jsoup)
|
||||
value = value.replaceAll("\\s+", " ");
|
||||
|
||||
if (html == null && message.content) {
|
||||
|
@ -386,9 +389,15 @@ public class EntityRule {
|
|||
Document d = JsoupEx.parse(html);
|
||||
if (skip_quotes)
|
||||
d.select("blockquote").remove();
|
||||
String text = d.body().text();
|
||||
if (!matches(context, message, value, text, regex))
|
||||
return false;
|
||||
if (jsoup) {
|
||||
String selector = value.substring(JSOUP_PREFIX.length());
|
||||
if (d.select(selector).size() == 0)
|
||||
return false;
|
||||
} else {
|
||||
String text = d.body().text();
|
||||
if (!matches(context, message, value, text, regex))
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
// Date
|
||||
|
|
Loading…
Reference in a new issue