fix(YouTube - SponsorBlock): Do not disable autoplay when skipping to the end of the video

This commit is contained in:
oSumAtrIX 2023-11-23 04:23:02 +01:00
parent b9d50fd3d8
commit f936f240a7
No known key found for this signature in database
GPG Key ID: A9B3094ACDB604B4

View File

@ -12,6 +12,7 @@ import java.util.Objects;
/** /**
* Hooking class for the current playing video. * Hooking class for the current playing video.
* @noinspection unused
*/ */
public final class VideoInformation { public final class VideoInformation {
private static final float DEFAULT_YOUTUBE_PLAYBACK_SPEED = 1.0f; private static final float DEFAULT_YOUTUBE_PLAYBACK_SPEED = 1.0f;
@ -89,7 +90,7 @@ public final class VideoInformation {
/** /**
* Overrides the current playback speed. * Overrides the current playback speed.
* * <p>
* <b> Used exclusively by {@link RememberPlaybackSpeedPatch} </b> * <b> Used exclusively by {@link RememberPlaybackSpeedPatch} </b>
*/ */
public static void overridePlaybackSpeed(float speedOverride) { public static void overridePlaybackSpeed(float speedOverride) {
@ -124,24 +125,33 @@ public final class VideoInformation {
/** /**
* Seek on the current video. * Seek on the current video.
* Does not function for playback of Shorts. * Does not function for playback of Shorts.
* * <p>
* Caution: If called from a videoTimeHook() callback, * Caution: If called from a videoTimeHook() callback,
* this will cause a recursive call into the same videoTimeHook() callback. * this will cause a recursive call into the same videoTimeHook() callback.
* *
* @param millisecond The millisecond to seek the video to. * @param millisecond The millisecond to seek the video to.
* @return if the seek was successful * @return true if the seek was successful.
*/ */
public static boolean seekTo(final long millisecond) { public static boolean seekTo(final long millisecond) {
final long videoLength = getVideoLength();
// Don't seek more than the video length to prevent issues such as
// Play pause button or autoplay not working.
// TODO: These are arbitrarily chosen values and should be subject to be adjusted.
final long seekToMilliseconds = millisecond <= videoLength - 500 ? millisecond : millisecond - 100;
ReVancedUtils.verifyOnMainThread(); ReVancedUtils.verifyOnMainThread();
try { try {
LogHelper.printDebug(() -> "Seeking to " + millisecond); LogHelper.printDebug(() -> "Seeking to " + seekToMilliseconds);
return (Boolean) seekMethod.invoke(playerControllerRef.get(), millisecond); //noinspection DataFlowIssue
return (Boolean) seekMethod.invoke(playerControllerRef.get(), seekToMilliseconds);
} catch (Exception ex) { } catch (Exception ex) {
LogHelper.printException(() -> "Failed to seek", ex); LogHelper.printException(() -> "Failed to seek", ex);
return false; return false;
} }
} }
/** @noinspection UnusedReturnValue*/
public static boolean seekToRelative(long millisecondsRelative) { public static boolean seekToRelative(long millisecondsRelative) {
return seekTo(videoTime + millisecondsRelative); return seekTo(videoTime + millisecondsRelative);
} }
@ -159,10 +169,10 @@ public final class VideoInformation {
/** /**
* Differs from {@link #videoId} as this is the video id for the * Differs from {@link #videoId} as this is the video id for the
* last player response received, which may not be the current video playing. * last player response received, which may not be the current video playing.
* * <p>
* If Shorts are loading the background, this commonly will be * If Shorts are loading the background, this commonly will be
* different from the Short that is currently on screen. * different from the Short that is currently on screen.
* * <p>
* For most use cases, you should instead use {@link #getVideoId()}. * For most use cases, you should instead use {@link #getVideoId()}.
* *
* @return The id of the last video loaded. Empty string if not set yet. * @return The id of the last video loaded. Empty string if not set yet.
@ -192,9 +202,9 @@ public final class VideoInformation {
/** /**
* Playback time of the current video playing. Includes Shorts. * Playback time of the current video playing. Includes Shorts.
* * <p>
* Value will lag behind the actual playback time by a variable amount based on the playback speed. * Value will lag behind the actual playback time by a variable amount based on the playback speed.
* * <p>
* If playback speed is 2.0x, this value may be up to 2000ms behind the actual playback time. * If playback speed is 2.0x, this value may be up to 2000ms behind the actual playback time.
* If playback speed is 1.0x, this value may be up to 1000ms behind the actual playback time. * If playback speed is 1.0x, this value may be up to 1000ms behind the actual playback time.
* If playback speed is 0.5x, this value may be up to 500ms behind the actual playback time. * If playback speed is 0.5x, this value may be up to 500ms behind the actual playback time.
@ -208,12 +218,12 @@ public final class VideoInformation {
/** /**
* @return If the playback is at the end of the video. * @return If the playback is at the end of the video.
* * <p>
* If video is playing in the background with no video visible, * If video is playing in the background with no video visible,
* this always returns false (even if the video is actually at the end). * this always returns false (even if the video is actually at the end).
* * <p>
* This is equivalent to checking for {@link VideoState#ENDED}, * This is equivalent to checking for {@link VideoState#ENDED},
* but can give a more up to date result for code calling from some hooks. * but can give a more up-to-date result for code calling from some hooks.
* *
* @see VideoState * @see VideoState
*/ */