Convert to typesafe FilterMode

This commit is contained in:
tarsin committed 2023-07-01 12:46:03 +08:00
1 parent a7b239f0b9
commit 2e3a148c7a
7 files changed
+42 -29

No files matched your search

+1 -1
View File
@@ -335,7 +335,7 @@ object EhDB {
@Synchronized
fun addFilter(filter: Filter): Boolean {
val existFilter: Filter? = try {
db.filterDao().load(filter.text, filter.mode)
db.filterDao().load(filter.text, filter.mode.field)
} catch (e: Exception) {
null
}
@@ -20,6 +20,7 @@ import arrow.core.memoize
import com.hippo.ehviewer.EhDB
import com.hippo.ehviewer.client.data.GalleryInfo
import com.hippo.ehviewer.dao.Filter
import com.hippo.ehviewer.dao.FilterMode
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
@@ -46,36 +47,27 @@ object EhFilter : CoroutineScope {
fun Filter.forget() = launchOps {
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")
FilterMode.TITLE -> titleFilterList.remove(this)
FilterMode.TAG -> tagFilterList.remove(this)
FilterMode.TAG_NAMESPACE -> tagNamespaceFilterList.remove(this)
FilterMode.UPLOADER -> uploaderFilterList.remove(this)
FilterMode.COMMENTER -> commenterFilterList.remove(this)
FilterMode.COMMENT -> commentFilterList.remove(this)
}
}
const val MODE_TITLE = 0
const val MODE_UPLOADER = 1
const val MODE_TAG = 2
const val MODE_TAG_NAMESPACE = 3
const val MODE_COMMENTER = 4
const val MODE_COMMENT = 5
init {
EhDB.allFilter.forEach(::memorizeFilter)
}
private fun memorizeFilter(filter: Filter) {
when (filter.mode) {
MODE_TITLE -> titleFilterList.add(filter.apply { text = text.lowercase() })
MODE_TAG -> tagFilterList.add(filter.apply { text = text.lowercase() })
MODE_TAG_NAMESPACE -> tagNamespaceFilterList.add(filter.apply { text = text.lowercase() })
MODE_UPLOADER -> uploaderFilterList.add(filter)
MODE_COMMENTER -> commenterFilterList.add(filter)
MODE_COMMENT -> commentFilterList.add(filter)
else -> error("Unknown mode: " + filter.mode)
FilterMode.TITLE -> titleFilterList.add(filter.apply { text = text.lowercase() })
FilterMode.TAG -> tagFilterList.add(filter.apply { text = text.lowercase() })
FilterMode.TAG_NAMESPACE -> tagNamespaceFilterList.add(filter.apply { text = text.lowercase() })
FilterMode.UPLOADER -> uploaderFilterList.add(filter)
FilterMode.COMMENTER -> commenterFilterList.add(filter)
FilterMode.COMMENT -> commentFilterList.add(filter)
}
}
@@ -4,6 +4,7 @@ import androidx.room.AutoMigration
import androidx.room.Database
import androidx.room.DeleteTable
import androidx.room.RoomDatabase
import androidx.room.TypeConverters
import androidx.room.migration.AutoMigrationSpec
import androidx.sqlite.db.SupportSQLiteDatabase
@@ -55,6 +56,7 @@ class ThumbKeyMigration : AutoMigrationSpec {
),
],
)
@TypeConverters(FilterModeConverter::class)
abstract class EhDatabase : RoomDatabase() {
abstract fun downloadDirnameDao(): DownloadDirnameDao
abstract fun downloadLabelDao(): DownloadLabelDao
@@ -3,11 +3,12 @@ package com.hippo.ehviewer.dao
import androidx.room.ColumnInfo
import androidx.room.Entity
import androidx.room.PrimaryKey
import androidx.room.TypeConverter
@Entity(tableName = "FILTER")
data class Filter(
@ColumnInfo(name = "MODE")
val mode: Int,
val mode: FilterMode,
@ColumnInfo(name = "TEXT")
var text: String,
@@ -19,3 +20,20 @@ data class Filter(
@ColumnInfo(name = "_id")
var id: Long? = null,
)
enum class FilterMode(val field: Int) {
TITLE(0),
UPLOADER(1),
TAG(2),
TAG_NAMESPACE(3),
COMMENTER(4),
COMMENT(5),
}
class FilterModeConverter {
@TypeConverter
fun fromFilterMode(mode: FilterMode) = mode.field
@TypeConverter
fun toFilterMode(mode: Int) = FilterMode.entries[mode]
}
@@ -57,7 +57,6 @@ import androidx.swiperefreshlayout.widget.SwipeRefreshLayout.OnRefreshListener
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
@@ -66,6 +65,7 @@ import com.hippo.ehviewer.client.data.GalleryDetail
import com.hippo.ehviewer.client.data.ListUrlBuilder
import com.hippo.ehviewer.client.parser.VoteCommentParser
import com.hippo.ehviewer.dao.Filter
import com.hippo.ehviewer.dao.FilterMode
import com.hippo.ehviewer.databinding.ItemDrawerFavoritesBinding
import com.hippo.ehviewer.databinding.ItemGalleryCommentBinding
import com.hippo.ehviewer.databinding.ItemGalleryCommentMoreBinding
@@ -305,7 +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 ->
Filter(EhFilter.MODE_COMMENTER, commenter).remember()
Filter(FilterMode.COMMENTER, commenter).remember()
hideComment(position)
showTip(R.string.filter_added, LENGTH_SHORT)
}
@@ -115,7 +115,6 @@ import com.hippo.ehviewer.R
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
@@ -136,6 +135,7 @@ import com.hippo.ehviewer.coil.imageRequest
import com.hippo.ehviewer.coil.justDownload
import com.hippo.ehviewer.dao.DownloadInfo
import com.hippo.ehviewer.dao.Filter
import com.hippo.ehviewer.dao.FilterMode
import com.hippo.ehviewer.databinding.DialogArchiveListBinding
import com.hippo.ehviewer.databinding.DialogRateBinding
import com.hippo.ehviewer.databinding.DialogTorrentListBinding
@@ -1228,7 +1228,7 @@ class GalleryDetailScene : BaseScene(), DownloadInfoListener {
BaseDialogBuilder(context)
.setMessage(getString(R.string.filter_the_tag, tag))
.setPositiveButton(android.R.string.ok) { _: DialogInterface?, _: Int ->
Filter(EhFilter.MODE_TAG, tag).remember()
Filter(FilterMode.TAG, tag).remember()
showTip(R.string.filter_added, LENGTH_SHORT)
}
.setNegativeButton(android.R.string.cancel, null)
@@ -1334,7 +1334,7 @@ class GalleryDetailScene : BaseScene(), DownloadInfoListener {
BaseDialogBuilder(context)
.setMessage(getString(R.string.filter_the_uploader, uploader))
.setPositiveButton(android.R.string.ok) { _: DialogInterface?, _: Int ->
Filter(EhFilter.MODE_UPLOADER, uploader).remember()
Filter(FilterMode.UPLOADER, uploader).remember()
showTip(R.string.filter_added, LENGTH_SHORT)
}
.setNegativeButton(android.R.string.cancel, null)
@@ -43,6 +43,7 @@ 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.dao.FilterMode
import com.hippo.ehviewer.databinding.DialogAddFilterBinding
import com.hippo.ehviewer.ui.LocalNavController
import com.hippo.ehviewer.ui.legacy.BaseDialogBuilder
@@ -79,7 +80,7 @@ fun FilterScreen() {
}
}
binding.textInputLayout.run {
Filter(mArray.indexOf(text1), text!!).remember {
Filter(FilterMode.entries[mArray.indexOf(text1)], text!!).remember {
if (it) {
post { dialog.dismiss() }
} else {