mirror of
https://github.com/rhunk/SnapEnhance.git
synced 2025-06-13 05:37:48 +02:00
merge GalleryMediaSendOverride
This commit is contained in:
@ -60,7 +60,7 @@ class Navigation(
|
|||||||
|
|
||||||
NavigationBarItem(
|
NavigationBarItem(
|
||||||
modifier = Modifier
|
modifier = Modifier
|
||||||
.requiredWidth(120.dp)
|
.requiredWidth(75.dp)
|
||||||
.fillMaxHeight(),
|
.fillMaxHeight(),
|
||||||
icon = {
|
icon = {
|
||||||
val iconOffset by animateDpAsState(
|
val iconOffset by animateDpAsState(
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
package me.rhunk.snapenhance
|
package me.rhunk.snapenhance
|
||||||
|
|
||||||
import me.rhunk.snapenhance.core.event.impl.OnSnapInteractionEvent
|
import me.rhunk.snapenhance.core.eventbus.events.impl.OnSnapInteractionEvent
|
||||||
import me.rhunk.snapenhance.core.event.impl.SendMessageWithContentEvent
|
import me.rhunk.snapenhance.core.eventbus.events.impl.SendMessageWithContentEvent
|
||||||
import me.rhunk.snapenhance.data.wrapper.impl.MessageContent
|
import me.rhunk.snapenhance.data.wrapper.impl.MessageContent
|
||||||
import me.rhunk.snapenhance.data.wrapper.impl.SnapUUID
|
import me.rhunk.snapenhance.data.wrapper.impl.SnapUUID
|
||||||
import me.rhunk.snapenhance.hook.HookStage
|
import me.rhunk.snapenhance.hook.HookStage
|
||||||
@ -14,7 +14,7 @@ class EventDispatcher(
|
|||||||
override fun init() {
|
override fun init() {
|
||||||
context.classCache.conversationManager.hook("sendMessageWithContent", HookStage.BEFORE) { param ->
|
context.classCache.conversationManager.hook("sendMessageWithContent", HookStage.BEFORE) { param ->
|
||||||
val messageContent = MessageContent(param.arg(1))
|
val messageContent = MessageContent(param.arg(1))
|
||||||
context.event.post(SendMessageWithContentEvent(messageContent))?.let {
|
context.event.post(SendMessageWithContentEvent(messageContent).apply { adapter = param })?.let {
|
||||||
if (it.canceled) {
|
if (it.canceled) {
|
||||||
param.setResult(null)
|
param.setResult(null)
|
||||||
}
|
}
|
||||||
@ -24,10 +24,12 @@ class EventDispatcher(
|
|||||||
context.classCache.snapManager.hook("onSnapInteraction", HookStage.BEFORE) { param ->
|
context.classCache.snapManager.hook("onSnapInteraction", HookStage.BEFORE) { param ->
|
||||||
val conversationId = SnapUUID(param.arg(1))
|
val conversationId = SnapUUID(param.arg(1))
|
||||||
val messageId = param.arg<Long>(2)
|
val messageId = param.arg<Long>(2)
|
||||||
context.event.post(OnSnapInteractionEvent(
|
context.event.post(
|
||||||
|
OnSnapInteractionEvent(
|
||||||
conversationId = conversationId,
|
conversationId = conversationId,
|
||||||
messageId = messageId
|
messageId = messageId
|
||||||
))?.let {
|
)
|
||||||
|
)?.let {
|
||||||
if (it.canceled) {
|
if (it.canceled) {
|
||||||
param.setResult(null)
|
param.setResult(null)
|
||||||
}
|
}
|
||||||
|
@ -14,7 +14,7 @@ import kotlinx.coroutines.asCoroutineDispatcher
|
|||||||
import me.rhunk.snapenhance.bridge.BridgeClient
|
import me.rhunk.snapenhance.bridge.BridgeClient
|
||||||
import me.rhunk.snapenhance.bridge.wrapper.TranslationWrapper
|
import me.rhunk.snapenhance.bridge.wrapper.TranslationWrapper
|
||||||
import me.rhunk.snapenhance.core.config.ModConfig
|
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.data.MessageSender
|
||||||
import me.rhunk.snapenhance.database.DatabaseAccess
|
import me.rhunk.snapenhance.database.DatabaseAccess
|
||||||
import me.rhunk.snapenhance.features.Feature
|
import me.rhunk.snapenhance.features.Feature
|
||||||
|
@ -19,7 +19,7 @@ class MessagingTweaks : ConfigContainer() {
|
|||||||
"STICKER"
|
"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)
|
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.Logger
|
||||||
import me.rhunk.snapenhance.ModContext
|
import me.rhunk.snapenhance.ModContext
|
||||||
@ -25,9 +25,12 @@ class EventBus(
|
|||||||
subscribers[event]!!.add(listener)
|
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> {
|
val obj = object : IListener<T> {
|
||||||
override fun handle(event: T) {
|
override fun handle(event: T) {
|
||||||
|
if (!filter(event)) return
|
||||||
listener(event)
|
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
|
import me.rhunk.snapenhance.data.wrapper.impl.SnapUUID
|
||||||
|
|
||||||
class OnSnapInteractionEvent(
|
class OnSnapInteractionEvent(
|
||||||
val conversationId: SnapUUID,
|
val conversationId: SnapUUID,
|
||||||
val messageId: Long
|
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
|
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.data.wrapper.impl.SnapUUID
|
||||||
import me.rhunk.snapenhance.features.Feature
|
import me.rhunk.snapenhance.features.Feature
|
||||||
import me.rhunk.snapenhance.features.FeatureLoadParams
|
import me.rhunk.snapenhance.features.FeatureLoadParams
|
||||||
|
@ -1,9 +1,8 @@
|
|||||||
package me.rhunk.snapenhance.features.impl.privacy
|
package me.rhunk.snapenhance.features.impl.privacy
|
||||||
|
|
||||||
import me.rhunk.snapenhance.Logger
|
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.NotificationType
|
||||||
import me.rhunk.snapenhance.data.wrapper.impl.MessageContent
|
|
||||||
import me.rhunk.snapenhance.features.Feature
|
import me.rhunk.snapenhance.features.Feature
|
||||||
import me.rhunk.snapenhance.features.FeatureLoadParams
|
import me.rhunk.snapenhance.features.FeatureLoadParams
|
||||||
import me.rhunk.snapenhance.hook.HookStage
|
import me.rhunk.snapenhance.hook.HookStage
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
package me.rhunk.snapenhance.features.impl.spying
|
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.data.wrapper.impl.SnapUUID
|
||||||
import me.rhunk.snapenhance.features.Feature
|
import me.rhunk.snapenhance.features.Feature
|
||||||
import me.rhunk.snapenhance.features.FeatureLoadParams
|
import me.rhunk.snapenhance.features.FeatureLoadParams
|
||||||
|
@ -1,14 +1,10 @@
|
|||||||
package me.rhunk.snapenhance.features.impl.tweaks
|
package me.rhunk.snapenhance.features.impl.tweaks
|
||||||
|
|
||||||
import android.app.AlertDialog
|
import me.rhunk.snapenhance.core.eventbus.events.impl.SendMessageWithContentEvent
|
||||||
import me.rhunk.snapenhance.config.ConfigProperty
|
|
||||||
import me.rhunk.snapenhance.data.ContentType
|
import me.rhunk.snapenhance.data.ContentType
|
||||||
import me.rhunk.snapenhance.data.MessageSender
|
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.Feature
|
||||||
import me.rhunk.snapenhance.features.FeatureLoadParams
|
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.ui.ViewAppearanceHelper
|
||||||
import me.rhunk.snapenhance.util.protobuf.ProtoReader
|
import me.rhunk.snapenhance.util.protobuf.ProtoReader
|
||||||
|
|
||||||
@ -20,20 +16,21 @@ class GalleryMediaSendOverride : Feature("Gallery Media Send Override", loadPara
|
|||||||
"LIVE_SNAP",
|
"LIVE_SNAP",
|
||||||
"NOTE"
|
"NOTE"
|
||||||
).associateWith {
|
).associateWith {
|
||||||
context.translation[ConfigProperty.GALLERY_MEDIA_SEND_OVERRIDE.getOptionTranslationKey(it)]
|
it
|
||||||
}
|
}
|
||||||
|
|
||||||
Hooker.hook(context.classCache.conversationManager, "sendMessageWithContent", HookStage.BEFORE, {
|
context.event.subscribe(SendMessageWithContentEvent::class, {
|
||||||
context.config.bool(ConfigProperty.GALLERY_MEDIA_SEND_OVERRIDE)
|
context.config.messaging.galleryMediaSendOverride.get()
|
||||||
}) { param ->
|
}) { event ->
|
||||||
val localMessageContent = MessageContent(param.arg(1))
|
|
||||||
if (localMessageContent.contentType != ContentType.EXTERNAL_MEDIA) return@hook
|
val localMessageContent = event.messageContent
|
||||||
|
if (localMessageContent.contentType != ContentType.EXTERNAL_MEDIA) return@subscribe
|
||||||
|
|
||||||
//prevent story replies
|
//prevent story replies
|
||||||
val messageProtoReader = ProtoReader(localMessageContent.content)
|
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 {
|
context.runOnUiThread {
|
||||||
ViewAppearanceHelper.newAlertDialogBuilder(context.mainActivity!!)
|
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)
|
.setNegativeButton(context.translation["button.cancel"], null)
|
||||||
.show()
|
.show()
|
||||||
|
Reference in New Issue
Block a user