Convert to typesafe FilterMode
This commit is contained in:
1 parent
a7b239f0b9
commit
2e3a148c7a
7 files changed
+42
-29
No files matched your search
@@ -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 {
|
||||
|
||||
Reference in new issue
Block a user