mirror of
https://github.com/rhunk/SnapEnhance.git
synced 2025-06-13 05:37:48 +02:00
fix: hide streak restore
This commit is contained in:
@ -2,16 +2,23 @@ package me.rhunk.snapenhance.core.features.impl.ui
|
||||
|
||||
import me.rhunk.snapenhance.core.features.Feature
|
||||
import me.rhunk.snapenhance.core.features.FeatureLoadParams
|
||||
import me.rhunk.snapenhance.core.util.dataBuilder
|
||||
import me.rhunk.snapenhance.core.util.hook.HookStage
|
||||
import me.rhunk.snapenhance.core.util.hook.hookConstructor
|
||||
import me.rhunk.snapenhance.core.util.ktx.setObjectField
|
||||
|
||||
class HideStreakRestore : Feature("HideStreakRestore", loadParams = FeatureLoadParams.ACTIVITY_CREATE_SYNC) {
|
||||
override fun onActivityCreate() {
|
||||
class HideStreakRestore : Feature("HideStreakRestore", loadParams = FeatureLoadParams.INIT_SYNC) {
|
||||
override fun init() {
|
||||
if (!context.config.userInterface.hideStreakRestore.get()) return
|
||||
|
||||
findClass("com.snapchat.client.messaging.ExpiredStreakMetadata").hookConstructor(HookStage.AFTER) { param ->
|
||||
param.thisObject<Any>().setObjectField("mIsRestorable", false)
|
||||
findClass("com.snapchat.client.messaging.StreakMetadata").hookConstructor(HookStage.AFTER) { param ->
|
||||
param.thisObject<Any>().dataBuilder {
|
||||
val currentTimeMillis = System.currentTimeMillis()
|
||||
val expiration = get<Long>("mExpirationTimestampMs") ?: return@hookConstructor
|
||||
set("mExpiredStreak", null)
|
||||
if (expiration < currentTimeMillis) {
|
||||
set("mExpirationTimestampMs", currentTimeMillis + 60000L)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -1,7 +1,7 @@
|
||||
package me.rhunk.snapenhance.core.util
|
||||
|
||||
|
||||
fun Any?.dataBuilder(dataClassBuilder: DataClassBuilder.() -> Unit): Any? {
|
||||
inline fun Any?.dataBuilder(dataClassBuilder: DataClassBuilder.() -> Unit): Any? {
|
||||
return DataClassBuilder(
|
||||
when (this) {
|
||||
is Class<*> -> CallbackBuilder.createEmptyObject(
|
||||
@ -44,6 +44,13 @@ class DataClassBuilder(
|
||||
|
||||
fun set(vararg fields: Pair<String, Any?>) = fields.forEach { set(it.first, it.second) }
|
||||
|
||||
@Suppress("UNCHECKED_CAST")
|
||||
fun <T> get(fieldName: String): T? {
|
||||
val field = instance::class.java.declaredFields.firstOrNull { it.name == fieldName } ?: return null
|
||||
field.isAccessible = true
|
||||
return field.get(instance) as? T
|
||||
}
|
||||
|
||||
fun from(fieldName: String, new: Boolean = false, callback: DataClassBuilder.() -> Unit) {
|
||||
val field = instance::class.java.declaredFields.firstOrNull { it.name == fieldName } ?: return
|
||||
field.isAccessible = true
|
||||
|
Reference in New Issue
Block a user