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:
Mcore/src/main/kotlin/me/rhunk/snapenhance/core/features/FeatureManager.kt | 2++
Acore/src/main/kotlin/me/rhunk/snapenhance/core/features/impl/COFOverride.kt | 50++++++++++++++++++++++++++++++++++++++++++++++++++
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