From 5d2375cbb23dbe69a7afe7a691707be48397c6d9 Mon Sep 17 00:00:00 2001 From: RblSb Date: Mon, 29 Apr 2024 07:45:10 +0300 Subject: Video item fixes - Fix youtube fallback, `videoItem.url` is now immutable - JsApi.setVideoSrc now updates to supported player based on `url` arg - Fix auto-pause when video is ended (with `requestLeaderOnPause`) --- src/client/Player.hx | 37 ++++++++++++++++++++----------------- 1 file changed, 20 insertions(+), 17 deletions(-) (limited to 'src/client/Player.hx') diff --git a/src/client/Player.hx b/src/client/Player.hx index 06a8f3e..c250a34 100644 --- a/src/client/Player.hx +++ b/src/client/Player.hx @@ -89,7 +89,7 @@ class Player { setItemElementType(el, videoList.getItem(pos).isTemp); } - public function getCurrentItem():VideoItem { + public function getCurrentItem():Null { return videoList.currentItem; } @@ -121,10 +121,7 @@ class Player { public function setVideo(i:Int):Void { if (!main.isSyncActive) return; final item = videoList.getItem(i); - var currentPlayer = players.find(p -> p.isSupportedLink(item.url)); - if (currentPlayer != null) setPlayer(currentPlayer); - else if (item.isIframe) setPlayer(iframePlayer); - else setPlayer(rawPlayer); + setSupportedPlayer(item.url, item.isIframe); removeActiveLabel(videoList.pos); videoList.setPos(i); @@ -140,19 +137,18 @@ class Player { ge("#currenttitle").textContent = item.title; } - public function changeVideoSrc(src:String):Void { + function setSupportedPlayer(url:String, isIframe:Bool):Void { + final currentPlayer = players.find(p -> p.isSupportedLink(url)); + if (currentPlayer != null) setPlayer(currentPlayer); + else if (isIframe) setPlayer(iframePlayer); + else setPlayer(rawPlayer); + } + + public function changeVideoSrc(url:String):Void { if (!main.isVideoEnabled) return; - if (player == null) return; - final item = videoList.currentItem ?? return; - player.loadVideo({ - url: src, - title: item.title, - author: item.author, - duration: item.duration, - subs: item.subs, - isTemp: item.isTemp, - isIframe: item.isIframe - }); + final item:VideoItem = videoList.currentItem ?? return; + setSupportedPlayer(url, item.isIframe); + player.loadVideo(item.withUrl(url)); } public function removeVideo():Void { @@ -191,6 +187,13 @@ class Player { } public function onPause():Void { + final item = videoList.currentItem ?? return; + // do not send pause if video is ended + if (getTime() >= item.duration - 0.01) return; + // youtube raw fallback has around one second difference from rounded youtube duration + if (player == rawPlayer && youtube.isSupportedLink(item.url)) { + if (getTime() >= item.duration - 1) return; + } final hasAutoPause = main.hasLeaderOnPauseRequest() && videoList.length > 0 && getTime() > 1; if (hasAutoPause && !main.hasLeader()) { -- cgit v1.2.3