From c5def2e69db6aaa63903932340741af0ee9fa4fc Mon Sep 17 00:00:00 2001 From: rhunk <101876869+rhunk@users.noreply.github.com> Date: Wed, 2 Aug 2023 09:35:02 +0200 Subject: [PATCH] merge GalleryMediaSendOverride --- .../rhunk/snapenhance/manager/Navigation.kt | 2 +- .../me/rhunk/snapenhance/EventDispatcher.kt | 12 +++++---- .../kotlin/me/rhunk/snapenhance/ModContext.kt | 2 +- .../core/config/impl/MessagingTweaks.kt | 2 +- .../event/impl/SendMessageWithContentEvent.kt | 8 ------ .../core/{event => eventbus}/EventBus.kt | 7 ++++-- .../core/eventbus/events/AbstractHookEvent.kt | 8 ++++++ .../events}/impl/OnSnapInteractionEvent.kt | 6 ++--- .../impl/SendMessageWithContentEvent.kt | 8 ++++++ .../snapenhance/features/impl/Messaging.kt | 2 +- .../impl/privacy/PreventMessageSending.kt | 3 +-- .../impl/spying/PreventReadReceipts.kt | 2 +- .../impl/tweaks/GalleryMediaSendOverride.kt | 25 ++++++++----------- 13 files changed, 48 insertions(+), 39 deletions(-) delete mode 100644 core/src/main/kotlin/me/rhunk/snapenhance/core/event/impl/SendMessageWithContentEvent.kt rename core/src/main/kotlin/me/rhunk/snapenhance/core/{event => eventbus}/EventBus.kt (85%) create mode 100644 core/src/main/kotlin/me/rhunk/snapenhance/core/eventbus/events/AbstractHookEvent.kt rename core/src/main/kotlin/me/rhunk/snapenhance/core/{event => eventbus/events}/impl/OnSnapInteractionEvent.kt (50%) create mode 100644 core/src/main/kotlin/me/rhunk/snapenhance/core/eventbus/events/impl/SendMessageWithContentEvent.kt diff --git a/app/src/main/kotlin/me/rhunk/snapenhance/manager/Navigation.kt b/app/src/main/kotlin/me/rhunk/snapenhance/manager/Navigation.kt index 064bf731..e432aa53 100644 --- a/app/src/main/kotlin/me/rhunk/snapenhance/manager/Navigation.kt +++ b/app/src/main/kotlin/me/rhunk/snapenhance/manager/Navigation.kt @@ -60,7 +60,7 @@ class Navigation( NavigationBarItem( modifier = Modifier - .requiredWidth(120.dp) + .requiredWidth(75.dp) .fillMaxHeight(), icon = { val iconOffset by animateDpAsState( diff --git a/core/src/main/kotlin/me/rhunk/snapenhance/EventDispatcher.kt b/core/src/main/kotlin/me/rhunk/snapenhance/EventDispatcher.kt index 862ff28c..ebe8a506 100644 --- a/core/src/main/kotlin/me/rhunk/snapenhance/EventDispatcher.kt +++ b/core/src/main/kotlin/me/rhunk/snapenhance/EventDispatcher.kt @@ -1,7 +1,7 @@ package me.rhunk.snapenhance -import me.rhunk.snapenhance.core.event.impl.OnSnapInteractionEvent -import me.rhunk.snapenhance.core.event.impl.SendMessageWithContentEvent +import me.rhunk.snapenhance.core.eventbus.events.impl.OnSnapInteractionEvent +import me.rhunk.snapenhance.core.eventbus.events.impl.SendMessageWithContentEvent import me.rhunk.snapenhance.data.wrapper.impl.MessageContent import me.rhunk.snapenhance.data.wrapper.impl.SnapUUID import me.rhunk.snapenhance.hook.HookStage @@ -14,7 +14,7 @@ class EventDispatcher( override fun init() { context.classCache.conversationManager.hook("sendMessageWithContent", HookStage.BEFORE) { param -> val messageContent = MessageContent(param.arg(1)) - context.event.post(SendMessageWithContentEvent(messageContent))?.let { + context.event.post(SendMessageWithContentEvent(messageContent).apply { adapter = param })?.let { if (it.canceled) { param.setResult(null) } @@ -24,10 +24,12 @@ class EventDispatcher( context.classCache.snapManager.hook("onSnapInteraction", HookStage.BEFORE) { param -> val conversationId = SnapUUID(param.arg(1)) val messageId = param.arg(2) - context.event.post(OnSnapInteractionEvent( + context.event.post( + OnSnapInteractionEvent( conversationId = conversationId, messageId = messageId - ))?.let { + ) + )?.let { if (it.canceled) { param.setResult(null) } diff --git a/core/src/main/kotlin/me/rhunk/snapenhance/ModContext.kt b/core/src/main/kotlin/me/rhunk/snapenhance/ModContext.kt index a7253739..3b9b1fe7 100644 --- a/core/src/main/kotlin/me/rhunk/snapenhance/ModContext.kt +++ b/core/src/main/kotlin/me/rhunk/snapenhance/ModContext.kt @@ -14,7 +14,7 @@ import kotlinx.coroutines.asCoroutineDispatcher import me.rhunk.snapenhance.bridge.BridgeClient import me.rhunk.snapenhance.bridge.wrapper.TranslationWrapper import me.rhunk.snapenhance.core.config.ModConfig -import me.rhunk.snapenhance.core.event.EventBus +import me.rhunk.snapenhance.core.eventbus.EventBus import me.rhunk.snapenhance.data.MessageSender import me.rhunk.snapenhance.database.DatabaseAccess import me.rhunk.snapenhance.features.Feature diff --git a/core/src/main/kotlin/me/rhunk/snapenhance/core/config/impl/MessagingTweaks.kt b/core/src/main/kotlin/me/rhunk/snapenhance/core/config/impl/MessagingTweaks.kt index 5530525f..a559e99a 100644 --- a/core/src/main/kotlin/me/rhunk/snapenhance/core/config/impl/MessagingTweaks.kt +++ b/core/src/main/kotlin/me/rhunk/snapenhance/core/config/impl/MessagingTweaks.kt @@ -19,7 +19,7 @@ class MessagingTweaks : ConfigContainer() { "STICKER" ) - val galleryMediaSendOverride = unique("gallery_media_send_override", "NOTE", "SNAP", "LIVE_SNAP") + val galleryMediaSendOverride = boolean("gallery_media_send_override") val messagePreviewLength = integer("message_preview_length", defaultValue = 20) } \ No newline at end of file diff --git a/core/src/main/kotlin/me/rhunk/snapenhance/core/event/impl/SendMessageWithContentEvent.kt b/core/src/main/kotlin/me/rhunk/snapenhance/core/event/impl/SendMessageWithContentEvent.kt deleted file mode 100644 index c2029283..00000000 --- a/core/src/main/kotlin/me/rhunk/snapenhance/core/event/impl/SendMessageWithContentEvent.kt +++ /dev/null @@ -1,8 +0,0 @@ -package me.rhunk.snapenhance.core.event.impl - -import me.rhunk.snapenhance.core.event.Event -import me.rhunk.snapenhance.data.wrapper.impl.MessageContent - -class SendMessageWithContentEvent( - val messageContent: MessageContent -) : Event() \ No newline at end of file diff --git a/core/src/main/kotlin/me/rhunk/snapenhance/core/event/EventBus.kt b/core/src/main/kotlin/me/rhunk/snapenhance/core/eventbus/EventBus.kt similarity index 85% rename from core/src/main/kotlin/me/rhunk/snapenhance/core/event/EventBus.kt rename to core/src/main/kotlin/me/rhunk/snapenhance/core/eventbus/EventBus.kt index 7c171b53..9358ec3e 100644 --- a/core/src/main/kotlin/me/rhunk/snapenhance/core/event/EventBus.kt +++ b/core/src/main/kotlin/me/rhunk/snapenhance/core/eventbus/EventBus.kt @@ -1,4 +1,4 @@ -package me.rhunk.snapenhance.core.event +package me.rhunk.snapenhance.core.eventbus import me.rhunk.snapenhance.Logger import me.rhunk.snapenhance.ModContext @@ -25,9 +25,12 @@ class EventBus( subscribers[event]!!.add(listener) } - inline fun subscribe(event: KClass, crossinline listener: (T) -> Unit): () -> Unit { + inline fun subscribe(event: KClass, crossinline listener: (T) -> Unit) = subscribe(event, { true }, listener) + + inline fun subscribe(event: KClass, crossinline filter: (T) -> Boolean, crossinline listener: (T) -> Unit): () -> Unit { val obj = object : IListener { override fun handle(event: T) { + if (!filter(event)) return listener(event) } } diff --git a/core/src/main/kotlin/me/rhunk/snapenhance/core/eventbus/events/AbstractHookEvent.kt b/core/src/main/kotlin/me/rhunk/snapenhance/core/eventbus/events/AbstractHookEvent.kt new file mode 100644 index 00000000..41465d57 --- /dev/null +++ b/core/src/main/kotlin/me/rhunk/snapenhance/core/eventbus/events/AbstractHookEvent.kt @@ -0,0 +1,8 @@ +package me.rhunk.snapenhance.core.eventbus.events + +import me.rhunk.snapenhance.core.eventbus.Event +import me.rhunk.snapenhance.hook.HookAdapter + +abstract class AbstractHookEvent : Event() { + lateinit var adapter: HookAdapter +} \ No newline at end of file diff --git a/core/src/main/kotlin/me/rhunk/snapenhance/core/event/impl/OnSnapInteractionEvent.kt b/core/src/main/kotlin/me/rhunk/snapenhance/core/eventbus/events/impl/OnSnapInteractionEvent.kt similarity index 50% rename from core/src/main/kotlin/me/rhunk/snapenhance/core/event/impl/OnSnapInteractionEvent.kt rename to core/src/main/kotlin/me/rhunk/snapenhance/core/eventbus/events/impl/OnSnapInteractionEvent.kt index 91a3f333..ebdaf4c8 100644 --- a/core/src/main/kotlin/me/rhunk/snapenhance/core/event/impl/OnSnapInteractionEvent.kt +++ b/core/src/main/kotlin/me/rhunk/snapenhance/core/eventbus/events/impl/OnSnapInteractionEvent.kt @@ -1,9 +1,9 @@ -package me.rhunk.snapenhance.core.event.impl +package me.rhunk.snapenhance.core.eventbus.events.impl -import me.rhunk.snapenhance.core.event.Event +import me.rhunk.snapenhance.core.eventbus.events.AbstractHookEvent import me.rhunk.snapenhance.data.wrapper.impl.SnapUUID class OnSnapInteractionEvent( val conversationId: SnapUUID, val messageId: Long -) : Event() \ No newline at end of file +) : AbstractHookEvent() \ No newline at end of file diff --git a/core/src/main/kotlin/me/rhunk/snapenhance/core/eventbus/events/impl/SendMessageWithContentEvent.kt b/core/src/main/kotlin/me/rhunk/snapenhance/core/eventbus/events/impl/SendMessageWithContentEvent.kt new file mode 100644 index 00000000..d2cb06f6 --- /dev/null +++ b/core/src/main/kotlin/me/rhunk/snapenhance/core/eventbus/events/impl/SendMessageWithContentEvent.kt @@ -0,0 +1,8 @@ +package me.rhunk.snapenhance.core.eventbus.events.impl + +import me.rhunk.snapenhance.core.eventbus.events.AbstractHookEvent +import me.rhunk.snapenhance.data.wrapper.impl.MessageContent + +class SendMessageWithContentEvent( + val messageContent: MessageContent +) : AbstractHookEvent() \ No newline at end of file diff --git a/core/src/main/kotlin/me/rhunk/snapenhance/features/impl/Messaging.kt b/core/src/main/kotlin/me/rhunk/snapenhance/features/impl/Messaging.kt index ca98304c..d00cce3e 100644 --- a/core/src/main/kotlin/me/rhunk/snapenhance/features/impl/Messaging.kt +++ b/core/src/main/kotlin/me/rhunk/snapenhance/features/impl/Messaging.kt @@ -1,6 +1,6 @@ package me.rhunk.snapenhance.features.impl -import me.rhunk.snapenhance.core.event.impl.OnSnapInteractionEvent +import me.rhunk.snapenhance.core.eventbus.events.impl.OnSnapInteractionEvent import me.rhunk.snapenhance.data.wrapper.impl.SnapUUID import me.rhunk.snapenhance.features.Feature import me.rhunk.snapenhance.features.FeatureLoadParams diff --git a/core/src/main/kotlin/me/rhunk/snapenhance/features/impl/privacy/PreventMessageSending.kt b/core/src/main/kotlin/me/rhunk/snapenhance/features/impl/privacy/PreventMessageSending.kt index 409ef0af..78dc70f6 100644 --- a/core/src/main/kotlin/me/rhunk/snapenhance/features/impl/privacy/PreventMessageSending.kt +++ b/core/src/main/kotlin/me/rhunk/snapenhance/features/impl/privacy/PreventMessageSending.kt @@ -1,9 +1,8 @@ package me.rhunk.snapenhance.features.impl.privacy import me.rhunk.snapenhance.Logger -import me.rhunk.snapenhance.core.event.impl.SendMessageWithContentEvent +import me.rhunk.snapenhance.core.eventbus.events.impl.SendMessageWithContentEvent import me.rhunk.snapenhance.data.NotificationType -import me.rhunk.snapenhance.data.wrapper.impl.MessageContent import me.rhunk.snapenhance.features.Feature import me.rhunk.snapenhance.features.FeatureLoadParams import me.rhunk.snapenhance.hook.HookStage diff --git a/core/src/main/kotlin/me/rhunk/snapenhance/features/impl/spying/PreventReadReceipts.kt b/core/src/main/kotlin/me/rhunk/snapenhance/features/impl/spying/PreventReadReceipts.kt index 11731d42..a26319fa 100644 --- a/core/src/main/kotlin/me/rhunk/snapenhance/features/impl/spying/PreventReadReceipts.kt +++ b/core/src/main/kotlin/me/rhunk/snapenhance/features/impl/spying/PreventReadReceipts.kt @@ -1,6 +1,6 @@ package me.rhunk.snapenhance.features.impl.spying -import me.rhunk.snapenhance.core.event.impl.OnSnapInteractionEvent +import me.rhunk.snapenhance.core.eventbus.events.impl.OnSnapInteractionEvent import me.rhunk.snapenhance.data.wrapper.impl.SnapUUID import me.rhunk.snapenhance.features.Feature import me.rhunk.snapenhance.features.FeatureLoadParams diff --git a/core/src/main/kotlin/me/rhunk/snapenhance/features/impl/tweaks/GalleryMediaSendOverride.kt b/core/src/main/kotlin/me/rhunk/snapenhance/features/impl/tweaks/GalleryMediaSendOverride.kt index 344162fc..23cd4810 100644 --- a/core/src/main/kotlin/me/rhunk/snapenhance/features/impl/tweaks/GalleryMediaSendOverride.kt +++ b/core/src/main/kotlin/me/rhunk/snapenhance/features/impl/tweaks/GalleryMediaSendOverride.kt @@ -1,14 +1,10 @@ package me.rhunk.snapenhance.features.impl.tweaks -import android.app.AlertDialog -import me.rhunk.snapenhance.config.ConfigProperty +import me.rhunk.snapenhance.core.eventbus.events.impl.SendMessageWithContentEvent import me.rhunk.snapenhance.data.ContentType import me.rhunk.snapenhance.data.MessageSender -import me.rhunk.snapenhance.data.wrapper.impl.MessageContent import me.rhunk.snapenhance.features.Feature import me.rhunk.snapenhance.features.FeatureLoadParams -import me.rhunk.snapenhance.hook.HookStage -import me.rhunk.snapenhance.hook.Hooker import me.rhunk.snapenhance.ui.ViewAppearanceHelper import me.rhunk.snapenhance.util.protobuf.ProtoReader @@ -20,20 +16,21 @@ class GalleryMediaSendOverride : Feature("Gallery Media Send Override", loadPara "LIVE_SNAP", "NOTE" ).associateWith { - context.translation[ConfigProperty.GALLERY_MEDIA_SEND_OVERRIDE.getOptionTranslationKey(it)] + it } - Hooker.hook(context.classCache.conversationManager, "sendMessageWithContent", HookStage.BEFORE, { - context.config.bool(ConfigProperty.GALLERY_MEDIA_SEND_OVERRIDE) - }) { param -> - val localMessageContent = MessageContent(param.arg(1)) - if (localMessageContent.contentType != ContentType.EXTERNAL_MEDIA) return@hook + context.event.subscribe(SendMessageWithContentEvent::class, { + context.config.messaging.galleryMediaSendOverride.get() + }) { event -> + + val localMessageContent = event.messageContent + if (localMessageContent.contentType != ContentType.EXTERNAL_MEDIA) return@subscribe //prevent story replies val messageProtoReader = ProtoReader(localMessageContent.content) - if (messageProtoReader.exists(7)) return@hook + if (messageProtoReader.exists(7)) return@subscribe - param.setResult(null) + event.canceled = true context.runOnUiThread { ViewAppearanceHelper.newAlertDialogBuilder(context.mainActivity!!) @@ -66,7 +63,7 @@ class GalleryMediaSendOverride : Feature("Gallery Media Send Override", loadPara } } - param.invokeOriginal() + event.adapter.invokeOriginal() } .setNegativeButton(context.translation["button.cancel"], null) .show()