mirror of
https://github.com/rhunk/SnapEnhance.git
synced 2025-06-12 05:07:46 +02:00
merge GalleryMediaSendOverride
This commit is contained in:
@ -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)
|
||||
}
|
||||
|
@ -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
|
||||
|
@ -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)
|
||||
|
||||
}
|
@ -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()
|
@ -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)
|
||||
}
|
||||
}
|
@ -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
|
||||
}
|
@ -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()
|
@ -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()
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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()
|
||||
|
Reference in New Issue
Block a user