diff --git a/src/main/kotlin/app/revanced/patches/youtube/utils/sponsorblock/bytecode/fingerprints/PlayerControllerFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/utils/sponsorblock/bytecode/fingerprints/SegmentPlaybackControllerFingerprint.kt similarity index 89% rename from src/main/kotlin/app/revanced/patches/youtube/utils/sponsorblock/bytecode/fingerprints/PlayerControllerFingerprint.kt rename to src/main/kotlin/app/revanced/patches/youtube/utils/sponsorblock/bytecode/fingerprints/SegmentPlaybackControllerFingerprint.kt index 71b1c1b5f..d3f944f9f 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/utils/sponsorblock/bytecode/fingerprints/PlayerControllerFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/utils/sponsorblock/bytecode/fingerprints/SegmentPlaybackControllerFingerprint.kt @@ -4,7 +4,7 @@ import app.revanced.patcher.extensions.or import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint import org.jf.dexlib2.AccessFlags -object PlayerControllerFingerprint : MethodFingerprint( +object SegmentPlaybackControllerFingerprint : MethodFingerprint( returnType = "V", accessFlags = AccessFlags.PUBLIC or AccessFlags.STATIC, parameters = listOf("Ljava/lang/Object;"), diff --git a/src/main/kotlin/app/revanced/patches/youtube/utils/sponsorblock/bytecode/patch/SponsorBlockBytecodePatch.kt b/src/main/kotlin/app/revanced/patches/youtube/utils/sponsorblock/bytecode/patch/SponsorBlockBytecodePatch.kt index 194f95e52..247f2589f 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/utils/sponsorblock/bytecode/patch/SponsorBlockBytecodePatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/utils/sponsorblock/bytecode/patch/SponsorBlockBytecodePatch.kt @@ -21,8 +21,8 @@ import app.revanced.patches.youtube.utils.playercontrols.patch.PlayerControlsPat import app.revanced.patches.youtube.utils.resourceid.patch.SharedResourceIdPatch import app.revanced.patches.youtube.utils.resourceid.patch.SharedResourceIdPatch.Companion.InsetOverlayViewLayout import app.revanced.patches.youtube.utils.resourceid.patch.SharedResourceIdPatch.Companion.TotalTime -import app.revanced.patches.youtube.utils.sponsorblock.bytecode.fingerprints.PlayerControllerFingerprint import app.revanced.patches.youtube.utils.sponsorblock.bytecode.fingerprints.RectangleFieldInvalidatorFingerprint +import app.revanced.patches.youtube.utils.sponsorblock.bytecode.fingerprints.SegmentPlaybackControllerFingerprint import app.revanced.patches.youtube.utils.videoid.general.patch.VideoIdPatch import app.revanced.patches.youtube.utils.videoid.withoutshorts.patch.VideoIdWithoutShortsPatch import app.revanced.util.bytecode.BytecodeHelper.injectInit @@ -49,8 +49,8 @@ import org.jf.dexlib2.iface.reference.MethodReference ) class SponsorBlockBytecodePatch : BytecodePatch( listOf( - PlayerControllerFingerprint, SeekbarFingerprint, + SegmentPlaybackControllerFingerprint, TotalTimeFingerprint, YouTubeControlsOverlayFingerprint ) @@ -199,7 +199,7 @@ class SponsorBlockBytecodePatch : BytecodePatch( getInstruction(implementation!!.instructions.count() - 3).reference val rectangleFieldName = (rectangleReference as FieldReference).name - PlayerControllerFingerprint.result?.let { result -> + SegmentPlaybackControllerFingerprint.result?.let { result -> result.mutableMethod.apply { for ((index, instruction) in implementation!!.instructions.withIndex()) { if (instruction.opcode != Opcode.CONST_STRING) continue @@ -214,7 +214,7 @@ class SponsorBlockBytecodePatch : BytecodePatch( break } } - } ?: return PlayerControllerFingerprint.toErrorResult() + } ?: return SegmentPlaybackControllerFingerprint.toErrorResult() } } ?: return RectangleFieldInvalidatorFingerprint.toErrorResult() } ?: return SeekbarFingerprint.toErrorResult() diff --git a/src/main/kotlin/app/revanced/patches/youtube/utils/videoid/general/fingerprint/VideoTimeHighPrecisionFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/utils/videoid/general/fingerprint/VideoTimeHighPrecisionFingerprint.kt deleted file mode 100644 index aee591484..000000000 --- a/src/main/kotlin/app/revanced/patches/youtube/utils/videoid/general/fingerprint/VideoTimeHighPrecisionFingerprint.kt +++ /dev/null @@ -1,19 +0,0 @@ -package app.revanced.patches.youtube.utils.videoid.general.fingerprint - -import app.revanced.patcher.extensions.or -import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint -import org.jf.dexlib2.AccessFlags -import org.jf.dexlib2.Opcode - -object VideoTimeHighPrecisionFingerprint : MethodFingerprint( - returnType = "V", - accessFlags = AccessFlags.PUBLIC or AccessFlags.CONSTRUCTOR, - parameters = listOf("J", "J", "J", "J", "I", "L"), - opcodes = listOf( - Opcode.INVOKE_DIRECT, - Opcode.IPUT_WIDE, - Opcode.IPUT_WIDE, - Opcode.IPUT_WIDE, - Opcode.IPUT_WIDE, - ) -) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/utils/videoid/general/fingerprint/VideoTimeHighPrecisionParentFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/utils/videoid/general/fingerprint/VideoTimeHighPrecisionParentFingerprint.kt deleted file mode 100644 index 61d5dffd2..000000000 --- a/src/main/kotlin/app/revanced/patches/youtube/utils/videoid/general/fingerprint/VideoTimeHighPrecisionParentFingerprint.kt +++ /dev/null @@ -1,7 +0,0 @@ -package app.revanced.patches.youtube.utils.videoid.general.fingerprint - -import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint - -object VideoTimeHighPrecisionParentFingerprint : MethodFingerprint( - strings = listOf("MedialibPlayerTimeInfo{currentPositionMillis=") -) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/utils/videoid/general/patch/VideoIdPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/utils/videoid/general/patch/VideoIdPatch.kt index 3f17c2aa3..8b562b988 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/utils/videoid/general/patch/VideoIdPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/utils/videoid/general/patch/VideoIdPatch.kt @@ -21,8 +21,6 @@ import app.revanced.patches.youtube.utils.videoid.general.fingerprint.SeekFinger import app.revanced.patches.youtube.utils.videoid.general.fingerprint.VideoIdFingerprint import app.revanced.patches.youtube.utils.videoid.general.fingerprint.VideoIdParentFingerprint import app.revanced.patches.youtube.utils.videoid.general.fingerprint.VideoLengthFingerprint -import app.revanced.patches.youtube.utils.videoid.general.fingerprint.VideoTimeHighPrecisionFingerprint -import app.revanced.patches.youtube.utils.videoid.general.fingerprint.VideoTimeHighPrecisionParentFingerprint import app.revanced.util.integrations.Constants.VIDEO_PATH import org.jf.dexlib2.AccessFlags import org.jf.dexlib2.builder.MutableMethodImplementation @@ -38,9 +36,7 @@ class VideoIdPatch : BytecodePatch( PlayerInitFingerprint, SeekFingerprint, VideoIdParentFingerprint, - VideoLengthFingerprint, - VideoTimeHighPrecisionFingerprint, - VideoTimeHighPrecisionParentFingerprint + VideoLengthFingerprint ) ) { override fun execute(context: BytecodeContext): PatchResult { @@ -80,24 +76,10 @@ class VideoIdPatch : BytecodePatch( } ?: return SeekFingerprint.toErrorResult() } ?: return PlayerInitFingerprint.toErrorResult() - /** - * Set the high precision video time method - */ - VideoTimeHighPrecisionParentFingerprint.result?.let { parentResult -> - VideoTimeHighPrecisionFingerprint.also { - it.resolve( - context, - parentResult.classDef - ) - }.result?.mutableMethod?.let { method -> - highPrecisionTimeMethod = method - } ?: return VideoTimeHighPrecisionFingerprint.toErrorResult() - } ?: return VideoTimeHighPrecisionParentFingerprint.toErrorResult() - /** * Hook the methods which set the time */ - highPrecisionTimeHook(INTEGRATIONS_CLASS_DESCRIPTOR, "setVideoTime") + videoTimeHook(INTEGRATIONS_CLASS_DESCRIPTOR, "setVideoTime") /** * Set current video time @@ -140,6 +122,8 @@ class VideoIdPatch : BytecodePatch( } ?: return VideoIdFingerprint.toErrorResult() } ?: return VideoIdParentFingerprint.toErrorResult() + injectCall("$VIDEO_PATH/VideoInformation;->setVideoId(Ljava/lang/String;)V") + return PatchResultSuccess() } @@ -149,14 +133,12 @@ class VideoIdPatch : BytecodePatch( private var offset = 0 private var playerInitInsertIndex = 4 private var timeInitInsertIndex = 2 - private var highPrecisionInsertIndex = 0 private var insertIndex: Int = 0 private var videoIdRegister: Int = 0 private lateinit var insertMethod: MutableMethod private lateinit var playerInitMethod: MutableMethod private lateinit var timeMethod: MutableMethod - private lateinit var highPrecisionTimeMethod: MutableMethod /** * Adds an invoke-static instruction, called with the new id when the video changes @@ -205,20 +187,6 @@ class VideoIdPatch : BytecodePatch( timeInitInsertIndex++, "$targetMethodClass->$targetMethodName(J)V" ) - - /** - * Hook the high precision video time. - * The hooks is called extremely often (10 to 15 times a seconds), so use with caution. - * Note: the hook is usually called _off_ the main thread - * - * @param targetMethodClass The descriptor for the static method to invoke when the player controller is created. - * @param targetMethodName The name of the static method to invoke when the player controller is created. - */ - internal fun highPrecisionTimeHook(targetMethodClass: String, targetMethodName: String) = - highPrecisionTimeMethod.insertTimeHook( - highPrecisionInsertIndex++, - "$targetMethodClass->$targetMethodName(J)V" - ) } }