Parse html tags out of status content before applying filters. (#2713)
Fixes #2660
This commit is contained in:
parent
91d18998ac
commit
9dd3a3d79b
2 changed files with 45 additions and 1 deletions
|
@ -3,6 +3,7 @@ package com.keylesspalace.tusky.network
|
||||||
import android.text.TextUtils
|
import android.text.TextUtils
|
||||||
import com.keylesspalace.tusky.entity.Filter
|
import com.keylesspalace.tusky.entity.Filter
|
||||||
import com.keylesspalace.tusky.entity.Status
|
import com.keylesspalace.tusky.entity.Status
|
||||||
|
import com.keylesspalace.tusky.util.parseAsMastodonHtml
|
||||||
import java.util.Date
|
import java.util.Date
|
||||||
import java.util.regex.Pattern
|
import java.util.regex.Pattern
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
@ -34,7 +35,7 @@ class FilterModel @Inject constructor() {
|
||||||
.mapNotNull { it.description }
|
.mapNotNull { it.description }
|
||||||
|
|
||||||
return (
|
return (
|
||||||
matcher.reset(status.actionableStatus.content).find() ||
|
matcher.reset(status.actionableStatus.content.parseAsMastodonHtml().toString()).find() ||
|
||||||
(spoilerText.isNotEmpty() && matcher.reset(spoilerText).find()) ||
|
(spoilerText.isNotEmpty() && matcher.reset(spoilerText).find()) ||
|
||||||
(
|
(
|
||||||
attachmentsDescriptions.isNotEmpty() &&
|
attachmentsDescriptions.isNotEmpty() &&
|
||||||
|
|
|
@ -53,6 +53,14 @@ class FilterTest {
|
||||||
irreversible = false,
|
irreversible = false,
|
||||||
wholeWord = true
|
wholeWord = true
|
||||||
),
|
),
|
||||||
|
Filter(
|
||||||
|
id = "123",
|
||||||
|
phrase = "#hashtag",
|
||||||
|
context = listOf(Filter.HOME),
|
||||||
|
expiresAt = null,
|
||||||
|
irreversible = false,
|
||||||
|
wholeWord = true
|
||||||
|
),
|
||||||
Filter(
|
Filter(
|
||||||
id = "123",
|
id = "123",
|
||||||
phrase = "expired",
|
phrase = "expired",
|
||||||
|
@ -69,6 +77,14 @@ class FilterTest {
|
||||||
irreversible = false,
|
irreversible = false,
|
||||||
wholeWord = true
|
wholeWord = true
|
||||||
),
|
),
|
||||||
|
Filter(
|
||||||
|
id = "123",
|
||||||
|
phrase = "href",
|
||||||
|
context = listOf(Filter.HOME),
|
||||||
|
expiresAt = null,
|
||||||
|
irreversible = false,
|
||||||
|
wholeWord = false
|
||||||
|
),
|
||||||
)
|
)
|
||||||
|
|
||||||
filterModel.initWithFilters(filters)
|
filterModel.initWithFilters(filters)
|
||||||
|
@ -166,6 +182,33 @@ class FilterTest {
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun shouldFilterHashtags() {
|
||||||
|
assertTrue(
|
||||||
|
filterModel.shouldFilterStatus(
|
||||||
|
mockStatus(content = "#hashtag one two three")
|
||||||
|
)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun shouldFilterHashtags_whenContentIsMarkedUp() {
|
||||||
|
assertTrue(
|
||||||
|
filterModel.shouldFilterStatus(
|
||||||
|
mockStatus(content = "<p><a href=\"https://foo.bar/tags/hashtag\" class=\"mention hashtag\" rel=\"nofollow noopener noreferrer\" target=\"_blank\">#<span>hashtag</span></a>one two three</p>")
|
||||||
|
)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun shouldNotFilterHtmlAttributes() {
|
||||||
|
assertFalse(
|
||||||
|
filterModel.shouldFilterStatus(
|
||||||
|
mockStatus(content = "<p><a href=\"https://foo.bar/\">https://foo.bar/</a> one two three</p>")
|
||||||
|
)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun shouldNotFilter_whenFilterIsExpired() {
|
fun shouldNotFilter_whenFilterIsExpired() {
|
||||||
assertFalse(
|
assertFalse(
|
||||||
|
|
Loading…
Reference in a new issue