commit 621c16d7f4c01bdfae42e9bfcb0238c445452034
parent 93358d97f45020dbeb6686e937a96dd9854e548f
Author: rhunk <101876869+rhunk@users.noreply.github.com>
Date:   Sat,  2 Aug 2025 13:44:22 +0200

feat(core/scripting): disable script optimization

Signed-off-by: rhunk <101876869+rhunk@users.noreply.github.com>

Diffstat:
Mapp/src/main/kotlin/me/rhunk/snapenhance/scripting/RemoteScriptManager.kt | 6+++++-
Mcommon/src/main/assets/lang/en_US.json | 4++++
Mcommon/src/main/kotlin/me/rhunk/snapenhance/common/config/impl/Scripting.kt | 1+
Mcommon/src/main/kotlin/me/rhunk/snapenhance/common/scripting/JSModule.kt | 6++++--
Mcommon/src/main/kotlin/me/rhunk/snapenhance/common/scripting/ScriptRuntime.kt | 2++
Mcommon/src/main/kotlin/me/rhunk/snapenhance/common/scripting/ktx/RhinoKtx.kt | 5+----
Mcore/src/main/kotlin/me/rhunk/snapenhance/core/scripting/CoreScriptRuntime.kt | 12++++++------
7 files changed, 23 insertions(+), 13 deletions(-)

diff --git a/app/src/main/kotlin/me/rhunk/snapenhance/scripting/RemoteScriptManager.kt b/app/src/main/kotlin/me/rhunk/snapenhance/scripting/RemoteScriptManager.kt @@ -29,7 +29,11 @@ import kotlin.system.exitProcess class RemoteScriptManager( val context: RemoteSideContext, ) : IScripting.Stub() { - val runtime = ScriptRuntime(context.androidContext, context.log).apply { + val runtime = ScriptRuntime( + config = { context.config.root }, + androidContext = context.androidContext, + logger = context.log + ).apply { scripting = this@RemoteScriptManager } diff --git a/common/src/main/assets/lang/en_US.json b/common/src/main/assets/lang/en_US.json @@ -1156,6 +1156,10 @@ "disable_log_anonymization": { "name": "Disable Log Anonymization", "description": "Disables the anonymization of logs" + }, + "disable_optimization": { + "name": "Disable Optimization", + "description": "Disables the optimization of scripts. This may cause performance issues." } } }, diff --git a/common/src/main/kotlin/me/rhunk/snapenhance/common/config/impl/Scripting.kt b/common/src/main/kotlin/me/rhunk/snapenhance/common/config/impl/Scripting.kt @@ -9,4 +9,5 @@ class Scripting : ConfigContainer() { val autoReload = unique("auto_reload", "snapchat_only", "all") val integratedUI = boolean("integrated_ui", false) { requireRestart() } val disableLogAnonymization = boolean("disable_log_anonymization", false) { requireRestart() } + val disableOptimization = boolean("disable_optimization", false) { requireRestart() } } \ No newline at end of file diff --git a/common/src/main/kotlin/me/rhunk/snapenhance/common/scripting/JSModule.kt b/common/src/main/kotlin/me/rhunk/snapenhance/common/scripting/JSModule.kt @@ -15,8 +15,10 @@ import me.rhunk.snapenhance.common.scripting.ktx.scriptableObject import me.rhunk.snapenhance.common.scripting.type.ModuleInfo import me.rhunk.snapenhance.common.scripting.type.Permissions import me.rhunk.snapenhance.common.scripting.ui.InterfaceManager -import org.mozilla.javascript.* import org.mozilla.javascript.Function +import org.mozilla.javascript.ScriptableObject +import org.mozilla.javascript.Undefined +import org.mozilla.javascript.Wrapper import java.io.Reader import java.lang.reflect.Modifier import kotlin.reflect.KClass @@ -235,7 +237,7 @@ class JSModule( } } - contextScope(shouldOptimize = true) { + contextScope(shouldOptimize = scriptRuntime.config().scripting.disableOptimization.getNullable() != true) { evaluateReader(moduleObject, reader, moduleInfo.name, 1, null) } } diff --git a/common/src/main/kotlin/me/rhunk/snapenhance/common/scripting/ScriptRuntime.kt b/common/src/main/kotlin/me/rhunk/snapenhance/common/scripting/ScriptRuntime.kt @@ -4,12 +4,14 @@ import android.content.Context import android.os.ParcelFileDescriptor import me.rhunk.snapenhance.bridge.scripting.IScripting import me.rhunk.snapenhance.common.BuildConfig +import me.rhunk.snapenhance.common.config.impl.RootConfig import me.rhunk.snapenhance.common.logger.AbstractLogger import me.rhunk.snapenhance.common.scripting.type.readModuleInfo import org.mozilla.javascript.ScriptableObject import java.io.InputStream open class ScriptRuntime( + val config: () -> RootConfig, val androidContext: Context, logger: AbstractLogger, ) { diff --git a/common/src/main/kotlin/me/rhunk/snapenhance/common/scripting/ktx/RhinoKtx.kt b/common/src/main/kotlin/me/rhunk/snapenhance/common/scripting/ktx/RhinoKtx.kt @@ -1,11 +1,8 @@ package me.rhunk.snapenhance.common.scripting.ktx import com.faendir.rhino_android.RhinoAndroidHelper -import org.mozilla.javascript.Context +import org.mozilla.javascript.* import org.mozilla.javascript.Function -import org.mozilla.javascript.Scriptable -import org.mozilla.javascript.ScriptableObject -import org.mozilla.javascript.Wrapper import java.io.File private val rhinoAndroidHelper = RhinoAndroidHelper(null as File?) diff --git a/core/src/main/kotlin/me/rhunk/snapenhance/core/scripting/CoreScriptRuntime.kt b/core/src/main/kotlin/me/rhunk/snapenhance/core/scripting/CoreScriptRuntime.kt @@ -5,16 +5,16 @@ import me.rhunk.snapenhance.common.logger.AbstractLogger import me.rhunk.snapenhance.common.scripting.ScriptRuntime import me.rhunk.snapenhance.common.scripting.bindings.BindingSide import me.rhunk.snapenhance.core.ModContext -import me.rhunk.snapenhance.core.scripting.impl.CoreEvents -import me.rhunk.snapenhance.core.scripting.impl.CoreIPC -import me.rhunk.snapenhance.core.scripting.impl.CoreMessaging -import me.rhunk.snapenhance.core.scripting.impl.CoreScriptConfig -import me.rhunk.snapenhance.core.scripting.impl.CoreScriptHooker +import me.rhunk.snapenhance.core.scripting.impl.* class CoreScriptRuntime( private val modContext: ModContext, logger: AbstractLogger, -): ScriptRuntime(modContext.androidContext, logger) { +): ScriptRuntime( + config = { modContext.config }, + androidContext = modContext.androidContext, + logger = logger +) { // we assume that the bridge is reloaded the next time we connect to it private var isBridgeReloaded = false