fix(core): snap score changes

Signed-off-by: rhunk <101876869+rhunk@users.noreply.github.com>
This commit is contained in:
rhunk 2025-03-16 22:40:53 +01:00
parent 952d43b5e2
commit b6aa4857d2
2 changed files with 29 additions and 13 deletions

View File

@ -42,25 +42,28 @@ class SnapScoreChanges: Feature("Snap Score Changes") {
if (event.viewClassName.endsWith("ProfileFlatlandFriendSnapScoreIdentityPillDialogView")) {
event.view.post {
val composerViewNode = event.view.getComposerViewNode() ?: return@post
val surface = composerViewNode.getChildren().getOrNull(1) ?: return@post
event.view.getComposerContext()!!.enqueueNextRenderCallback {
val composerViewNode = event.view.getComposerViewNode() ?: return@enqueueNextRenderCallback
val surface = composerViewNode.getChildren().getOrNull(1) ?: return@enqueueNextRenderCallback
val snapTextView = surface.getChildren().lastOrNull {
it.getClassName() == "com.snap.composer.views.ComposerSnapTextView"
} ?: return@post
val snapTextView = surface.getChildren().lastOrNull {
it.getClassName() == "com.snap.composer.views.ComposerSnapTextView"
} ?: return@enqueueNextRenderCallback
val currentFriendScore = scores[lastViewedUserId] ?: (event.view.getComposerContext()?.viewModel?.getObjectField("_friendSnapScore") as? Double)?.toLong() ?: return@post
val currentFriendScore = scores[lastViewedUserId] ?: (event.view.getComposerContext()?.viewModel?.getObjectField("_friendSnapScore") as? Double)?.toLong() ?: return@enqueueNextRenderCallback
val oldSnapScore = context.bridgeClient.getTracker().updateFriendScore(
lastViewedUserId ?: return@post,
currentFriendScore
)
val oldSnapScore = context.bridgeClient.getTracker().updateFriendScore(
lastViewedUserId ?: return@enqueueNextRenderCallback,
currentFriendScore
)
val diff = currentFriendScore - oldSnapScore
val diff = currentFriendScore - oldSnapScore
snapTextView.setAttribute("value", "${if (oldSnapScore != -1L && diff > 0) "\uD83D\uDCC8 +$diff !\n\n" else ""}Last Checked Score: ${oldSnapScore.takeIf { it != -1L } ?: "N/A"}")
event.view.invalidate()
snapTextView.setAttribute("value", "${if (oldSnapScore != -1L && diff > 0) "\uD83D\uDCC8 +$diff !\n\n" else ""}Last Checked Score: ${oldSnapScore.takeIf { it != -1L } ?: "N/A"}")
event.view.postInvalidate()
}
event.view.postInvalidate()
}
}
}

View File

@ -2,10 +2,23 @@ package me.rhunk.snapenhance.core.wrapper.impl.composer
import me.rhunk.snapenhance.core.wrapper.AbstractWrapper
import java.lang.ref.WeakReference
import java.lang.reflect.Proxy
class ComposerContext(obj: Any): AbstractWrapper(obj) {
val componentPath by field<String>("componentPath")
val viewModel by field<Any?>("innerViewModel")
val moduleName by field<String>("moduleName")
val componentContext by field<WeakReference<Any?>>("componentContext")
fun enqueueNextRenderCallback(callback: () -> Unit) {
val method = instanceNonNull()::class.java.methods.firstOrNull {
it.name == "onNextLayout"
}
method?.invoke(instanceNonNull(), Proxy.newProxyInstance(
instanceNonNull()::class.java.classLoader,
arrayOf(method.parameterTypes[0])
) { _, _, _ ->
callback()
})
}
}