fix(pin_conversations): set to rule feature

This commit is contained in:
rhunk
2023-09-14 23:49:46 +02:00
parent 2e4b161eeb
commit 5767f93331
3 changed files with 11 additions and 11 deletions

View File

@ -29,7 +29,8 @@ enum class MessagingRuleType(
AUTO_DOWNLOAD("auto_download", true), AUTO_DOWNLOAD("auto_download", true),
STEALTH("stealth", true), STEALTH("stealth", true),
AUTO_SAVE("auto_save", true), AUTO_SAVE("auto_save", true),
HIDE_CHAT_FEED("hide_chat_feed", false); HIDE_CHAT_FEED("hide_chat_feed", false),
PIN_CONVERSATION("pin_conversation", false);
fun translateOptionKey(optionKey: String): String { fun translateOptionKey(optionKey: String): String {
return "rules.properties.${key}.options.${optionKey}" return "rules.properties.${key}.options.${optionKey}"

View File

@ -4,11 +4,8 @@ import me.rhunk.snapenhance.core.messaging.MessagingRuleType
import me.rhunk.snapenhance.core.messaging.RuleState import me.rhunk.snapenhance.core.messaging.RuleState
abstract class MessagingRuleFeature(name: String, val ruleType: MessagingRuleType, loadParams: Int = 0) : Feature(name, loadParams) { abstract class MessagingRuleFeature(name: String, val ruleType: MessagingRuleType, loadParams: Int = 0) : Feature(name, loadParams) {
init {
if (!ruleType.listMode) throw IllegalArgumentException("Rule type must be a list mode")
}
fun getRuleState() = context.config.rules.getRuleState(ruleType) open fun getRuleState() = context.config.rules.getRuleState(ruleType)
fun setState(conversationId: String, state: Boolean) { fun setState(conversationId: String, state: Boolean) {
context.bridgeClient.setRule( context.bridgeClient.setRule(

View File

@ -1,28 +1,28 @@
package me.rhunk.snapenhance.features.impl.ui package me.rhunk.snapenhance.features.impl.ui
import me.rhunk.snapenhance.core.bridge.types.BridgeFileType import me.rhunk.snapenhance.core.messaging.MessagingRuleType
import me.rhunk.snapenhance.core.messaging.RuleState
import me.rhunk.snapenhance.core.util.ktx.getObjectField import me.rhunk.snapenhance.core.util.ktx.getObjectField
import me.rhunk.snapenhance.core.util.ktx.setObjectField import me.rhunk.snapenhance.core.util.ktx.setObjectField
import me.rhunk.snapenhance.data.wrapper.impl.SnapUUID import me.rhunk.snapenhance.data.wrapper.impl.SnapUUID
import me.rhunk.snapenhance.features.BridgeFileFeature
import me.rhunk.snapenhance.features.FeatureLoadParams import me.rhunk.snapenhance.features.FeatureLoadParams
import me.rhunk.snapenhance.features.MessagingRuleFeature
import me.rhunk.snapenhance.hook.HookStage import me.rhunk.snapenhance.hook.HookStage
import me.rhunk.snapenhance.hook.hook import me.rhunk.snapenhance.hook.hook
import me.rhunk.snapenhance.hook.hookConstructor import me.rhunk.snapenhance.hook.hookConstructor
class PinConversations : BridgeFileFeature("PinConversations", BridgeFileType.PINNED_CONVERSATIONS, loadParams = FeatureLoadParams.ACTIVITY_CREATE_SYNC) { class PinConversations : MessagingRuleFeature("PinConversations", MessagingRuleType.PIN_CONVERSATION, loadParams = FeatureLoadParams.ACTIVITY_CREATE_SYNC) {
override fun onActivityCreate() { override fun onActivityCreate() {
context.classCache.feedManager.hook("setPinnedConversationStatus", HookStage.BEFORE) { param -> context.classCache.feedManager.hook("setPinnedConversationStatus", HookStage.BEFORE) { param ->
val conversationUUID = SnapUUID(param.arg(0)) val conversationUUID = SnapUUID(param.arg(0))
val isPinned = param.arg<Any>(1).toString() == "PINNED" val isPinned = param.arg<Any>(1).toString() == "PINNED"
setState(conversationUUID.toString(), isPinned) setState(conversationUUID.toString(), isPinned)
} }
context.classCache.conversation.hookConstructor(HookStage.AFTER) { param -> context.classCache.conversation.hookConstructor(HookStage.AFTER) { param ->
val instance = param.thisObject<Any>() val instance = param.thisObject<Any>()
val conversationUUID = SnapUUID(instance.getObjectField("mConversationId")) val conversationUUID = SnapUUID(instance.getObjectField("mConversationId"))
if (exists(conversationUUID.toString())) { if (getState(conversationUUID.toString())) {
instance.setObjectField("mPinnedTimestampMs", 1L) instance.setObjectField("mPinnedTimestampMs", 1L)
} }
} }
@ -30,10 +30,12 @@ class PinConversations : BridgeFileFeature("PinConversations", BridgeFileType.PI
context.classCache.feedEntry.hookConstructor(HookStage.AFTER) { param -> context.classCache.feedEntry.hookConstructor(HookStage.AFTER) { param ->
val instance = param.thisObject<Any>() val instance = param.thisObject<Any>()
val conversationUUID = SnapUUID(instance.getObjectField("mConversationId") ?: return@hookConstructor) val conversationUUID = SnapUUID(instance.getObjectField("mConversationId") ?: return@hookConstructor)
val isPinned = exists(conversationUUID.toString()) val isPinned = getState(conversationUUID.toString())
if (isPinned) { if (isPinned) {
instance.setObjectField("mPinnedTimestampMs", 1L) instance.setObjectField("mPinnedTimestampMs", 1L)
} }
} }
} }
override fun getRuleState() = RuleState.WHITELIST
} }