mirror of
https://github.com/revanced/revanced-integrations
synced 2024-11-24 20:07:14 +01:00
fix(YouTube - VideoInformation): Ignore video seek attempts during the last 250ms of video playback
This commit is contained in:
parent
14396fc2c0
commit
6263edce11
@ -157,20 +157,29 @@ public final class VideoInformation {
|
|||||||
* 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 seekTime The seekTime to seek the video to.
|
||||||
* @return true 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 seekTime) {
|
||||||
|
ReVancedUtils.verifyOnMainThread();
|
||||||
|
try {
|
||||||
|
final long videoTime = getVideoTime();
|
||||||
final long videoLength = getVideoLength();
|
final long videoLength = getVideoLength();
|
||||||
|
|
||||||
// Prevent issues such as play/ pause button or autoplay not working.
|
// Prevent issues such as play/ pause button or autoplay not working.
|
||||||
final long seekToMilliseconds = Math.min(millisecond, VideoInformation.getVideoLength() - 250);
|
final long adjustedSeekTime = Math.min(seekTime, videoLength - 250);
|
||||||
|
if (videoTime <= seekTime && videoTime >= adjustedSeekTime) {
|
||||||
|
// Both the current video time and the seekTo are in the last 250ms of the video.
|
||||||
|
// Ignore this seek call, otherwise if a video ends with multiple closely timed segments
|
||||||
|
// then seeking here can create an infinite loop of skip attempts.
|
||||||
|
LogHelper.printDebug(() -> "Ignoring seekTo call as video playback is almost finished. "
|
||||||
|
+ " videoTime: " + videoTime + " videoLength: " + videoLength + " seekTo: " + seekTime);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
ReVancedUtils.verifyOnMainThread();
|
LogHelper.printDebug(() -> "Seeking to " + adjustedSeekTime);
|
||||||
try {
|
|
||||||
LogHelper.printDebug(() -> "Seeking to " + seekToMilliseconds);
|
|
||||||
//noinspection DataFlowIssue
|
//noinspection DataFlowIssue
|
||||||
return (Boolean) seekMethod.invoke(playerControllerRef.get(), seekToMilliseconds);
|
return (Boolean) seekMethod.invoke(playerControllerRef.get(), adjustedSeekTime);
|
||||||
} catch (Exception ex) {
|
} catch (Exception ex) {
|
||||||
LogHelper.printException(() -> "Failed to seek", ex);
|
LogHelper.printException(() -> "Failed to seek", ex);
|
||||||
return false;
|
return false;
|
||||||
|
Loading…
Reference in New Issue
Block a user