commit ccde97c3bba9f05eab1b68f2b6ccac957c9a7e2a
parent 381b346c7a0a3d7b560e9bfa8452d5e0779258a7
Author: rhunk <101876869+rhunk@users.noreply.github.com>
Date:   Sun,  4 Feb 2024 16:53:59 +0100

feat(core/scripting): events

Diffstat:
Mcore/src/main/kotlin/me/rhunk/snapenhance/core/scripting/CoreScriptRuntime.kt | 4+++-
Acore/src/main/kotlin/me/rhunk/snapenhance/core/scripting/impl/CoreEvents.kt | 76++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 79 insertions(+), 1 deletion(-)

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 @@ -6,6 +6,7 @@ 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 @@ -24,7 +25,8 @@ class CoreScriptRuntime( CoreScriptConfig(), CoreIPC(), CoreScriptHooker(), - CoreMessaging(modContext) + CoreMessaging(modContext), + CoreEvents(modContext), ) } diff --git a/core/src/main/kotlin/me/rhunk/snapenhance/core/scripting/impl/CoreEvents.kt b/core/src/main/kotlin/me/rhunk/snapenhance/core/scripting/impl/CoreEvents.kt @@ -0,0 +1,75 @@ +package me.rhunk.snapenhance.core.scripting.impl + +import me.rhunk.snapenhance.common.scripting.bindings.AbstractBinding +import me.rhunk.snapenhance.common.scripting.bindings.BindingSide +import me.rhunk.snapenhance.common.scripting.ktx.scriptableObject +import me.rhunk.snapenhance.core.ModContext +import me.rhunk.snapenhance.core.event.Event +import me.rhunk.snapenhance.core.event.events.impl.* +import org.mozilla.javascript.ScriptableObject + +class CoreEvents( + private val modContext: ModContext +) : AbstractBinding("events", BindingSide.CORE) { + private fun ScriptableObject.cancelableEvent(event: Event): ScriptableObject { + defineProperty("canceled", { event.canceled }, { value -> event.canceled = value as Boolean },0) + return this + } + + fun onConversationUpdated(callback: (event: ScriptableObject) -> Unit) { + modContext.event.subscribe(ConversationUpdateEvent::class) { event -> + callback(scriptableObject("ConversationUpdateEvent") { + putConst("conversationId", this, event.conversationId) + putConst("conversation",this, event.conversation) + putConst("messages", this, event.messages) + }.cancelableEvent(event)) + } + } + + fun onMessageBuild(callback: (event: ScriptableObject) -> Unit) { + modContext.event.subscribe(BuildMessageEvent::class) { event -> + callback(scriptableObject("BuildMessageEvent") { + putConst("message", this, event.message) + }.cancelableEvent(event)) + } + } + + fun onViewBind(callback: (event: ScriptableObject) -> Unit) { + modContext.event.subscribe(BindViewEvent::class) { + callback(scriptableObject("BindViewEvent") { + putConst("view", this, it.view) + putConst("model", this, it.prevModel) + }.cancelableEvent(it)) + } + } + + fun onSnapInteraction(callback: (event: ScriptableObject) -> Unit) { + modContext.event.subscribe(OnSnapInteractionEvent::class) { event -> + callback(scriptableObject("OnSnapInteractionEvent") { + putConst("interactionType", this, event.interactionType) + putConst("conversationId", this, event.conversationId.toString()) + putConst("messageId", this, event.messageId) + }.cancelableEvent(event)) + } + } + + fun onPreMessageSend(callback: (event: ScriptableObject) -> Unit) { + modContext.event.subscribe(SendMessageWithContentEvent::class) { event -> + callback(scriptableObject("SendMessageWithContentEvent") { + putConst("destinations", this, event.destinations) + putConst("messageContent", this, event.messageContent) + }.cancelableEvent(event)) + } + } + + fun onAddView(callback: (event: ScriptableObject) -> Unit) { + modContext.event.subscribe(AddViewEvent::class) { event -> + callback(scriptableObject("AddViewEvent") { + putConst("parent", this, event.parent) + defineProperty("view", { event.view }, { value -> event.view = value as android.view.View },0) + }.cancelableEvent(event)) + } + } + + override fun getObject() = this +}+ \ No newline at end of file