Skip to content

Commit e0d64a1

Browse files
committed
Player init: Handle RCs, try again if player not found
1 parent 40e0c62 commit e0d64a1

1 file changed

Lines changed: 36 additions & 24 deletions

File tree

src/scripts/page/player.ts

Lines changed: 36 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -85,33 +85,45 @@ export const init = async () => {
8585
});
8686
};
8787

88-
export const initPlayer = async () => {
89-
const player = await getAPlayer();
88+
let initLock = false;
89+
const initPlayer = async () => {
90+
if (initLock) return;
91+
initLock = true;
9092

91-
if (!player || player._enhancerInit)
92-
return; // already initialized this player
93-
await waitForButtonsAndSetIds();
94-
95-
player.addEventListener('ended', () => sendMessage(Message.QUEUE_NEXT, null, false));
96-
const handlers = getPlayerController();
97-
handlers?.store.subscribe(e => e.qualityLevels, setPlayerQuality);
98-
setPlayerQuality();
99-
100-
const { autoplay, autoplayQueue } = options;
101-
console.debug('autoplay?', autoplay, 'autoplayQueue?', autoplayQueue);
102-
await addPlayerControls(player);
103-
if (options.autoExpand) document.body.parentElement.classList.toggle('enhancer-fullVideo');
104-
105-
const { canNext, canPrev, length: queueLen } = await sendMessage(Message.GET_QSTATUS);
106-
console.debug('canGoNext?', canNext, 'canGoPrev?', canPrev, 'queueLen:', queueLen);
107-
updatePlayerControls(player, canNext, canPrev);
108-
player.autoplay = autoplay || (autoplayQueue && !!queueLen);
10993
try {
110-
if (player.autoplay) await player.play();
111-
else player.pause();
112-
} catch { }
94+
const player = await getAPlayer();
95+
96+
if (!player || player._enhancerInit)
97+
return; // already initialized this player
98+
const handlers = getPlayerController();
99+
100+
await waitForButtonsAndSetIds();
101+
102+
if (!handlers)
103+
return setTimeout(initPlayer, 100);
113104

114-
player._enhancerInit = true;
105+
player.addEventListener('ended', () => sendMessage(Message.QUEUE_NEXT, null, false));
106+
handlers?.store.subscribe(e => e.qualityLevels, setPlayerQuality);
107+
setPlayerQuality();
108+
109+
const { autoplay, autoplayQueue } = options;
110+
console.debug('autoplay?', autoplay, 'autoplayQueue?', autoplayQueue);
111+
await addPlayerControls(player);
112+
if (options.autoExpand) document.body.parentElement.classList.toggle('enhancer-fullVideo');
113+
114+
const { canNext, canPrev, length: queueLen } = await sendMessage(Message.GET_QSTATUS);
115+
console.debug('canGoNext?', canNext, 'canGoPrev?', canPrev, 'queueLen:', queueLen);
116+
updatePlayerControls(player, canNext, canPrev);
117+
player.autoplay = autoplay || (autoplayQueue && !!queueLen);
118+
try {
119+
if (player.autoplay) await player.play();
120+
else player.pause();
121+
} catch { }
122+
123+
player._enhancerInit = true;
124+
} finally {
125+
initLock = false;
126+
}
115127
};
116128

117129
export const findAPlayer = () => document.querySelector<Player>('#video-player video');

0 commit comments

Comments
 (0)