commit 053b56bb3dc60a3df2feae3cb5e6c336934b16b4
parent d217e2e86d78a23c9b67857ad86733ef7074a5e6
Author: rhunk <101876869+rhunk@users.noreply.github.com>
Date: Sat, 1 Feb 2025 11:44:16 +0100
feat(core): hide friends
Signed-off-by: rhunk <101876869+rhunk@users.noreply.github.com>
Diffstat:
3 files changed, 37 insertions(+), 29 deletions(-)
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
@@ -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
@@ -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<String>(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
@@ -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<String>(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