merge GalleryMediaSendOverride

This commit is contained in:
rhunk
2023-08-02 09:35:02 +02:00
parent e360011b7b
commit c5def2e69d
13 changed files with 48 additions and 39 deletions

View File

@ -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<Long>(2)
context.event.post(OnSnapInteractionEvent(
context.event.post(
OnSnapInteractionEvent(
conversationId = conversationId,
messageId = messageId
))?.let {
)
)?.let {
if (it.canceled) {
param.setResult(null)
}

View File

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

View File

@ -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)
}

View File

@ -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()

View File

@ -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 <T : Event> subscribe(event: KClass<T>, crossinline listener: (T) -> Unit): () -> Unit {
inline fun <T : Event> subscribe(event: KClass<T>, crossinline listener: (T) -> Unit) = subscribe(event, { true }, listener)
inline fun <T : Event> subscribe(event: KClass<T>, crossinline filter: (T) -> Boolean, crossinline listener: (T) -> Unit): () -> Unit {
val obj = object : IListener<T> {
override fun handle(event: T) {
if (!filter(event)) return
listener(event)
}
}

View File

@ -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
}

View File

@ -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()
) : AbstractHookEvent()

View File

@ -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()

View File

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

View File

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

View File

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

View File

@ -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()