diff options
| -rw-r--r-- | build/server.js | 2 | ||||
| -rw-r--r-- | res/client.js | 36 | ||||
| -rw-r--r-- | src/client/Player.hx | 22 | ||||
| -rw-r--r-- | src/client/players/Youtube.hx | 12 | ||||
| -rw-r--r-- | src/server/Main.hx | 2 |
5 files changed, 47 insertions, 27 deletions
diff --git a/build/server.js b/build/server.js index d4802a0..7aa1bc8 100644 --- a/build/server.js +++ b/build/server.js @@ -5196,7 +5196,7 @@ server_Main.prototype = { },1000); return; } - var obj = { type : "GetTime", getTime : { time : this.videoTimer.getTime()}}; + var obj = { type : "GetTime", getTime : { time : tools_MathTools.toFixed(this.videoTimer.getTime())}}; if(this.videoTimer.isPaused()) { obj.getTime.paused = true; } diff --git a/res/client.js b/res/client.js index a97f1df..85e1905 100644 --- a/res/client.js +++ b/res/client.js @@ -2801,7 +2801,7 @@ var client_Player = function(main) { this.voiceOverInput = window.document.querySelector("#voiceoverurl"); this.skipSetRate = false; this.skipSetTime = false; - this.isLoaded = false; + this.canBePlayedSent = false; this.playerEl = window.document.querySelector("#ytapiplayer"); this.videoItemsEl = window.document.querySelector("#queue"); this.videoList = new VideoList(); @@ -2813,7 +2813,7 @@ var client_Player = function(main) { this.rawPlayer = new client_players_Raw(main,this); this.initItemButtons(); var resizeObserver = client_Utils.createResizeObserver(function(entries) { - if(_gthis.isLoaded || _gthis.videoList.items.length == 0) { + if(_gthis.isVideoLoaded() || _gthis.videoList.items.length == 0) { return; } client_Buttons.onViewportResize(); @@ -2822,7 +2822,7 @@ var client_Player = function(main) { resizeObserver.observe(this.playerEl); } else { new haxe_Timer(50).run = function() { - if(_gthis.isLoaded || _gthis.videoList.items.length == 0) { + if(_gthis.isVideoLoaded() || _gthis.videoList.items.length == 0) { return; } client_Buttons.onViewportResize(); @@ -2944,7 +2944,7 @@ client_Player.prototype = { this.removeActiveLabel(this.videoList.pos); this.videoList.setPos(i); this.addActiveLabel(this.videoList.pos); - this.isLoaded = false; + this.canBePlayedSent = false; if(this.main.isVideoEnabled) { this.player.loadVideo(item); this.setExternalAudioTrack(item); @@ -3039,10 +3039,10 @@ client_Player.prototype = { el2.style.display = tmp; } ,onCanBePlayed: function() { - if(!this.isLoaded) { + if(!this.canBePlayedSent) { this.main.send({ type : "VideoLoaded"}); } - this.isLoaded = true; + this.canBePlayedSent = true; client_Buttons.onViewportResize(); } ,onPlay: function() { @@ -3050,7 +3050,7 @@ client_Player.prototype = { if(tmp != null) { tmp.play(); } - if(!this.isLoaded) { + if(!this.isVideoLoaded()) { return; } if(!this.isSyncActive()) { @@ -3089,7 +3089,7 @@ client_Player.prototype = { if(tmp != null) { tmp.pause(); } - if(!this.isLoaded) { + if(!this.isVideoLoaded()) { return; } if(!this.isSyncActive()) { @@ -3103,7 +3103,7 @@ client_Player.prototype = { if(this.getTime() >= tmp.duration - 0.01) { return; } - var hasAutoPause = this.main.hasLeaderOnPauseRequest() && this.videoList.items.length > 0 && this.getTime() > 1 && this.isLoaded; + var hasAutoPause = this.main.hasLeaderOnPauseRequest() && this.videoList.items.length > 0 && this.getTime() > 1; if(this.main.showingServerPause) { hasAutoPause = false; } @@ -3496,7 +3496,7 @@ client_Player.prototype = { } }; http.onError = function(msg) { - haxe_Log.trace(msg,{ fileName : "src/client/Player.hx", lineNumber : 677, className : "client.Player", methodName : "skipAd"}); + haxe_Log.trace(msg,{ fileName : "src/client/Player.hx", lineNumber : 675, className : "client.Player", methodName : "skipAd"}); }; http.request(); } @@ -5012,7 +5012,11 @@ client_players_Youtube.prototype = { return; } if(this.youtube != null) { + this.isLoaded = false; this.youtube.loadVideoById({ videoId : this.extractVideoId(item.url)}); + if(this.main.lastState.paused) { + this.youtube.pauseVideo(); + } return; } this.isLoaded = false; @@ -5023,10 +5027,10 @@ client_players_Youtube.prototype = { if(!_gthis.main.isAutoplayAllowed()) { e.target.mute(); } - _gthis.isLoaded = true; if(_gthis.main.lastState.paused) { _gthis.youtube.pauseVideo(); } + _gthis.isLoaded = true; _gthis.player.onCanBePlayed(); }, onStateChange : function(e) { switch(e.data) { @@ -5035,9 +5039,17 @@ client_players_Youtube.prototype = { case 0: break; case 1: + if(!_gthis.isLoaded) { + _gthis.isLoaded = true; + _gthis.player.onCanBePlayed(); + } _gthis.player.onPlay(); break; case 2: + if(!_gthis.isLoaded) { + _gthis.isLoaded = true; + _gthis.player.onCanBePlayed(); + } _gthis.player.onPause(); break; case 3: @@ -5049,7 +5061,7 @@ client_players_Youtube.prototype = { }, onPlaybackRateChange : function(e) { _gthis.player.onRateChange(); }, onError : function(e) { - haxe_Log.trace("Error " + e.data,{ fileName : "src/client/players/Youtube.hx", lineNumber : 259, className : "client.players.Youtube", methodName : "loadVideo"}); + haxe_Log.trace("Error " + e.data,{ fileName : "src/client/players/Youtube.hx", lineNumber : 269, className : "client.players.Youtube", methodName : "loadVideo"}); }}}); } ,removeVideo: function() { diff --git a/src/client/Player.hx b/src/client/Player.hx index 670d5da..10c4351 100644 --- a/src/client/Player.hx +++ b/src/client/Player.hx @@ -28,7 +28,7 @@ class Player { final videoItemsEl = getEl("#queue"); final playerEl = getEl("#ytapiplayer"); var player:Null<IPlayer>; - var isLoaded = false; + var canBePlayedSent = false; var skipSetTime = false; var skipSetRate = false; @@ -55,7 +55,7 @@ class Player { initItemButtons(); final resizeObserver = Utils.createResizeObserver(entries -> { - if (isLoaded || videoList.length == 0) return; + if (isVideoLoaded() || videoList.length == 0) return; Buttons.onViewportResize(); }); if (resizeObserver != null) { @@ -63,7 +63,7 @@ class Player { } else { final timer = new Timer(50); timer.run = () -> { - if (isLoaded || videoList.length == 0) return; + if (isVideoLoaded() || videoList.length == 0) return; Buttons.onViewportResize(); } } @@ -189,7 +189,7 @@ class Player { videoList.setPos(i); addActiveLabel(videoList.pos); - isLoaded = false; + canBePlayedSent = false; if (main.isVideoEnabled) { player.loadVideo(item); setExternalAudioTrack(item); @@ -270,14 +270,14 @@ class Player { } public function onCanBePlayed():Void { - if (!isLoaded) main.send({type: VideoLoaded}); - isLoaded = true; + if (!canBePlayedSent) main.send({type: VideoLoaded}); + canBePlayedSent = true; Buttons.onViewportResize(); } public function onPlay():Void { audioTrack?.play(); - if (!isLoaded) return; + if (!isVideoLoaded()) return; if (!isSyncActive()) return; if (videoList.length == 0) return; @@ -317,15 +317,13 @@ class Player { public function onPause():Void { audioTrack?.pause(); - if (!isLoaded) return; + if (!isVideoLoaded()) return; if (!isSyncActive()) return; final item = videoList.currentItem ?? return; // do not send pause if video is ended if (getTime() >= item.duration - 0.01) return; - var hasAutoPause = main.hasLeaderOnPauseRequest() - && videoList.length > 0 - && getTime() > 1 - && isLoaded; + var hasAutoPause = main.hasLeaderOnPauseRequest() && videoList.length > 0 + && getTime() > 1; // do not set leader on pause if user tried to play server-paused video if (main.showingServerPause) hasAutoPause = false; // set leader and pause diff --git a/src/client/players/Youtube.hx b/src/client/players/Youtube.hx index 14eb3c2..678c34a 100644 --- a/src/client/players/Youtube.hx +++ b/src/client/players/Youtube.hx @@ -212,9 +212,11 @@ class Youtube implements IPlayer { return; } if (youtube != null) { + isLoaded = false; youtube.loadVideoById({ videoId: extractVideoId(item.url) }); + if (main.lastState.paused) youtube.pauseVideo(); return; } isLoaded = false; @@ -234,8 +236,8 @@ class Youtube implements IPlayer { events: { onReady: e -> { if (!main.isAutoplayAllowed()) e.target.mute(); - isLoaded = true; if (main.lastState.paused) youtube.pauseVideo(); + isLoaded = true; player.onCanBePlayed(); }, onStateChange: e -> { @@ -243,8 +245,16 @@ class Youtube implements IPlayer { case UNSTARTED: case ENDED: case PLAYING: + if (!isLoaded) { + isLoaded = true; + player.onCanBePlayed(); + } player.onPlay(); case PAUSED: + if (!isLoaded) { + isLoaded = true; + player.onCanBePlayed(); + } player.onPause(); case BUFFERING: player.onSetTime(); diff --git a/src/server/Main.hx b/src/server/Main.hx index e926492..e67fbcb 100644 --- a/src/server/Main.hx +++ b/src/server/Main.hx @@ -848,7 +848,7 @@ class Main { final obj:WsEvent = { type: GetTime, getTime: { - time: videoTimer.getTime() + time: videoTimer.getTime().toFixed() } }; if (videoTimer.isPaused()) obj.getTime.paused = true; |
