commit 983816f504673362731029aa418fffd3c26fae82
parent 4265f7f2db0e16784f0dd18d2016183dfe46a3b1
Author: rhunk <101876869+rhunk@users.noreply.github.com>
Date:   Wed,  7 Jun 2023 21:44:28 +0200

feat: infinite story boost

Diffstat:
Mapp/src/main/assets/lang/en_US.json | 3++-
Mapp/src/main/kotlin/me/rhunk/snapenhance/config/ConfigProperty.kt | 6++++++
Aapp/src/main/kotlin/me/rhunk/snapenhance/features/impl/experiments/InfiniteStoryBoost.kt | 21+++++++++++++++++++++
Mapp/src/main/kotlin/me/rhunk/snapenhance/manager/impl/FeatureManager.kt | 2++
Mapp/src/main/kotlin/me/rhunk/snapenhance/manager/impl/MappingManager.kt | 5+++--
Aapp/src/main/kotlin/me/rhunk/snapenhance/mapping/impl/StoryBoostStateMapper.kt | 20++++++++++++++++++++
6 files changed, 54 insertions(+), 3 deletions(-)

diff --git a/app/src/main/assets/lang/en_US.json b/app/src/main/assets/lang/en_US.json @@ -58,7 +58,8 @@ "latitude_value": "Latitude", "longitude_value": "Longitude", "hide_ui_elements": "Hide UI Elements", - "auto_updater": "Auto Updater" + "auto_updater": "Auto Updater", + "infinite_story_boost": "Infinite Story Boost" }, "option": { diff --git a/app/src/main/kotlin/me/rhunk/snapenhance/config/ConfigProperty.kt b/app/src/main/kotlin/me/rhunk/snapenhance/config/ConfigProperty.kt @@ -289,6 +289,12 @@ enum class ConfigProperty( ConfigCategory.EXPERIMENTAL_DEBUGGING, ConfigStateValue(false) ), + INFINITE_STORY_BOOST( + "property.infinite_story_boost", + "description.infinite_story_boost", + ConfigCategory.EXPERIMENTAL_DEBUGGING, + ConfigStateValue(false) + ), MEO_PASSCODE_BYPASS( "property.meo_passcode_bypass", "description.meo_passcode_bypass", diff --git a/app/src/main/kotlin/me/rhunk/snapenhance/features/impl/experiments/InfiniteStoryBoost.kt b/app/src/main/kotlin/me/rhunk/snapenhance/features/impl/experiments/InfiniteStoryBoost.kt @@ -0,0 +1,20 @@ +package me.rhunk.snapenhance.features.impl.experiments + +import me.rhunk.snapenhance.features.Feature +import me.rhunk.snapenhance.features.FeatureLoadParams +import me.rhunk.snapenhance.hook.HookStage +import me.rhunk.snapenhance.hook.hookConstructor + +class InfiniteStoryBoost : Feature("InfiniteStoryBoost", loadParams = FeatureLoadParams.ACTIVITY_CREATE_ASYNC) { + override fun asyncOnActivityCreate() { + val storyBoostStateClass = context.mappings.getMappedClass("StoryBoostStateClass") + + storyBoostStateClass.hookConstructor(HookStage.BEFORE) { param -> + val startTimeMillis = param.arg<Long>(1) + if (System.currentTimeMillis() - startTimeMillis > 604800000) { + param.setArg(1, 0) + param.setArg(2, 0) + } + } + } +}+ \ No newline at end of file diff --git a/app/src/main/kotlin/me/rhunk/snapenhance/manager/impl/FeatureManager.kt b/app/src/main/kotlin/me/rhunk/snapenhance/manager/impl/FeatureManager.kt @@ -10,6 +10,7 @@ import me.rhunk.snapenhance.features.impl.Messaging import me.rhunk.snapenhance.features.impl.downloader.AntiAutoDownload import me.rhunk.snapenhance.features.impl.downloader.MediaDownloader import me.rhunk.snapenhance.features.impl.experiments.AppPasscode +import me.rhunk.snapenhance.features.impl.experiments.InfiniteStoryBoost import me.rhunk.snapenhance.features.impl.experiments.MeoPasscodeBypass import me.rhunk.snapenhance.features.impl.tweaks.AntiAutoSave import me.rhunk.snapenhance.features.impl.tweaks.AutoSave @@ -77,6 +78,7 @@ class FeatureManager(private val context: ModContext) : Manager { register(AppPasscode::class) register(LocationSpoofer::class) register(AutoUpdater::class) + register(InfiniteStoryBoost::class) initializeFeatures() } diff --git a/app/src/main/kotlin/me/rhunk/snapenhance/manager/impl/MappingManager.kt b/app/src/main/kotlin/me/rhunk/snapenhance/manager/impl/MappingManager.kt @@ -16,15 +16,15 @@ import me.rhunk.snapenhance.manager.Manager import me.rhunk.snapenhance.mapping.Mapper import me.rhunk.snapenhance.mapping.impl.BCryptClassMapper import me.rhunk.snapenhance.mapping.impl.CallbackMapper -import me.rhunk.snapenhance.mapping.impl.EnumMapper import me.rhunk.snapenhance.mapping.impl.DefaultMediaItemMapper +import me.rhunk.snapenhance.mapping.impl.EnumMapper import me.rhunk.snapenhance.mapping.impl.OperaPageViewControllerMapper import me.rhunk.snapenhance.mapping.impl.PlatformAnalyticsCreatorMapper import me.rhunk.snapenhance.mapping.impl.PlusSubscriptionMapper +import me.rhunk.snapenhance.mapping.impl.StoryBoostStateMapper import me.rhunk.snapenhance.util.getObjectField import java.nio.charset.StandardCharsets import java.util.concurrent.ConcurrentHashMap -import kotlin.concurrent.thread @Suppress("UNCHECKED_CAST") class MappingManager(private val context: ModContext) : Manager { @@ -36,6 +36,7 @@ class MappingManager(private val context: ModContext) : Manager { add(DefaultMediaItemMapper()) add(BCryptClassMapper()) add(PlatformAnalyticsCreatorMapper()) + add(StoryBoostStateMapper()) } private val mappings = ConcurrentHashMap<String, Any>() diff --git a/app/src/main/kotlin/me/rhunk/snapenhance/mapping/impl/StoryBoostStateMapper.kt b/app/src/main/kotlin/me/rhunk/snapenhance/mapping/impl/StoryBoostStateMapper.kt @@ -0,0 +1,19 @@ +package me.rhunk.snapenhance.mapping.impl + +import me.rhunk.snapenhance.mapping.Mapper + +class StoryBoostStateMapper : Mapper(){ + override fun useClasses( + classLoader: ClassLoader, + classes: List<Class<*>>, + mappings: MutableMap<String, Any> + ) { + for (clazz in classes) { + val firstField = clazz.fields.firstOrNull() ?: continue + if (!firstField.type.isEnum || firstField.type.enumConstants.none { it.toString() == "NeedSubscriptionCannotSubscribe" }) continue + mappings["StoryBoostStateClass"] = clazz.name + return + } + + } +}+ \ No newline at end of file