commit 0f041ec107179fbd11537bed7673aabbfa540f6d parent b5dda0353ae9006c082cc20aa4f172b5adde6eb3 Author: rhunk <101876869+rhunk@users.noreply.github.com> Date: Tue, 2 Apr 2024 23:36:24 +0200 fix(mapper): score update mapper Diffstat:
2 files changed, 16 insertions(+), 12 deletions(-)
diff --git a/core/src/main/kotlin/me/rhunk/snapenhance/core/features/impl/experiments/NoFriendScoreDelay.kt b/core/src/main/kotlin/me/rhunk/snapenhance/core/features/impl/experiments/NoFriendScoreDelay.kt @@ -5,7 +5,8 @@ import me.rhunk.snapenhance.core.features.FeatureLoadParams import me.rhunk.snapenhance.core.util.hook.HookStage import me.rhunk.snapenhance.core.util.hook.hookConstructor import me.rhunk.snapenhance.mapper.impl.ScoreUpdateMapper -import java.lang.reflect.Constructor +import kotlin.time.Duration.Companion.days +import kotlin.time.Duration.Companion.minutes class NoFriendScoreDelay : Feature("NoFriendScoreDelay", loadParams = FeatureLoadParams.ACTIVITY_CREATE_SYNC) { override fun onActivityCreate() { @@ -13,9 +14,12 @@ class NoFriendScoreDelay : Feature("NoFriendScoreDelay", loadParams = FeatureLoa context.mappings.useMapper(ScoreUpdateMapper::class) { classReference.get()?.hookConstructor(HookStage.BEFORE) { param -> - val constructor = param.method() as Constructor<*> - if (constructor.parameterTypes.size < 3 || constructor.parameterTypes[3] != java.util.Collection::class.java) return@hookConstructor - param.setArg(2, 0L) + param.args().indexOfFirst { + val longValue = it.toString().toLongOrNull() ?: return@indexOfFirst false + longValue > 30.minutes.inWholeMilliseconds && longValue < 10.days.inWholeMilliseconds + }.takeIf { it != -1 }?.let { index -> + param.setArg(index, 0) + } } } } diff --git a/mapper/src/main/kotlin/me/rhunk/snapenhance/mapper/impl/ScoreUpdateMapper.kt b/mapper/src/main/kotlin/me/rhunk/snapenhance/mapper/impl/ScoreUpdateMapper.kt @@ -10,15 +10,15 @@ class ScoreUpdateMapper : AbstractClassMapper("ScoreUpdate") { init { mapper { for (classDef in classes) { - classDef.methods.firstOrNull { - it.name == "<init>" && - it.parameterTypes.size > 4 && - it.parameterTypes[1] == "Ljava/lang/Long;" && - it.parameterTypes[3] == "Ljava/util/Collection;" + val toStringMethod = classDef.methods.firstOrNull { + it.name == "toString" } ?: continue - if (classDef.methods.firstOrNull { - it.name == "toString" - }?.implementation?.findConstString("Friend.sq:selectFriendUserScoresNeedToUpdate") != true) continue + if (classDef.methods.none { + it.name == "<init>" && + it.parameterTypes.size > 4 + }) continue + + if (toStringMethod.implementation?.findConstString("selectFriendUserScoresNeedToUpdate", contains = true) != true) continue classReference.set(classDef.getClassName()) return@mapper