commit 5767f9333132cf9b91007546a8ff88334bf481aa
parent 2e4b161eebeb229c732208da2f8faebc1b72f63f
Author: rhunk <101876869+rhunk@users.noreply.github.com>
Date:   Thu, 14 Sep 2023 23:49:46 +0200

fix(pin_conversations): set to rule feature

Diffstat:
Mcore/src/main/kotlin/me/rhunk/snapenhance/core/messaging/MessagingCoreObjects.kt | 3++-
Mcore/src/main/kotlin/me/rhunk/snapenhance/features/MessagingRuleFeature.kt | 5+----
Mcore/src/main/kotlin/me/rhunk/snapenhance/features/impl/ui/PinConversations.kt | 14++++++++------
3 files changed, 11 insertions(+), 11 deletions(-)

diff --git a/core/src/main/kotlin/me/rhunk/snapenhance/core/messaging/MessagingCoreObjects.kt b/core/src/main/kotlin/me/rhunk/snapenhance/core/messaging/MessagingCoreObjects.kt @@ -29,7 +29,8 @@ enum class MessagingRuleType( AUTO_DOWNLOAD("auto_download", true), STEALTH("stealth", 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 { return "rules.properties.${key}.options.${optionKey}" diff --git a/core/src/main/kotlin/me/rhunk/snapenhance/features/MessagingRuleFeature.kt b/core/src/main/kotlin/me/rhunk/snapenhance/features/MessagingRuleFeature.kt @@ -4,11 +4,8 @@ import me.rhunk.snapenhance.core.messaging.MessagingRuleType import me.rhunk.snapenhance.core.messaging.RuleState 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) { context.bridgeClient.setRule( diff --git a/core/src/main/kotlin/me/rhunk/snapenhance/features/impl/ui/PinConversations.kt b/core/src/main/kotlin/me/rhunk/snapenhance/features/impl/ui/PinConversations.kt @@ -1,28 +1,28 @@ 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.setObjectField 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.MessagingRuleFeature import me.rhunk.snapenhance.hook.HookStage import me.rhunk.snapenhance.hook.hook 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() { context.classCache.feedManager.hook("setPinnedConversationStatus", HookStage.BEFORE) { param -> val conversationUUID = SnapUUID(param.arg(0)) val isPinned = param.arg<Any>(1).toString() == "PINNED" - setState(conversationUUID.toString(), isPinned) } context.classCache.conversation.hookConstructor(HookStage.AFTER) { param -> val instance = param.thisObject<Any>() val conversationUUID = SnapUUID(instance.getObjectField("mConversationId")) - if (exists(conversationUUID.toString())) { + if (getState(conversationUUID.toString())) { instance.setObjectField("mPinnedTimestampMs", 1L) } } @@ -30,10 +30,12 @@ class PinConversations : BridgeFileFeature("PinConversations", BridgeFileType.PI context.classCache.feedEntry.hookConstructor(HookStage.AFTER) { param -> val instance = param.thisObject<Any>() val conversationUUID = SnapUUID(instance.getObjectField("mConversationId") ?: return@hookConstructor) - val isPinned = exists(conversationUUID.toString()) + val isPinned = getState(conversationUUID.toString()) if (isPinned) { instance.setObjectField("mPinnedTimestampMs", 1L) } } } + + override fun getRuleState() = RuleState.WHITELIST } \ No newline at end of file