commit fe0b82c75b81c0048cf89a1b19b16113108415a1
parent fc941170294a627b5d3666da517287d82fe0c423
Author: rhunk <101876869+rhunk@users.noreply.github.com>
Date:   Sun,  4 Jun 2023 17:01:02 +0200

fix: video length restriction

Diffstat:
Mapp/src/main/kotlin/me/rhunk/snapenhance/features/impl/tweaks/DisableVideoLengthRestriction.kt | 16++++------------
Mapp/src/main/kotlin/me/rhunk/snapenhance/manager/impl/MappingManager.kt | 4++--
Aapp/src/main/kotlin/me/rhunk/snapenhance/mapping/impl/DefaultMediaItemMapper.kt | 25+++++++++++++++++++++++++
Dapp/src/main/kotlin/me/rhunk/snapenhance/mapping/impl/GridMediaItemMapper.kt | 29-----------------------------
4 files changed, 31 insertions(+), 43 deletions(-)

diff --git a/app/src/main/kotlin/me/rhunk/snapenhance/features/impl/tweaks/DisableVideoLengthRestriction.kt b/app/src/main/kotlin/me/rhunk/snapenhance/features/impl/tweaks/DisableVideoLengthRestriction.kt @@ -1,25 +1,17 @@ package me.rhunk.snapenhance.features.impl.tweaks -import me.rhunk.snapenhance.config.ConfigProperty import me.rhunk.snapenhance.features.Feature import me.rhunk.snapenhance.features.FeatureLoadParams import me.rhunk.snapenhance.hook.HookStage import me.rhunk.snapenhance.hook.Hooker -import me.rhunk.snapenhance.util.getObjectField -import me.rhunk.snapenhance.util.setObjectField class DisableVideoLengthRestriction : Feature("DisableVideoLengthRestriction", loadParams = FeatureLoadParams.ACTIVITY_CREATE_ASYNC) { override fun asyncOnActivityCreate() { - val gridMediaItem = context.mappings.getMappedClass("GridMediaItem") - val gridMediaItemDurationFieldName = context.mappings.getMappedValue("GridMediaItemDurationField") + val defaultMediaItem = context.mappings.getMappedClass("DefaultMediaItem") - Hooker.hookConstructor(gridMediaItem, HookStage.AFTER, { - context.config.bool(ConfigProperty.DISABLE_VIDEO_LENGTH_RESTRICTION) - }) {param -> - val durationMs = param.thisObject<Any>().getObjectField(gridMediaItemDurationFieldName) as Double - if (durationMs > 60000) { - param.thisObject<Any>().setObjectField(gridMediaItemDurationFieldName, 60000) - } + Hooker.hookConstructor(defaultMediaItem, HookStage.BEFORE) { param -> + //set the video length argument + param.setArg(5, -1L) } } } \ No newline at end of file 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 @@ -15,7 +15,7 @@ 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.GridMediaItemMapper +import me.rhunk.snapenhance.mapping.impl.DefaultMediaItemMapper import me.rhunk.snapenhance.mapping.impl.OperaPageViewControllerMapper import me.rhunk.snapenhance.mapping.impl.PlatformAnalyticsCreatorMapper import me.rhunk.snapenhance.mapping.impl.PlusSubscriptionMapper @@ -30,7 +30,7 @@ class MappingManager(private val context: ModContext) : Manager { add(EnumMapper()) add(OperaPageViewControllerMapper()) add(PlusSubscriptionMapper()) - add(GridMediaItemMapper()) + add(DefaultMediaItemMapper()) add(BCryptClassMapper()) add(PlatformAnalyticsCreatorMapper()) } diff --git a/app/src/main/kotlin/me/rhunk/snapenhance/mapping/impl/DefaultMediaItemMapper.kt b/app/src/main/kotlin/me/rhunk/snapenhance/mapping/impl/DefaultMediaItemMapper.kt @@ -0,0 +1,24 @@ +package me.rhunk.snapenhance.mapping.impl + +import android.net.Uri +import me.rhunk.snapenhance.mapping.Mapper +import java.lang.reflect.Modifier + +class DefaultMediaItemMapper : Mapper() { + override fun useClasses( + classLoader: ClassLoader, + classes: List<Class<*>>, + mappings: MutableMap<String, Any> + ) { + for (clazz in classes) { + if (clazz.superclass == null || !Modifier.isAbstract(clazz.superclass.modifiers)) continue + if (clazz.superclass.interfaces.isEmpty() || clazz.superclass.interfaces[0] != Comparable::class.java) continue + if (clazz.methods.none { it.returnType == Uri::class.java }) continue + + val constructorParameters = clazz.constructors[0]?.parameterTypes ?: continue + if (constructorParameters.size < 6 || constructorParameters[5] != Long::class.javaPrimitiveType) continue + + mappings["DefaultMediaItem"] = clazz.name + } + } +}+ \ No newline at end of file diff --git a/app/src/main/kotlin/me/rhunk/snapenhance/mapping/impl/GridMediaItemMapper.kt b/app/src/main/kotlin/me/rhunk/snapenhance/mapping/impl/GridMediaItemMapper.kt @@ -1,28 +0,0 @@ -package me.rhunk.snapenhance.mapping.impl - -import me.rhunk.snapenhance.Logger -import me.rhunk.snapenhance.mapping.Mapper - -class GridMediaItemMapper : Mapper() { - override fun useClasses( - classLoader: ClassLoader, - classes: List<Class<*>>, - mappings: MutableMap<String, Any> - ) { - for (clazz in classes) { - if (clazz.isEnum || clazz.isInterface) continue - if (clazz.annotations.isEmpty()) continue - if (!clazz.annotations[0].toString().contains("typeReferences")) continue - clazz.declaredFields.firstOrNull { - it.annotations.isNotEmpty() && it.annotations[0].toString().contains("cameraRollSource") - }?.let { - mappings["GridMediaItem"] = clazz.name - mappings["GridMediaItemDurationField"] = clazz.declaredFields.first { - it.annotations.isNotEmpty() && it.annotations[0].toString().contains("durationMs") - }.name - - Logger.debug("Found GridMediaItem: ${clazz.name}, durationMs: ${mappings["GridMediaItemDurationField"]}") - } - } - } -}- \ No newline at end of file