mirror of
https://github.com/rhunk/SnapEnhance.git
synced 2025-06-12 13:17:42 +02:00
feat(scripting): config interface
- change onLaunched to onDispose - refactor JSModule extras
This commit is contained in:
@ -1,12 +1,11 @@
|
||||
package me.rhunk.snapenhance.core.scripting
|
||||
|
||||
import android.content.Context
|
||||
import me.rhunk.snapenhance.bridge.scripting.IPCListener
|
||||
import me.rhunk.snapenhance.bridge.scripting.IScripting
|
||||
import me.rhunk.snapenhance.common.logger.AbstractLogger
|
||||
import me.rhunk.snapenhance.common.scripting.IPCInterface
|
||||
import me.rhunk.snapenhance.common.scripting.Listener
|
||||
import me.rhunk.snapenhance.common.scripting.ScriptRuntime
|
||||
import me.rhunk.snapenhance.core.scripting.impl.CoreIPC
|
||||
import me.rhunk.snapenhance.core.scripting.impl.CoreScriptConfig
|
||||
import me.rhunk.snapenhance.core.scripting.impl.ScriptHooker
|
||||
|
||||
class CoreScriptRuntime(
|
||||
@ -18,38 +17,19 @@ class CoreScriptRuntime(
|
||||
fun connect(scriptingInterface: IScripting) {
|
||||
scriptingInterface.apply {
|
||||
buildModuleObject = { module ->
|
||||
putConst("ipc", this, object: IPCInterface() {
|
||||
override fun onBroadcast(channel: String, eventName: String, listener: Listener) {
|
||||
registerIPCListener(channel, eventName, object: IPCListener.Stub() {
|
||||
override fun onMessage(args: Array<out String?>) {
|
||||
listener(args)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
override fun on(eventName: String, listener: Listener) {
|
||||
onBroadcast(module.moduleInfo.name, eventName, listener)
|
||||
}
|
||||
|
||||
override fun emit(eventName: String, vararg args: String?) {
|
||||
broadcast(module.moduleInfo.name, eventName, *args)
|
||||
}
|
||||
|
||||
override fun broadcast(channel: String, eventName: String, vararg args: String?) {
|
||||
sendIPCMessage(channel, eventName, args)
|
||||
}
|
||||
})
|
||||
putConst("hooker", this, ScriptHooker(module.moduleInfo, logger, androidContext.classLoader).also {
|
||||
module.extras["ipc"] = CoreIPC(this@apply, module.moduleInfo)
|
||||
module.extras["hooker"] = ScriptHooker(module.moduleInfo, logger, androidContext.classLoader).also {
|
||||
scriptHookers.add(it)
|
||||
})
|
||||
}
|
||||
module.extras["config"] = CoreScriptConfig(this@apply, module.moduleInfo)
|
||||
}
|
||||
}
|
||||
|
||||
scriptingInterface.enabledScripts.forEach { path ->
|
||||
runCatching {
|
||||
load(path, scriptingInterface.getScriptContent(path))
|
||||
}.onFailure {
|
||||
logger.error("Failed to load script $path", it)
|
||||
enabledScripts.forEach { path ->
|
||||
runCatching {
|
||||
load(path, scriptingInterface.getScriptContent(path))
|
||||
}.onFailure {
|
||||
logger.error("Failed to load script $path", it)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,32 @@
|
||||
package me.rhunk.snapenhance.core.scripting.impl
|
||||
|
||||
import me.rhunk.snapenhance.bridge.scripting.IPCListener
|
||||
import me.rhunk.snapenhance.bridge.scripting.IScripting
|
||||
import me.rhunk.snapenhance.common.scripting.impl.IPCInterface
|
||||
import me.rhunk.snapenhance.common.scripting.impl.Listener
|
||||
import me.rhunk.snapenhance.common.scripting.type.ModuleInfo
|
||||
|
||||
class CoreIPC(
|
||||
private val scripting: IScripting,
|
||||
private val moduleInfo: ModuleInfo
|
||||
) : IPCInterface() {
|
||||
override fun onBroadcast(channel: String, eventName: String, listener: Listener) {
|
||||
scripting.registerIPCListener(channel, eventName, object: IPCListener.Stub() {
|
||||
override fun onMessage(args: Array<out String?>) {
|
||||
listener(args)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
override fun on(eventName: String, listener: Listener) {
|
||||
onBroadcast(moduleInfo.name, eventName, listener)
|
||||
}
|
||||
|
||||
override fun emit(eventName: String, vararg args: String?) {
|
||||
broadcast(moduleInfo.name, eventName, *args)
|
||||
}
|
||||
|
||||
override fun broadcast(channel: String, eventName: String, vararg args: String?) {
|
||||
scripting.sendIPCMessage(channel, eventName, args)
|
||||
}
|
||||
}
|
@ -0,0 +1,31 @@
|
||||
package me.rhunk.snapenhance.core.scripting.impl
|
||||
|
||||
import me.rhunk.snapenhance.bridge.scripting.IScripting
|
||||
import me.rhunk.snapenhance.common.scripting.impl.ConfigInterface
|
||||
import me.rhunk.snapenhance.common.scripting.impl.ConfigTransactionType
|
||||
import me.rhunk.snapenhance.common.scripting.type.ModuleInfo
|
||||
|
||||
class CoreScriptConfig(
|
||||
private val scripting: IScripting,
|
||||
private val moduleInfo: ModuleInfo
|
||||
): ConfigInterface() {
|
||||
override fun get(key: String, defaultValue: Any?): String? {
|
||||
return scripting.configTransaction(moduleInfo.name, ConfigTransactionType.GET.key, key, defaultValue.toString(), false)
|
||||
}
|
||||
|
||||
override fun set(key: String, value: Any?, save: Boolean) {
|
||||
scripting.configTransaction(moduleInfo.name, ConfigTransactionType.SET.key, key, value.toString(), save)
|
||||
}
|
||||
|
||||
override fun save() {
|
||||
scripting.configTransaction(moduleInfo.name, ConfigTransactionType.SAVE.key, null, null, false)
|
||||
}
|
||||
|
||||
override fun load() {
|
||||
scripting.configTransaction(moduleInfo.name, ConfigTransactionType.LOAD.key, null, null, false)
|
||||
}
|
||||
|
||||
override fun delete() {
|
||||
scripting.configTransaction(moduleInfo.name, ConfigTransactionType.DELETE.key, null, null, false)
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user