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:
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