aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRblSb <msrblsb@gmail.com>2025-09-10 16:22:00 +0300
committerRblSb <msrblsb@gmail.com>2025-09-10 16:22:00 +0300
commitd4fb50df4f77cb8d039eaecdc8f6467c5fef4d22 (patch)
tree04fe87f6574f36cafa038bd24e715b0f0e57132a
parent9ec382facd8d7813716a10e5f7db3ca7f4ba0259 (diff)
Rework isLoad player state
closes #67
-rw-r--r--build/server.js2
-rw-r--r--res/client.js36
-rw-r--r--src/client/Player.hx22
-rw-r--r--src/client/players/Youtube.hx12
-rw-r--r--src/server/Main.hx2
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;
send patches to the email below
yukais@pinapelz.com
include the subject [PATCH repo_name]
pinapelz.com
homepage