UNPKG

vidstack

Version:

Build awesome media experiences on the web.

62 lines (59 loc) 1.95 kB
import { listenEvent } from 'maverick.js/std'; import { J as LIST_ADD, Q as LIST_REMOVE, L as LIST_SELECT } from '../../media-core.js'; class NativeAudioTracks { constructor(_provider, _context) { this._provider = _provider; this._context = _context; this._nativeTracks.onaddtrack = this._onAddNativeTrack.bind(this); this._nativeTracks.onremovetrack = this._onRemoveNativeTrack.bind(this); this._nativeTracks.onchange = this._onChangeNativeTrack.bind(this); listenEvent(this._context.audioTracks, "change", this._onChangeTrack.bind(this)); } get _nativeTracks() { return this._provider.media.audioTracks; } _onAddNativeTrack(event) { const _track = event.track; if (_track.label === "") return; const audioTrack = { id: _track.id + "", label: _track.label, language: _track.language, kind: _track.kind, selected: false }; this._context.audioTracks[LIST_ADD](audioTrack, event); if (_track.enabled) audioTrack.selected = true; } _onRemoveNativeTrack(event) { const track = this._context.audioTracks.getById(event.track.id); if (track) this._context.audioTracks[LIST_REMOVE](track, event); } _onChangeNativeTrack(event) { let enabledTrack = this._getEnabledNativeTrack(); if (!enabledTrack) return; const track = this._context.audioTracks.getById(enabledTrack.id); if (track) this._context.audioTracks[LIST_SELECT](track, true, event); } _getEnabledNativeTrack() { return Array.from(this._nativeTracks).find((track) => track.enabled); } _onChangeTrack(event) { const { current } = event.detail; if (!current) return; const track = this._nativeTracks.getTrackById(current.id); if (track) { const prev = this._getEnabledNativeTrack(); if (prev) prev.enabled = false; track.enabled = true; } } } export { NativeAudioTracks as N };