vidstack
Version:
Build awesome media experiences on the web.
62 lines (59 loc) • 1.95 kB
JavaScript
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 };