Browse Source

Parse html tags out of status content before applying filters. (#2713)

Fixes #2660
pull/2715/head
Levi Bard 3 years ago committed by GitHub
parent
commit
9dd3a3d79b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 3
      app/src/main/java/com/keylesspalace/tusky/network/FilterModel.kt
  2. 43
      app/src/test/java/com/keylesspalace/tusky/FilterTest.kt

3
app/src/main/java/com/keylesspalace/tusky/network/FilterModel.kt

@ -3,6 +3,7 @@ package com.keylesspalace.tusky.network
import android.text.TextUtils
import com.keylesspalace.tusky.entity.Filter
import com.keylesspalace.tusky.entity.Status
import com.keylesspalace.tusky.util.parseAsMastodonHtml
import java.util.Date
import java.util.regex.Pattern
import javax.inject.Inject
@ -34,7 +35,7 @@ class FilterModel @Inject constructor() {
.mapNotNull { it.description }
return (
matcher.reset(status.actionableStatus.content).find() ||
matcher.reset(status.actionableStatus.content.parseAsMastodonHtml().toString()).find() ||
(spoilerText.isNotEmpty() && matcher.reset(spoilerText).find()) ||
(
attachmentsDescriptions.isNotEmpty() &&

43
app/src/test/java/com/keylesspalace/tusky/FilterTest.kt

@ -53,6 +53,14 @@ class FilterTest {
irreversible = false,
wholeWord = true
),
Filter(
id = "123",
phrase = "#hashtag",
context = listOf(Filter.HOME),
expiresAt = null,
irreversible = false,
wholeWord = true
),
Filter(
id = "123",
phrase = "expired",
@ -69,6 +77,14 @@ class FilterTest {
irreversible = false,
wholeWord = true
),
Filter(
id = "123",
phrase = "href",
context = listOf(Filter.HOME),
expiresAt = null,
irreversible = false,
wholeWord = false
),
)
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
fun shouldNotFilter_whenFilterIsExpired() {
assertFalse(

Loading…
Cancel
Save