Fix playerElement not being set
This commit is contained in:
@@ -32,6 +32,7 @@
|
||||
playerDefaultQualityStore,
|
||||
playerProxyVideosStore,
|
||||
playerSavePlaybackPositionStore,
|
||||
playerState,
|
||||
playerStatisticsByDefault,
|
||||
playerYouTubeJsFallback,
|
||||
sponsorBlockCategoriesStore,
|
||||
@@ -458,6 +459,10 @@
|
||||
});
|
||||
playerElement = document.getElementById('player') as HTMLMediaElement;
|
||||
|
||||
if ($playerState) {
|
||||
playerState.set({ ...$playerState, playerElement: playerElement });
|
||||
}
|
||||
|
||||
// Due to how our player is rendered in layout for stateful pip
|
||||
// we calaculate player height to then allow children pages
|
||||
// to wrap around it.
|
||||
|
||||
@@ -259,17 +259,6 @@
|
||||
});
|
||||
|
||||
let webManifestLink = $derived(pwaInfo ? pwaInfo.webManifest.linkTag : '');
|
||||
|
||||
let playerElement: HTMLMediaElement | undefined = $state();
|
||||
let playerElementCaught = false;
|
||||
|
||||
$effect(() => {
|
||||
if ($playerState && playerElement && !playerElementCaught) {
|
||||
playerElementCaught = true;
|
||||
|
||||
playerState.set({ ...$playerState, playerElement: playerElement });
|
||||
}
|
||||
});
|
||||
</script>
|
||||
|
||||
<svelte:head>
|
||||
@@ -423,7 +412,7 @@
|
||||
<div class="space"></div>
|
||||
{/if}
|
||||
{#key $playerState.data.video.videoId}
|
||||
<Player data={$playerState.data} isSyncing={$playerState.isSyncing} {playerElement} />
|
||||
<Player data={$playerState.data} isSyncing={$playerState.isSyncing} />
|
||||
{/key}
|
||||
{#if playerIsPip}
|
||||
<nav>
|
||||
|
||||
@@ -74,10 +74,6 @@
|
||||
isSyncing: $syncPartyPeerStore !== null
|
||||
});
|
||||
|
||||
playerState.subscribe((updatedPlayerState) => {
|
||||
playerElement = updatedPlayerState?.playerElement;
|
||||
});
|
||||
|
||||
$effect(() => {
|
||||
if ($interfaceAutoExpandComments && comments) {
|
||||
expandSummery('comment-section');
|
||||
@@ -223,41 +219,52 @@
|
||||
playerSyncEvents(connections[connections.length - 1]);
|
||||
});
|
||||
|
||||
onMount(async () => {
|
||||
if (data.playlistId) {
|
||||
await goToCurrentPlaylistItem();
|
||||
playerPlaylistHistory.set([data.video.videoId, ...$playerPlaylistHistory]);
|
||||
}
|
||||
onMount(() => {
|
||||
// Required due to needing the playerElement
|
||||
let loadedPlayer = false;
|
||||
playerState.subscribe(async (updatedPlayerState) => {
|
||||
if (!updatedPlayerState?.playerElement || loadedPlayer) {
|
||||
return;
|
||||
}
|
||||
loadedPlayer = true;
|
||||
|
||||
if ($interfaceAutoExpandChapters) {
|
||||
expandSummery('chapter-section');
|
||||
}
|
||||
playerElement = updatedPlayerState.playerElement;
|
||||
|
||||
if ($syncPartyConnectionsStore) {
|
||||
$syncPartyConnectionsStore.forEach((conn) => {
|
||||
playerSyncEvents(conn);
|
||||
});
|
||||
}
|
||||
if (data.playlistId) {
|
||||
await goToCurrentPlaylistItem();
|
||||
playerPlaylistHistory.set([data.video.videoId, ...$playerPlaylistHistory]);
|
||||
}
|
||||
|
||||
if (playerElement) {
|
||||
playerElement.addEventListener('timeupdate', () => {
|
||||
if (!playerElement) return;
|
||||
playerCurrentTime = playerElement.currentTime;
|
||||
});
|
||||
}
|
||||
if ($interfaceAutoExpandChapters) {
|
||||
expandSummery('chapter-section');
|
||||
}
|
||||
|
||||
if (data.video.premiereTimestamp) {
|
||||
premiereTime = humanFriendlyTimestamp(data.video.premiereTimestamp);
|
||||
premiereUpdateInterval = setInterval(async () => {
|
||||
data = await getWatchDetails(data.video.videoId, page.url);
|
||||
if ($syncPartyConnectionsStore) {
|
||||
$syncPartyConnectionsStore.forEach((conn) => {
|
||||
playerSyncEvents(conn);
|
||||
});
|
||||
}
|
||||
|
||||
if (data.video.premiereTimestamp) {
|
||||
premiereTime = humanFriendlyTimestamp(data.video.premiereTimestamp);
|
||||
} else {
|
||||
clearInterval(premiereUpdateInterval);
|
||||
}
|
||||
}, 60000);
|
||||
}
|
||||
if (playerElement) {
|
||||
playerElement.addEventListener('timeupdate', () => {
|
||||
if (!playerElement) return;
|
||||
playerCurrentTime = playerElement.currentTime;
|
||||
});
|
||||
}
|
||||
|
||||
if (data.video.premiereTimestamp) {
|
||||
premiereTime = humanFriendlyTimestamp(data.video.premiereTimestamp);
|
||||
premiereUpdateInterval = setInterval(async () => {
|
||||
data = await getWatchDetails(data.video.videoId, page.url);
|
||||
|
||||
if (data.video.premiereTimestamp) {
|
||||
premiereTime = humanFriendlyTimestamp(data.video.premiereTimestamp);
|
||||
} else {
|
||||
clearInterval(premiereUpdateInterval);
|
||||
}
|
||||
}, 60000);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
onDestroy(() => {
|
||||
@@ -271,6 +278,15 @@
|
||||
if (premiereUpdateInterval) {
|
||||
clearInterval(premiereUpdateInterval);
|
||||
}
|
||||
|
||||
if (
|
||||
playerElement?.paused ||
|
||||
playerElement?.ended ||
|
||||
playerElement?.currentTime === 0 ||
|
||||
playerElement?.readyState === 2
|
||||
) {
|
||||
playerState.set(undefined);
|
||||
}
|
||||
});
|
||||
|
||||
async function goToCurrentPlaylistItem() {
|
||||
|
||||
Reference in New Issue
Block a user