diff --git a/package.json b/package.json index af87275..59d6ace 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ui", - "version": "6.3.58", + "version": "6.3.59", "license": "BUSL-1.1", "private": true, "packageManager": "pnpm@9.14.4", diff --git a/src/lib/components/ui/player/player.svelte b/src/lib/components/ui/player/player.svelte index 6725bba..be81334 100644 --- a/src/lib/components/ui/player/player.svelte +++ b/src/lib/components/ui/player/player.svelte @@ -688,11 +688,13 @@ return { destroy: () => ctrl.abort() } } - $: $w2globby?.playerStateChanged({ paused, time: Math.floor(currentTime) }) - $: $w2globby?.on('player', state => { + function updateState (state: { paused: boolean, time: number }) { currentTime = state.time paused = state.paused - }) + } + + $: $w2globby?.playerStateChanged({ paused, time: Math.floor(currentTime) }) + $: $w2globby?.on('player', updateState) diff --git a/src/lib/modules/w2g/index.ts b/src/lib/modules/w2g/index.ts index 6e400a7..bb0455c 100644 --- a/src/lib/modules/w2g/index.ts +++ b/src/lib/modules/w2g/index.ts @@ -115,6 +115,16 @@ export class W2GClient extends EventEmitter<{index: [number], player: [PlayerSta } } + _remotePlayerStateChanged (state: PlayerState) { + debug(`_remotePlayerStateChanged: ${this.player.paused} ${state.paused} ${this.player.time} ${state.time}`) + if (!state) return false + // allow for 1s of error + if (Math.abs(this.player.time - state.time) > 2 || this.player.paused !== state.paused) { + this.player = state + return true + } + } + playerStateChanged (state: PlayerState) { debug(`playerStateChanged: ${JSON.stringify(state)}`) if (this._playerStateChanged(state)) this._sendToPeers(new Event('player', state)) @@ -178,7 +188,7 @@ export class W2GClient extends EventEmitter<{index: [number], player: [PlayerSta } case 'player': { if (data.payload?.time == null) break - if (this._playerStateChanged(data.payload)) this.emit('player', data.payload) + if (this._remotePlayerStateChanged(data.payload)) this.emit('player', data.payload) break } case 'message': {