aboutsummaryrefslogtreecommitdiffstats
path: root/src/client/Player.hx
diff options
context:
space:
mode:
authorRblSb <msrblsb@gmail.com>2024-04-29 07:45:10 +0300
committerRblSb <msrblsb@gmail.com>2024-04-29 07:45:10 +0300
commit5d2375cbb23dbe69a7afe7a691707be48397c6d9 (patch)
tree2fe92ab48e83427b3a7e90855545f73c2c8daa3e /src/client/Player.hx
parent9d844bbf3ac6be327325b13a91a6b33f73c49c1d (diff)
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`)
Diffstat (limited to 'src/client/Player.hx')
-rw-r--r--src/client/Player.hx37
1 files changed, 20 insertions, 17 deletions
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<VideoItem> {
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()) {
send patches to the email below
yukais@pinapelz.com
include the subject [PATCH repo_name]
pinapelz.com
homepage