diff --git a/app/src/main/java/com/hippo/ehviewer/client/EhFilter.kt b/app/src/main/java/com/hippo/ehviewer/client/EhFilter.kt index 74e98b073..6bf2cab4e 100644 --- a/app/src/main/java/com/hippo/ehviewer/client/EhFilter.kt +++ b/app/src/main/java/com/hippo/ehviewer/client/EhFilter.kt @@ -32,6 +32,21 @@ object EhFilter { val commenterFilterList = mutableStateListOf() val commentFilterList = mutableStateListOf() + fun Filter.remember() = EhDB.addFilter(this).also { if (it) memorizeFilter(this) } + fun Filter.trigger() = EhDB.triggerFilter(this) + fun Filter.forget() { + EhDB.deleteFilter(this) + when (mode) { + MODE_TITLE -> titleFilterList.remove(this) + MODE_TAG -> tagFilterList.remove(this) + MODE_TAG_NAMESPACE -> tagNamespaceFilterList.remove(this) + MODE_UPLOADER -> uploaderFilterList.remove(this) + MODE_COMMENTER -> commenterFilterList.remove(this) + MODE_COMMENT -> commentFilterList.remove(this) + else -> error("Unknown mode: " + mode) + } + } + const val MODE_TITLE = 0 const val MODE_UPLOADER = 1 const val MODE_TAG = 2 @@ -55,22 +70,6 @@ object EhFilter { } } - fun addFilter(filter: Filter) = EhDB.addFilter(filter).also { if (it) memorizeFilter(filter) } - fun triggerFilter(filter: Filter) = EhDB.triggerFilter(filter) - - fun deleteFilter(filter: Filter) { - EhDB.deleteFilter(filter) - when (filter.mode) { - 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 -> error("Unknown mode: " + filter.mode) - } - } - private fun spiltTag(tag: String) = tag.run { val index = indexOf(':') if (index < 0) null to this else substring(0, index) to substring(index + 1) diff --git a/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryCommentsScene.kt b/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryCommentsScene.kt index f5e308bee..956adefc1 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryCommentsScene.kt +++ b/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryCommentsScene.kt @@ -58,6 +58,7 @@ import androidx.viewbinding.ViewBinding import com.hippo.ehviewer.R import com.hippo.ehviewer.client.EhEngine import com.hippo.ehviewer.client.EhFilter +import com.hippo.ehviewer.client.EhFilter.remember import com.hippo.ehviewer.client.EhUrl import com.hippo.ehviewer.client.data.GalleryComment import com.hippo.ehviewer.client.data.GalleryCommentList @@ -304,8 +305,7 @@ class GalleryCommentsScene : BaseToolbarScene(), View.OnClickListener, OnRefresh BaseDialogBuilder(context) .setMessage(getString(R.string.filter_the_commenter, commenter)) .setPositiveButton(android.R.string.ok) { _: DialogInterface?, _: Int -> - val filter = Filter(EhFilter.MODE_COMMENTER, commenter) - EhFilter.addFilter(filter) + Filter(EhFilter.MODE_COMMENTER, commenter).remember() hideComment(position) showTip(R.string.filter_added, LENGTH_SHORT) } diff --git a/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryDetailScene.kt b/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryDetailScene.kt index 8c52473d9..2ec8010a8 100755 --- a/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryDetailScene.kt +++ b/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryDetailScene.kt @@ -116,6 +116,7 @@ import com.hippo.ehviewer.Settings import com.hippo.ehviewer.client.EhCookieStore import com.hippo.ehviewer.client.EhEngine import com.hippo.ehviewer.client.EhFilter +import com.hippo.ehviewer.client.EhFilter.remember import com.hippo.ehviewer.client.EhTagDatabase import com.hippo.ehviewer.client.EhTagDatabase.isTranslatable import com.hippo.ehviewer.client.EhTagDatabase.namespaceToPrefix @@ -1227,8 +1228,7 @@ class GalleryDetailScene : BaseScene(), DownloadInfoListener { BaseDialogBuilder(context) .setMessage(getString(R.string.filter_the_tag, tag)) .setPositiveButton(android.R.string.ok) { _: DialogInterface?, _: Int -> - val filter = Filter(EhFilter.MODE_TAG, tag) - EhFilter.addFilter(filter) + Filter(EhFilter.MODE_TAG, tag).remember() showTip(R.string.filter_added, LENGTH_SHORT) } .setNegativeButton(android.R.string.cancel, null) @@ -1334,8 +1334,7 @@ class GalleryDetailScene : BaseScene(), DownloadInfoListener { BaseDialogBuilder(context) .setMessage(getString(R.string.filter_the_uploader, uploader)) .setPositiveButton(android.R.string.ok) { _: DialogInterface?, _: Int -> - val filter = Filter(EhFilter.MODE_UPLOADER, uploader) - EhFilter.addFilter(filter) + Filter(EhFilter.MODE_UPLOADER, uploader).remember() showTip(R.string.filter_added, LENGTH_SHORT) } .setNegativeButton(android.R.string.cancel, null) diff --git a/app/src/main/java/com/hippo/ehviewer/ui/settings/FilterScreen.kt b/app/src/main/java/com/hippo/ehviewer/ui/settings/FilterScreen.kt index 77a6035cb..59bf241c4 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/settings/FilterScreen.kt +++ b/app/src/main/java/com/hippo/ehviewer/ui/settings/FilterScreen.kt @@ -40,6 +40,9 @@ import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp import com.hippo.ehviewer.R import com.hippo.ehviewer.client.EhFilter +import com.hippo.ehviewer.client.EhFilter.forget +import com.hippo.ehviewer.client.EhFilter.remember +import com.hippo.ehviewer.client.EhFilter.trigger import com.hippo.ehviewer.dao.Filter import com.hippo.ehviewer.databinding.DialogAddFilterBinding import com.hippo.ehviewer.ui.LocalNavController @@ -80,7 +83,7 @@ fun FilterScreen() { } } binding.textInputLayout.run { - if (!EhFilter.addFilter(Filter(mArray.indexOf(text1), text!!))) { + if (!Filter(mArray.indexOf(text1), text!!).remember()) { error = context.getString(R.string.label_text_exist) return } else { @@ -138,7 +141,7 @@ fun FilterScreen() { checked = filter.enable, onCheckedChange = { coroutineScope.launch { - EhFilter.triggerFilter(filter) + filter.trigger() filterCheckBoxRecomposeScope.invalidate() } }, @@ -146,7 +149,7 @@ fun FilterScreen() { Text(text = filter.text) Spacer(modifier = Modifier.weight(1F)) IconButton( - onClick = { BaseDialogBuilder(context).setMessage(context.getString(R.string.delete_filter, filter.text)).setPositiveButton(R.string.delete) { _, which -> if (DialogInterface.BUTTON_POSITIVE == which) { coroutineScope.launch { EhFilter.deleteFilter(filter) } } }.setNegativeButton(android.R.string.cancel, null).show() }, + onClick = { BaseDialogBuilder(context).setMessage(context.getString(R.string.delete_filter, filter.text)).setPositiveButton(R.string.delete) { _, which -> if (DialogInterface.BUTTON_POSITIVE == which) { coroutineScope.launch { filter.forget() } } }.setNegativeButton(android.R.string.cancel, null).show() }, ) { Icon(imageVector = Icons.Default.Delete, contentDescription = null) }