fix(mapper): plus subscription mapper

This commit is contained in:
rhunk
2024-04-02 21:42:31 +02:00
parent 553664771d
commit f631989104
2 changed files with 28 additions and 16 deletions

View File

@@ -3,29 +3,37 @@ package me.rhunk.snapenhance.mapper.impl
import me.rhunk.snapenhance.mapper.AbstractClassMapper
import me.rhunk.snapenhance.mapper.ext.findConstString
import me.rhunk.snapenhance.mapper.ext.getClassName
import me.rhunk.snapenhance.mapper.ext.searchNextFieldReference
class PlusSubscriptionMapper : AbstractClassMapper("PlusSubscription"){
val classReference = classReference("class")
val tierField = string("tierField")
val statusField = string("statusField")
val originalSubscriptionTimeMillisField = string("originalSubscriptionTimeMillisField")
val expirationTimeMillisField = string("expirationTimeMillisField")
init {
mapper {
for (clazz in classes) {
if (clazz.directMethods.filter { it.name == "<init>" }.none {
it.parameterTypes.size > 3 &&
it.parameterTypes[0] == "I" &&
it.parameterTypes[1] == "I" &&
it.parameterTypes[2] == "J" &&
it.parameterTypes[3] == "J"
it.parameterTypes.size > 3
}) continue
val isPlusSubscriptionInfoClass = clazz.virtualMethods.firstOrNull { it.name == "toString" }?.implementation?.let {
val toStringMethod = clazz.virtualMethods.firstOrNull { it.name == "toString" }?.implementation ?: continue
if (!toStringMethod.let {
it.findConstString("SubscriptionInfo", contains = true) && it.findConstString("expirationTimeMillis", contains = true)
}) continue
classReference.set(clazz.getClassName())
toStringMethod.apply {
searchNextFieldReference("tier", contains = true)?.let { tierField.set(it.name) }
searchNextFieldReference("status", contains = true)?.let { statusField.set(it.name) }
searchNextFieldReference("original", contains = true)?.let { originalSubscriptionTimeMillisField.set(it.name) }
searchNextFieldReference("expirationTimeMillis", contains = true)?.let { expirationTimeMillisField.set(it.name) }
}
if (isPlusSubscriptionInfoClass == true) {
classReference.set(clazz.getClassName())
return@mapper
}
return@mapper
}
}
}