commit 600dec7fc64a7d9a3d448d8ce759279c34aef1aa parent 24fc945f1aeefd4344125ccb8c2ad70713e80814 Author: rhunk <101876869+rhunk@users.noreply.github.com> Date: Fri, 1 Sep 2023 19:19:25 +0200 bridge getRulesIds Diffstat:
6 files changed, 28 insertions(+), 5 deletions(-)
diff --git a/app/src/main/kotlin/me/rhunk/snapenhance/bridge/BridgeService.kt b/app/src/main/kotlin/me/rhunk/snapenhance/bridge/BridgeService.kt @@ -128,6 +128,10 @@ class BridgeService : Service() { return remoteSideContext.modDatabase.getRules(uuid).map { it.key } } + override fun getRuleIds(type: String): MutableList<String> { + return remoteSideContext.modDatabase.getRuleIds(type) + } + override fun setRule(uuid: String, rule: String, state: Boolean) { remoteSideContext.modDatabase.setRule(uuid, rule, state) } diff --git a/app/src/main/kotlin/me/rhunk/snapenhance/messaging/ModDatabase.kt b/app/src/main/kotlin/me/rhunk/snapenhance/messaging/ModDatabase.kt @@ -241,4 +241,14 @@ class ModDatabase( )) } } + + fun getRuleIds(type: String): MutableList<String> { + return database.rawQuery("SELECT targetUuid FROM rules WHERE type = ?", arrayOf(type)).use { cursor -> + val ruleIds = mutableListOf<String>() + while (cursor.moveToNext()) { + ruleIds.add(cursor.getStringOrNull("targetUuid")!!) + } + ruleIds + } + } } \ No newline at end of file diff --git a/core/src/main/aidl/me/rhunk/snapenhance/bridge/BridgeInterface.aidl b/core/src/main/aidl/me/rhunk/snapenhance/bridge/BridgeInterface.aidl @@ -61,6 +61,13 @@ interface BridgeInterface { List<String> getRules(String uuid); /** + * Get all ids for a specific rule + * @param type rule type (MessagingRuleType) + * @return list of ids + */ + List<String> getRuleIds(String type); + + /** * Update rule for a giver user or conversation * * @param type rule type (MessagingRuleType) diff --git a/core/src/main/kotlin/me/rhunk/snapenhance/core/bridge/BridgeClient.kt b/core/src/main/kotlin/me/rhunk/snapenhance/core/bridge/BridgeClient.kt @@ -142,6 +142,10 @@ class BridgeClient( return service.getRules(targetUuid).map { MessagingRuleType.getByName(it) } } + fun getRuleIds(ruleType: MessagingRuleType): List<String> { + return service.getRuleIds(ruleType.key) + } + fun setRule(targetUuid: String, type: MessagingRuleType, state: Boolean) = service.setRule(targetUuid, type.key, state) } 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 @@ -29,7 +29,7 @@ class PinConversations : BridgeFileFeature("PinConversations", BridgeFileType.PI context.classCache.feedEntry.hookConstructor(HookStage.AFTER) { param -> val instance = param.thisObject<Any>() - val conversationUUID = SnapUUID(instance.getObjectField("mConversationId")) + val conversationUUID = SnapUUID(instance.getObjectField("mConversationId") ?: return@hookConstructor) val isPinned = exists(conversationUUID.toString()) if (isPinned) { instance.setObjectField("mPinnedTimestampMs", 1L) diff --git a/mapper/src/main/kotlin/me/rhunk/snapmapper/impl/CallbackMapper.kt b/mapper/src/main/kotlin/me/rhunk/snapmapper/impl/CallbackMapper.kt @@ -12,12 +12,10 @@ class CallbackMapper : AbstractClassMapper() { if (clazz.superclass == null) return@filter false val superclassName = clazz.getSuperClassName()!! - if (!superclassName.endsWith("Callback") || superclassName.endsWith("\$Callback")) return@filter false + if ((!superclassName.endsWith("Callback") && !superclassName.endsWith("Delegate")) || superclassName.endsWith("\$Callback")) return@filter false val superClass = context.getClass(clazz.superclass) ?: return@filter false - if (superClass.isFinal()) return@filter false - - superClass.virtualMethods.any { it.name == "onError" } + !superClass.isFinal() }.map { it.getSuperClassName()!!.substringAfterLast("/") to it.getClassName() }