@corti/dictation-web
Version:
Web component for Corti Dictation
99 lines • 5.95 kB
JavaScript
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