From 053b56bb3dc60a3df2feae3cb5e6c336934b16b4 Mon Sep 17 00:00:00 2001 From: rhunk <101876869+rhunk@users.noreply.github.com> Date: Sat, 1 Feb 2025 11:44:16 +0100 Subject: [PATCH] feat(core): hide friends Signed-off-by: rhunk <101876869+rhunk@users.noreply.github.com> --- .../core/features/FeatureManager.kt | 2 +- .../features/impl/tweaks/RequerySqlite.kt | 35 +++++++++++++++++++ .../impl/ui/HideQuickAddSuggestions.kt | 27 -------------- 3 files changed, 36 insertions(+), 28 deletions(-) create mode 100644 core/src/main/kotlin/me/rhunk/snapenhance/core/features/impl/tweaks/RequerySqlite.kt delete mode 100644 core/src/main/kotlin/me/rhunk/snapenhance/core/features/impl/ui/HideQuickAddSuggestions.kt diff --git a/core/src/main/kotlin/me/rhunk/snapenhance/core/features/FeatureManager.kt b/core/src/main/kotlin/me/rhunk/snapenhance/core/features/FeatureManager.kt index fc1d82c9..b98afcb2 100644 --- a/core/src/main/kotlin/me/rhunk/snapenhance/core/features/FeatureManager.kt +++ b/core/src/main/kotlin/me/rhunk/snapenhance/core/features/FeatureManager.kt @@ -105,7 +105,7 @@ class FeatureManager( FriendFeedMessagePreview(), HideStreakRestore(), HideFriendFeedEntry(), - HideQuickAddSuggestions(), + RequerySqlite(), CallButtonsOverride(), SnapPreview(), BypassScreenshotDetection(), diff --git a/core/src/main/kotlin/me/rhunk/snapenhance/core/features/impl/tweaks/RequerySqlite.kt b/core/src/main/kotlin/me/rhunk/snapenhance/core/features/impl/tweaks/RequerySqlite.kt new file mode 100644 index 00000000..709af7be --- /dev/null +++ b/core/src/main/kotlin/me/rhunk/snapenhance/core/features/impl/tweaks/RequerySqlite.kt @@ -0,0 +1,35 @@ +package me.rhunk.snapenhance.core.features.impl.tweaks + +import me.rhunk.snapenhance.common.data.MessagingRuleType +import me.rhunk.snapenhance.core.features.Feature +import me.rhunk.snapenhance.core.util.hook.HookStage +import me.rhunk.snapenhance.core.util.hook.hook + +class RequerySqlite : Feature("Requery Sqlite") { + override fun init() { + val hideQuickAddSuggestions = context.config.userInterface.hideQuickAddSuggestions.get() + val hideFriendFeedEntry = context.config.userInterface.hideFriendFeedEntry.get() + + if (!hideQuickAddSuggestions && !hideFriendFeedEntry) return + + findClass("io.requery.android.database.sqlite.SQLiteDatabase").hook("rawQueryWithFactory", HookStage.BEFORE) { param -> + var sqlRequest = param.argNullable(1) ?: return@hook + + fun patchRequest(condition: String) { + sqlRequest.lastIndexOf("WHERE").takeIf { it != -1 }?.let { + sqlRequest = sqlRequest.substring(0, it + 5) + " $condition AND " + sqlRequest.substring(it + 5) + param.setArg(1, sqlRequest) + } + } + + if (hideQuickAddSuggestions && sqlRequest.contains("SuggestedFriendPlacement")) { + patchRequest("0 = 1") + } + + if (hideFriendFeedEntry && sqlRequest.startsWith("SELECT") && (sqlRequest.contains("FriendWithUsername")) && sqlRequest.contains("userId")) { + val ids = context.bridgeClient.getRuleIds(MessagingRuleType.HIDE_FRIEND_FEED).takeIf { it.isNotEmpty() } ?: return@hook + patchRequest(ids.joinToString(" AND ") { "${if (sqlRequest.contains("Friend.userId")) "Friend.userId" else "userId "} != '$it'" }) + } + } + } +} \ No newline at end of file diff --git a/core/src/main/kotlin/me/rhunk/snapenhance/core/features/impl/ui/HideQuickAddSuggestions.kt b/core/src/main/kotlin/me/rhunk/snapenhance/core/features/impl/ui/HideQuickAddSuggestions.kt deleted file mode 100644 index c36f1ce7..00000000 --- a/core/src/main/kotlin/me/rhunk/snapenhance/core/features/impl/ui/HideQuickAddSuggestions.kt +++ /dev/null @@ -1,27 +0,0 @@ -package me.rhunk.snapenhance.core.features.impl.ui - -import me.rhunk.snapenhance.core.features.Feature -import me.rhunk.snapenhance.core.util.hook.HookStage -import me.rhunk.snapenhance.core.util.hook.hook - -class HideQuickAddSuggestions : Feature("Hide Quick Add Suggestions") { - override fun init() { - if (!context.config.userInterface.hideQuickAddSuggestions.get()) return - - context.androidContext.classLoader.loadClass("io.requery.android.database.sqlite.SQLiteDatabase") - .hook("rawQueryWithFactory", HookStage.BEFORE) { param -> - var sqlRequest = param.arg(1) - - fun patchRequest() { - sqlRequest.lastIndexOf("WHERE").takeIf { it != -1 }?.let { - sqlRequest = sqlRequest.substring(0, it + 5) + " 0 = 1 AND " + sqlRequest.substring(it + 5) - param.setArg(1, sqlRequest) - } - } - - if (sqlRequest.contains("SuggestedFriendPlacement")) { - patchRequest() - } - } - } -} \ No newline at end of file