aboutsummaryrefslogtreecommitdiffstats
path: root/src/client
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 /src/client
parent9ec382facd8d7813716a10e5f7db3ca7f4ba0259 (diff)
Rework isLoad player state
closes #67
Diffstat (limited to 'src/client')
-rw-r--r--src/client/Player.hx22
-rw-r--r--src/client/players/Youtube.hx12
2 files changed, 21 insertions, 13 deletions
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();
send patches to the email below
yukais@pinapelz.com
include the subject [PATCH repo_name]
pinapelz.com
homepage