commit 83ce06d50d552a5d054a5bf09fadb18a75ccc18d
parent d3d33dea534198024b3e149a05575a9992904fb3
Author: rhunk <101876869+rhunk@users.noreply.github.com>
Date:   Sat, 20 Jan 2024 00:49:04 +0100

fix(core): hide friend feed entry

Diffstat:
Mcore/src/main/kotlin/me/rhunk/snapenhance/core/features/impl/ui/HideFriendFeedEntry.kt | 34++++++++++++++++------------------
1 file changed, 16 insertions(+), 18 deletions(-)

diff --git a/core/src/main/kotlin/me/rhunk/snapenhance/core/features/impl/ui/HideFriendFeedEntry.kt b/core/src/main/kotlin/me/rhunk/snapenhance/core/features/impl/ui/HideFriendFeedEntry.kt @@ -4,34 +4,26 @@ import me.rhunk.snapenhance.common.data.MessagingRuleType import me.rhunk.snapenhance.common.data.RuleState import me.rhunk.snapenhance.core.features.FeatureLoadParams import me.rhunk.snapenhance.core.features.MessagingRuleFeature +import me.rhunk.snapenhance.core.util.dataBuilder import me.rhunk.snapenhance.core.util.hook.HookStage import me.rhunk.snapenhance.core.util.hook.hook import me.rhunk.snapenhance.core.util.ktx.getObjectField -import me.rhunk.snapenhance.core.util.ktx.setObjectField import me.rhunk.snapenhance.core.wrapper.impl.SnapUUID import me.rhunk.snapenhance.mapper.impl.CallbackMapper class HideFriendFeedEntry : MessagingRuleFeature("HideFriendFeedEntry", ruleType = MessagingRuleType.HIDE_FRIEND_FEED, loadParams = FeatureLoadParams.INIT_SYNC) { - private fun createDeletedFeedEntry(conversationId: String) = context.gson.fromJson( - """ - { - "mFeedEntryIdentifier": { - "mConversationId": null - }, - "mReason": "CLEAR_CONVERSATION" - } - """.trimIndent(), - findClass("com.snapchat.client.messaging.DeletedFeedEntry") - ).also { - it.getObjectField("mFeedEntryIdentifier")?.setObjectField("mConversationId", SnapUUID.fromString(conversationId).instanceNonNull()) + private fun createDeletedFeedEntry(conversationIdInstance: Any) = findClass("com.snapchat.client.messaging.DeletedFeedEntry").dataBuilder { + from("mFeedEntryIdentifier") { + set("mConversationId", conversationIdInstance) + } + set("mReason", "CLEAR_CONVERSATION") } private fun filterFriendFeed(entries: ArrayList<Any>, deletedEntries: ArrayList<Any>? = null) { entries.removeIf { feedEntry -> - val conversationId = SnapUUID(feedEntry.getObjectField("mConversationId")).toString() - - if (canUseRule(conversationId)) { - deletedEntries?.add(createDeletedFeedEntry(conversationId)) + val conversationIdInstance = feedEntry.getObjectField("mConversationId") ?: return@removeIf false + if (canUseRule(SnapUUID(conversationIdInstance).toString())) { + deletedEntries?.add(createDeletedFeedEntry(conversationIdInstance)!!) true } else { false @@ -44,10 +36,12 @@ class HideFriendFeedEntry : MessagingRuleFeature("HideFriendFeedEntry", ruleType context.mappings.useMapper(CallbackMapper::class) { arrayOf( + "FetchAndSyncFeedWithConversationIdsCallback" to "onFetchAndSyncFeedComplete", + "FetchFeedCallback" to "onFetchFeedComplete", + "FetchFeedEntriesCallback" to "onFetchFeedEntriesComplete", "QueryFeedCallback" to "onQueryFeedComplete", "FeedManagerDelegate" to "onFeedEntriesUpdated", "FeedManagerDelegate" to "onInternalSyncFeed", - "SyncFeedCallback" to "onSyncFeedComplete", ).forEach { (callbackName, methodName) -> findClass(callbacks.get()!![callbackName] ?: return@forEach).hook(methodName, HookStage.BEFORE) { param -> filterFriendFeed(param.arg(0)) @@ -66,6 +60,10 @@ class HideFriendFeedEntry : MessagingRuleFeature("HideFriendFeedEntry", ruleType param.setArg(4, true) } } + callbacks.getClass("SyncFeedCallback") + ?.hook("onSyncFeedComplete", HookStage.BEFORE) { param -> + filterFriendFeed(param.arg(0), param.arg(2)) + } } }