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:
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