UNPKG

@corti/dictation-web

Version:
99 lines 5.95 kB
var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) { if (kind === "m") throw new TypeError("Private method is not writable"); if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter"); if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value; }; var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) { if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); }; var _DevicesController_instances, _DevicesController_autoLoadedDevices, _DevicesController_loadingDevices, _DevicesController_deviceChangeHandler, _DevicesController_initialized, _DevicesController_setupDeviceChangeListener, _DevicesController_removeDeviceChangeListener, _DevicesController_loadDevices; import { getAudioDevices } from "../utils/devices.js"; import { errorEvent, readyEvent, recordingDevicesChangedEvent, } from "../utils/events.js"; /** * Controller that manages automatic device loading. * Loads devices when they're not present and handles device changes. * Reacts to updates and automatically loads devices when needed. */ export class DevicesController { constructor(host) { _DevicesController_instances.add(this); _DevicesController_autoLoadedDevices.set(this, false); _DevicesController_loadingDevices.set(this, false); _DevicesController_deviceChangeHandler.set(this, void 0); _DevicesController_initialized.set(this, false); this.host = host; host.addController(this); } initialize() { __classPrivateFieldSet(this, _DevicesController_initialized, true, "f"); if (this.host.devices === undefined) { __classPrivateFieldGet(this, _DevicesController_instances, "m", _DevicesController_loadDevices).call(this); __classPrivateFieldGet(this, _DevicesController_instances, "m", _DevicesController_setupDeviceChangeListener).call(this); } } hostDisconnected() { __classPrivateFieldGet(this, _DevicesController_instances, "m", _DevicesController_removeDeviceChangeListener).call(this); } hostUpdate() { // Only react to updates after initialization if (!__classPrivateFieldGet(this, _DevicesController_initialized, "f")) { return; } // When devices are accessed but not present, load them if (this.host.devices === undefined) { __classPrivateFieldGet(this, _DevicesController_instances, "m", _DevicesController_loadDevices).call(this); } } /** * Clear the auto-loaded flag (when devices are set externally) */ clearAutoLoadedFlag() { __classPrivateFieldSet(this, _DevicesController_autoLoadedDevices, false, "f"); } } _DevicesController_autoLoadedDevices = new WeakMap(), _DevicesController_loadingDevices = new WeakMap(), _DevicesController_deviceChangeHandler = new WeakMap(), _DevicesController_initialized = new WeakMap(), _DevicesController_instances = new WeakSet(), _DevicesController_setupDeviceChangeListener = function _DevicesController_setupDeviceChangeListener() { if (__classPrivateFieldGet(this, _DevicesController_deviceChangeHandler, "f")) { return; } __classPrivateFieldSet(this, _DevicesController_deviceChangeHandler, () => { if (__classPrivateFieldGet(this, _DevicesController_autoLoadedDevices, "f")) { __classPrivateFieldGet(this, _DevicesController_instances, "m", _DevicesController_loadDevices).call(this); } }, "f"); navigator.mediaDevices.addEventListener("devicechange", __classPrivateFieldGet(this, _DevicesController_deviceChangeHandler, "f")); }, _DevicesController_removeDeviceChangeListener = function _DevicesController_removeDeviceChangeListener() { if (!__classPrivateFieldGet(this, _DevicesController_deviceChangeHandler, "f")) { return; } navigator.mediaDevices.removeEventListener("devicechange", __classPrivateFieldGet(this, _DevicesController_deviceChangeHandler, "f")); __classPrivateFieldSet(this, _DevicesController_deviceChangeHandler, undefined, "f"); }, _DevicesController_loadDevices = async function _DevicesController_loadDevices() { if (__classPrivateFieldGet(this, _DevicesController_loadingDevices, "f")) { return; } __classPrivateFieldSet(this, _DevicesController_loadingDevices, true, "f"); try { const { devices, defaultDevice } = await getAudioDevices(); __classPrivateFieldSet(this, _DevicesController_autoLoadedDevices, true, "f"); this.host._devices = devices; // Use selected device if it still exists, otherwise fall back to default const previousDevice = this.host.selectedDevice; const selectedDevice = (previousDevice && devices.find((d) => d.deviceId === previousDevice.deviceId)) ?? defaultDevice; this.host.selectedDevice = selectedDevice; this.host.requestUpdate(); this.host.dispatchEvent(recordingDevicesChangedEvent(devices, selectedDevice)); this.host.dispatchEvent(readyEvent()); } catch (error) { this.host.dispatchEvent(errorEvent(error)); } finally { __classPrivateFieldSet(this, _DevicesController_loadingDevices, false, "f"); } }; //# sourceMappingURL=devices-controller.js.map