From 2e3a148c7a34d0d9cf8d8fb6d3c423aaf52df6ed Mon Sep 17 00:00:00 2001 From: tarsin Date: Sat, 1 Jul 2023 12:46:03 +0800 Subject: [PATCH] Convert to typesafe FilterMode --- app/src/main/java/com/hippo/ehviewer/EhDB.kt | 2 +- .../com/hippo/ehviewer/client/EhFilter.kt | 34 +++++++------------ .../java/com/hippo/ehviewer/dao/Database.kt | 2 ++ .../java/com/hippo/ehviewer/dao/Filter.kt | 20 ++++++++++- .../ehviewer/ui/scene/GalleryCommentsScene.kt | 4 +-- .../ehviewer/ui/scene/GalleryDetailScene.kt | 6 ++-- .../ehviewer/ui/settings/FilterScreen.kt | 3 +- 7 files changed, 42 insertions(+), 29 deletions(-) diff --git a/app/src/main/java/com/hippo/ehviewer/EhDB.kt b/app/src/main/java/com/hippo/ehviewer/EhDB.kt index 4a4184a57..03bfdbcd0 100644 --- a/app/src/main/java/com/hippo/ehviewer/EhDB.kt +++ b/app/src/main/java/com/hippo/ehviewer/EhDB.kt @@ -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 } 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 6e41fc862..9c51e3d87 100644 --- a/app/src/main/java/com/hippo/ehviewer/client/EhFilter.kt +++ b/app/src/main/java/com/hippo/ehviewer/client/EhFilter.kt @@ -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) } } diff --git a/app/src/main/java/com/hippo/ehviewer/dao/Database.kt b/app/src/main/java/com/hippo/ehviewer/dao/Database.kt index 3d6dc9ee8..086263011 100644 --- a/app/src/main/java/com/hippo/ehviewer/dao/Database.kt +++ b/app/src/main/java/com/hippo/ehviewer/dao/Database.kt @@ -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 diff --git a/app/src/main/java/com/hippo/ehviewer/dao/Filter.kt b/app/src/main/java/com/hippo/ehviewer/dao/Filter.kt index fa7b520c4..e21421ea8 100644 --- a/app/src/main/java/com/hippo/ehviewer/dao/Filter.kt +++ b/app/src/main/java/com/hippo/ehviewer/dao/Filter.kt @@ -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] +} 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 956adefc1..0e9d7871f 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 @@ -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) } 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 2ec8010a8..7f07f5b40 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 @@ -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) 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 8324ba294..64a2b8657 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 @@ -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 {