use reflection of Message class

This commit is contained in:
rhunk
2023-05-15 18:32:53 +02:00
parent 4ac036273b
commit ebf796c23b
2 changed files with 8 additions and 4 deletions

View File

@@ -1,5 +1,6 @@
package me.rhunk.snapenhance.data.wrapper.impl
import me.rhunk.snapenhance.data.MessageState
import me.rhunk.snapenhance.data.wrapper.AbstractWrapper
import me.rhunk.snapenhance.util.getObjectField
@@ -9,4 +10,5 @@ class Message(obj: Any) : AbstractWrapper(obj) {
val messageContent get() = MessageContent(instance.getObjectField("mMessageContent"))
val messageDescriptor get() = MessageDescriptor(instance.getObjectField("mDescriptor"))
val messageMetadata get() = MessageMetadata(instance.getObjectField("mMetadata"))
val messageState get() = getEnumValue("mMessageState", MessageState.COMMITTED)
}

View File

@@ -4,6 +4,7 @@ import com.google.gson.JsonParser
import me.rhunk.snapenhance.config.ConfigProperty
import me.rhunk.snapenhance.data.ContentType
import me.rhunk.snapenhance.data.MessageState
import me.rhunk.snapenhance.data.wrapper.impl.Message
import me.rhunk.snapenhance.features.Feature
import me.rhunk.snapenhance.features.FeatureLoadParams
import me.rhunk.snapenhance.hook.HookStage
@@ -16,14 +17,15 @@ class MessageLogger : Feature("MessageLogger", loadParams = FeatureLoadParams.IN
fun isMessageRemoved(messageId: Long) = removedMessages.contains(messageId)
//FIXME: message disappears when the conversation is set to delete on view
override fun init() {
Hooker.hookConstructor(context.classCache.message, HookStage.AFTER, {
context.config.bool(ConfigProperty.MESSAGE_LOGGER)
}) {
val message = it.thisObject<Any>()
val messageId = message.getObjectField("mDescriptor").getObjectField("mMessageId") as Long
val contentType = ContentType.valueOf(message.getObjectField("mMessageContent").getObjectField("mContentType").toString())
val messageState = MessageState.valueOf(message.getObjectField("mState").toString())
val message = Message(it.thisObject())
val messageId = message.messageDescriptor.messageId
val contentType = message.messageContent.contentType
val messageState = message.messageState
if (messageState != MessageState.COMMITTED) return@hookConstructor