commit 10bcb93d45a7207380303a30035ab182fd7d1038
parent 985e1ac75404cb0a62068101b579cd86016791e6
Author: rhunk <101876869+rhunk@users.noreply.github.com>
Date: Sat, 23 Mar 2024 00:56:17 +0100
feat(experimental): cof override
Diffstat:
2 files changed, 52 insertions(+), 0 deletions(-)
diff --git a/core/src/main/kotlin/me/rhunk/snapenhance/core/features/FeatureManager.kt b/core/src/main/kotlin/me/rhunk/snapenhance/core/features/FeatureManager.kt
@@ -4,6 +4,7 @@ import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import kotlinx.coroutines.runBlocking
import me.rhunk.snapenhance.core.ModContext
+import me.rhunk.snapenhance.core.features.impl.COFOverride
import me.rhunk.snapenhance.core.features.impl.ConfigurationOverride
import me.rhunk.snapenhance.core.features.impl.MixerStories
import me.rhunk.snapenhance.core.features.impl.OperaViewerParamsOverride
@@ -76,6 +77,7 @@ class FeatureManager(
AutoSave(),
UITweaks(),
ConfigurationOverride(),
+ COFOverride(),
UnsaveableMessages(),
SendOverride(),
UnlimitedSnapViewTime(),
diff --git a/core/src/main/kotlin/me/rhunk/snapenhance/core/features/impl/COFOverride.kt b/core/src/main/kotlin/me/rhunk/snapenhance/core/features/impl/COFOverride.kt
@@ -0,0 +1,49 @@
+package me.rhunk.snapenhance.core.features.impl
+
+import android.database.sqlite.SQLiteDatabase
+import android.database.sqlite.SQLiteDatabase.OpenParams
+import me.rhunk.snapenhance.common.util.ktx.getBlobOrNull
+import me.rhunk.snapenhance.common.util.protobuf.ProtoEditor
+import me.rhunk.snapenhance.core.features.Feature
+import me.rhunk.snapenhance.core.features.FeatureLoadParams
+
+class COFOverride : Feature("Cof Override", loadParams = FeatureLoadParams.INIT_ASYNC) {
+ override fun asyncInit() {
+ val coreDatabaseFile = context.androidContext.getDatabasePath("core.db")
+ if (!coreDatabaseFile.exists()) return
+ SQLiteDatabase.openDatabase(coreDatabaseFile, OpenParams.Builder().apply {
+ setOpenFlags(SQLiteDatabase.OPEN_READWRITE or SQLiteDatabase.ENABLE_WRITE_AHEAD_LOGGING)
+ }.build()).use { db ->
+ fun setProperty(configId: String, value: Any) {
+ runCatching {
+ db.rawQuery("SELECT config_result FROM ConfigRule WHERE config_id = ?", arrayOf(configId)).use { cursor ->
+ if (!cursor.moveToFirst()) {
+ context.log.warn("Failed to find $configId in ConfigRule")
+ return
+ }
+ val configResult = cursor.getBlobOrNull("config_result")?.let {
+ ProtoEditor(it).apply {
+ edit(2) {
+ clear()
+ when (value) {
+ is Int -> addVarInt(1, value)
+ is Long -> addVarInt(2, value)
+ is Float -> addFixed32(3, value)
+ is Boolean -> addVarInt(4, if (value) 1 else 0)
+ is String -> addString(5, value)
+ is ByteArray -> addBuffer(6, value)
+ is Double -> addFixed64(7, value.toLong())
+ else -> return@edit
+ }
+ }
+ }.toByteArray()
+ } ?: return
+ db.execSQL("UPDATE ConfigRule SET config_result = ? WHERE config_id = ?", arrayOf(configResult, configId))
+ }
+ }
+ }
+
+ setProperty("ANDROID_ACTION_MENU_V2", context.config.experimental.newChatActionMenu.get())
+ }
+ }
+}+
\ No newline at end of file