diff --git a/src/components/video-player/player-magnet.svelte b/src/components/video-player/player-magnet.svelte index ffd91d0..8c77d81 100644 --- a/src/components/video-player/player-magnet.svelte +++ b/src/components/video-player/player-magnet.svelte @@ -3,6 +3,7 @@ import type { Link } from '../normalize-link'; import Loader from '../loader.svelte'; import { getStreamUrl } from '../../stores/web-torrent'; + import { sleep } from '../../utils'; import VideoPlayerNative from './video-player-native.svelte'; import VideoSelectorBtn from '../video-selector-btn.svelte'; @@ -10,10 +11,6 @@ export let currentTime: number; export let paused: boolean; export let muted: boolean; - - const sleep = function(ms: number): Promise { - return new Promise(resolve => setTimeout(resolve, ms)); - }; {#if !navigator.serviceWorker} diff --git a/src/stores/web-torrent.ts b/src/stores/web-torrent.ts index 184f839..16cce16 100644 --- a/src/stores/web-torrent.ts +++ b/src/stores/web-torrent.ts @@ -1,5 +1,6 @@ -import { iceServers, webTorrentTrackers } from '../settings'; import { readable, writable } from 'svelte/store'; +import { iceServers, webTorrentTrackers } from '../settings'; +import { sleep } from '../utils'; // @ts-ignore window.WEBTORRENT_ANNOUNCE = null; @@ -12,25 +13,16 @@ const initWebtorrent = async function () { return; } - const reg = await navigator.serviceWorker.register('/sw.min.js'); - const worker = reg.active || reg.waiting || reg.installing as ServiceWorker; + await navigator.serviceWorker.register('/sw.min.js'); + await navigator.serviceWorker.ready; - await new Promise(resolve => { - function checkState (worker: any): boolean { - return worker.state === 'activated'; - } - if (!checkState(worker)) { - worker.addEventListener('statechange', ({ target }) => { - if (checkState(target)) { - isInitiated = true; - resolve(); - } - }); + while (true) { + if ((await navigator.serviceWorker.getRegistration())?.active?.state === 'activated') { + return; } else { - isInitiated = true; - resolve(); + await sleep(1000); } - }); + } }; const promise = async function (obj: any, f: any, ...arg: any) { diff --git a/src/utils.ts b/src/utils.ts index afdee4a..9b99d08 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -10,3 +10,6 @@ export const randomStr = function (length: number): string { return result; }; +export const sleep = function(ms: number): Promise { + return new Promise(resolve => setTimeout(resolve, ms)); +};