Refactor EhFilter
This commit is contained in:
1 parent
83ad66d27c
commit
0ed68b55b3
2 files changed
+54
-131
No files matched your search
@@ -19,16 +19,14 @@ import android.util.Log
|
||||
import com.hippo.ehviewer.EhDB
|
||||
import com.hippo.ehviewer.client.data.GalleryInfo
|
||||
import com.hippo.ehviewer.dao.Filter
|
||||
import java.util.Locale
|
||||
import java.util.regex.Pattern
|
||||
|
||||
object EhFilter {
|
||||
private val mTitleFilterList: MutableList<Filter> = ArrayList()
|
||||
private val mUploaderFilterList: MutableList<Filter> = ArrayList()
|
||||
private val mTagFilterList: MutableList<Filter> = ArrayList()
|
||||
private val mTagNamespaceFilterList: MutableList<Filter> = ArrayList()
|
||||
private val mCommenterFilterList: MutableList<Filter> = ArrayList()
|
||||
private val mCommentFilterList: MutableList<Filter> = ArrayList()
|
||||
val titleFilterList = mutableListOf<Filter>()
|
||||
val uploaderFilterList = mutableListOf<Filter>()
|
||||
val tagFilterList = mutableListOf<Filter>()
|
||||
val tagNamespaceFilterList = mutableListOf<Filter>()
|
||||
val commenterFilterList = mutableListOf<Filter>()
|
||||
val commentFilterList = mutableListOf<Filter>()
|
||||
|
||||
const val MODE_TITLE = 0
|
||||
const val MODE_UPLOADER = 1
|
||||
@@ -36,52 +34,34 @@ object EhFilter {
|
||||
const val MODE_TAG_NAMESPACE = 3
|
||||
const val MODE_COMMENTER = 4
|
||||
const val MODE_COMMENT = 5
|
||||
private val TAG = EhFilter::class.java.simpleName
|
||||
private const val TAG = "EhFilter"
|
||||
|
||||
init {
|
||||
val list = EhDB.allFilter
|
||||
var i = 0
|
||||
val n = list.size
|
||||
while (i < n) {
|
||||
val filter = list[i]
|
||||
EhDB.allFilter.forEach { filter ->
|
||||
when (filter.mode) {
|
||||
MODE_TITLE -> {
|
||||
filter.text = filter.text!!.lowercase(Locale.getDefault())
|
||||
mTitleFilterList.add(filter)
|
||||
filter.text = filter.text!!.lowercase()
|
||||
titleFilterList.add(filter)
|
||||
}
|
||||
|
||||
MODE_TAG -> {
|
||||
filter.text = filter.text!!.lowercase(Locale.getDefault())
|
||||
mTagFilterList.add(filter)
|
||||
filter.text = filter.text!!.lowercase()
|
||||
tagFilterList.add(filter)
|
||||
}
|
||||
|
||||
MODE_TAG_NAMESPACE -> {
|
||||
filter.text = filter.text!!.lowercase(Locale.getDefault())
|
||||
mTagNamespaceFilterList.add(filter)
|
||||
filter.text = filter.text!!.lowercase()
|
||||
tagNamespaceFilterList.add(filter)
|
||||
}
|
||||
|
||||
MODE_UPLOADER -> mUploaderFilterList.add(filter)
|
||||
MODE_COMMENTER -> mCommenterFilterList.add(filter)
|
||||
MODE_COMMENT -> mCommentFilterList.add(filter)
|
||||
MODE_UPLOADER -> uploaderFilterList.add(filter)
|
||||
MODE_COMMENTER -> commenterFilterList.add(filter)
|
||||
MODE_COMMENT -> commentFilterList.add(filter)
|
||||
else -> Log.d(TAG, "Unknown mode: " + filter.mode)
|
||||
}
|
||||
i++
|
||||
}
|
||||
}
|
||||
|
||||
val titleFilterList: List<Filter>
|
||||
get() = mTitleFilterList
|
||||
val uploaderFilterList: List<Filter>
|
||||
get() = mUploaderFilterList
|
||||
val tagFilterList: List<Filter>
|
||||
get() = mTagFilterList
|
||||
val tagNamespaceFilterList: List<Filter>
|
||||
get() = mTagNamespaceFilterList
|
||||
val commenterFilterList: List<Filter>
|
||||
get() = mCommenterFilterList
|
||||
val commentFilterList: List<Filter>
|
||||
get() = mCommentFilterList
|
||||
|
||||
@Synchronized
|
||||
fun addFilter(filter: Filter): Boolean {
|
||||
// enable filter by default before it is added to database
|
||||
@@ -89,23 +69,23 @@ object EhFilter {
|
||||
if (!EhDB.addFilter(filter)) return false
|
||||
when (filter.mode) {
|
||||
MODE_TITLE -> {
|
||||
filter.text = filter.text!!.lowercase(Locale.getDefault())
|
||||
mTitleFilterList.add(filter)
|
||||
filter.text = filter.text!!.lowercase()
|
||||
titleFilterList.add(filter)
|
||||
}
|
||||
|
||||
MODE_TAG -> {
|
||||
filter.text = filter.text!!.lowercase(Locale.getDefault())
|
||||
mTagFilterList.add(filter)
|
||||
filter.text = filter.text!!.lowercase()
|
||||
tagFilterList.add(filter)
|
||||
}
|
||||
|
||||
MODE_TAG_NAMESPACE -> {
|
||||
filter.text = filter.text!!.lowercase(Locale.getDefault())
|
||||
mTagNamespaceFilterList.add(filter)
|
||||
filter.text = filter.text!!.lowercase()
|
||||
tagNamespaceFilterList.add(filter)
|
||||
}
|
||||
|
||||
MODE_UPLOADER -> mUploaderFilterList.add(filter)
|
||||
MODE_COMMENTER -> mCommenterFilterList.add(filter)
|
||||
MODE_COMMENT -> mCommentFilterList.add(filter)
|
||||
MODE_UPLOADER -> uploaderFilterList.add(filter)
|
||||
MODE_COMMENTER -> commenterFilterList.add(filter)
|
||||
MODE_COMMENT -> commentFilterList.add(filter)
|
||||
else -> Log.d(TAG, "Unknown mode: " + filter.mode)
|
||||
}
|
||||
return true
|
||||
@@ -120,12 +100,12 @@ object EhFilter {
|
||||
fun deleteFilter(filter: Filter) {
|
||||
EhDB.deleteFilter(filter)
|
||||
when (filter.mode) {
|
||||
MODE_TITLE -> mTitleFilterList.remove(filter)
|
||||
MODE_TAG -> mTagFilterList.remove(filter)
|
||||
MODE_TAG_NAMESPACE -> mTagNamespaceFilterList.remove(filter)
|
||||
MODE_UPLOADER -> mUploaderFilterList.remove(filter)
|
||||
MODE_COMMENTER -> mCommenterFilterList.remove(filter)
|
||||
MODE_COMMENT -> mCommentFilterList.remove(filter)
|
||||
MODE_TITLE -> titleFilterList.remove(filter)
|
||||
MODE_TAG -> tagFilterList.remove(filter)
|
||||
MODE_TAG_NAMESPACE -> tagNamespaceFilterList.remove(filter)
|
||||
MODE_UPLOADER -> uploaderFilterList.remove(filter)
|
||||
MODE_COMMENTER -> commenterFilterList.remove(filter)
|
||||
MODE_COMMENT -> commentFilterList.remove(filter)
|
||||
else -> Log.d(TAG, "Unknown mode: " + filter.mode)
|
||||
}
|
||||
}
|
||||
@@ -136,48 +116,30 @@ object EhFilter {
|
||||
|
||||
@Synchronized
|
||||
fun needTags(): Boolean {
|
||||
return 0 != mTagFilterList.size || 0 != mTagNamespaceFilterList.size
|
||||
return 0 != tagFilterList.size || 0 != tagNamespaceFilterList.size
|
||||
}
|
||||
|
||||
@Synchronized
|
||||
fun filterTitle(info: GalleryInfo): Boolean {
|
||||
val title = info.title ?: return false
|
||||
return mTitleFilterList.contains { it.enable!! && it.text!! in title.lowercase() }
|
||||
return titleFilterList.contains { it.enable!! && it.text!! in title.lowercase() }
|
||||
}
|
||||
|
||||
@Synchronized
|
||||
fun filterUploader(info: GalleryInfo): Boolean {
|
||||
val uploader = info.uploader ?: return false
|
||||
return mUploaderFilterList.contains { it.enable!! && it.text == uploader }
|
||||
return uploaderFilterList.contains { it.enable!! && it.text == uploader }
|
||||
}
|
||||
|
||||
private fun matchTag(tag: String?, filter: String?): Boolean {
|
||||
if (null == tag || null == filter) {
|
||||
return false
|
||||
}
|
||||
val tagNamespace: String?
|
||||
val tagName: String
|
||||
val filterNamespace: String?
|
||||
val filterName: String
|
||||
var index = tag.indexOf(':')
|
||||
if (index < 0) {
|
||||
tagNamespace = null
|
||||
tagName = tag
|
||||
} else {
|
||||
tagNamespace = tag.substring(0, index)
|
||||
tagName = tag.substring(index + 1)
|
||||
}
|
||||
index = filter.indexOf(':')
|
||||
if (index < 0) {
|
||||
filterNamespace = null
|
||||
filterName = filter
|
||||
} else {
|
||||
filterNamespace = filter.substring(0, index)
|
||||
filterName = filter.substring(index + 1)
|
||||
}
|
||||
return if (null != tagNamespace && null != filterNamespace &&
|
||||
tagNamespace != filterNamespace
|
||||
) {
|
||||
private fun spiltTag(tag: String) = tag.run {
|
||||
val index = indexOf(':')
|
||||
if (index < 0) null to this else substring(0, index) to substring(index + 1)
|
||||
}
|
||||
|
||||
private fun matchTag(tag: String, filter: String): Boolean {
|
||||
val (tagNamespace, tagName) = spiltTag(tag)
|
||||
val (filterNamespace, filterName) = spiltTag(filter)
|
||||
return if (null != tagNamespace && null != filterNamespace && tagNamespace != filterNamespace) {
|
||||
false
|
||||
} else {
|
||||
tagName == filterName
|
||||
@@ -187,66 +149,27 @@ object EhFilter {
|
||||
@Synchronized
|
||||
fun filterTag(info: GalleryInfo): Boolean {
|
||||
val tags = info.simpleTags ?: return false
|
||||
return tags.contains { tag -> mTagFilterList.contains { it.enable!! && matchTag(tag, it.text) } }
|
||||
return tags.contains { tag -> tagFilterList.contains { it.enable!! && matchTag(tag, it.text!!) } }
|
||||
}
|
||||
|
||||
private fun matchTagNamespace(tag: String?, filter: String?): Boolean {
|
||||
if (null == tag || null == filter) {
|
||||
return false
|
||||
}
|
||||
val tagNamespace: String
|
||||
val index = tag.indexOf(':')
|
||||
return if (index >= 0) {
|
||||
tagNamespace = tag.substring(0, index)
|
||||
tagNamespace == filter
|
||||
} else {
|
||||
false
|
||||
}
|
||||
private fun matchTagNamespace(tag: String, filter: String): Boolean {
|
||||
val (nameSpace, _) = spiltTag(tag)
|
||||
return nameSpace == filter
|
||||
}
|
||||
|
||||
@Synchronized
|
||||
fun filterTagNamespace(info: GalleryInfo): Boolean {
|
||||
val tags = info.simpleTags ?: return false
|
||||
return tags.contains { tag -> mTagNamespaceFilterList.contains { it.enable!! && matchTagNamespace(tag, it.text) } }
|
||||
return tags.contains { tag -> tagNamespaceFilterList.contains { it.enable!! && matchTagNamespace(tag, it.text!!) } }
|
||||
}
|
||||
|
||||
@Synchronized
|
||||
fun filterCommenter(commenter: String?): Boolean {
|
||||
if (null == commenter) {
|
||||
return false
|
||||
}
|
||||
val filters: List<Filter> = mCommenterFilterList
|
||||
if (filters.isNotEmpty()) {
|
||||
var i = 0
|
||||
val n = filters.size
|
||||
while (i < n) {
|
||||
if (filters[i].enable!! && commenter == filters[i].text) {
|
||||
return false
|
||||
}
|
||||
i++
|
||||
}
|
||||
}
|
||||
return true
|
||||
fun filterCommenter(commenter: String): Boolean {
|
||||
return commenterFilterList.contains { it.enable!! && it.text == commenter }
|
||||
}
|
||||
|
||||
@Synchronized
|
||||
fun filterComment(comment: String?): Boolean {
|
||||
if (null == comment) {
|
||||
return false
|
||||
}
|
||||
val filters: List<Filter> = mCommentFilterList
|
||||
if (filters.isNotEmpty()) {
|
||||
var i = 0
|
||||
val n = filters.size
|
||||
while (i < n) {
|
||||
if (filters[i].enable!!) {
|
||||
val p = Pattern.compile(filters[i].text!!)
|
||||
val m = p.matcher(comment)
|
||||
if (m.find()) return false
|
||||
}
|
||||
i++
|
||||
}
|
||||
}
|
||||
return true
|
||||
fun filterComment(comment: String): Boolean {
|
||||
return commentFilterList.contains { it.enable!! && Regex(it.text!!).containsMatchIn(comment) }
|
||||
}
|
||||
}
|
||||
@@ -399,7 +399,7 @@ object GalleryDetailParser {
|
||||
// filter comment
|
||||
if (!comment.uploader) {
|
||||
val sEhFilter = EhFilter
|
||||
if (!sEhFilter.filterCommenter(comment.user) || !sEhFilter.filterComment(comment.comment)) {
|
||||
if (sEhFilter.filterCommenter(comment.user!!) || sEhFilter.filterComment(comment.comment!!)) {
|
||||
return null
|
||||
}
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user