40 lines
1.3 KiB
TypeScript
40 lines
1.3 KiB
TypeScript
import { createGlobalState, useDevicesList, useLocalStorage } from '@vueuse/core'
|
|
|
|
export const usePreferences = createGlobalState(() => {
|
|
const inputDeviceId = useLocalStorage<MediaDeviceInfo['deviceId']>('INPUT_DEVICE_ID', 'default')
|
|
const outputDeviceId = useLocalStorage<MediaDeviceInfo['deviceId']>('OUTPUT_DEVICE_ID', 'default')
|
|
|
|
const autoGainControl = useLocalStorage('AUTO_GAIN_CONTROL', false)
|
|
const noiseSuppression = useLocalStorage('NOISE_SUPPRESSION', true)
|
|
const echoCancellation = useLocalStorage('ECHO_CANCELLATION', true)
|
|
|
|
const {
|
|
ensurePermissions,
|
|
permissionGranted,
|
|
videoInputs,
|
|
audioInputs,
|
|
audioOutputs,
|
|
} = useDevicesList()
|
|
|
|
const inputDeviceExist = computed(() => {
|
|
return audioInputs.value.some(device => device.deviceId === inputDeviceId.value)
|
|
})
|
|
|
|
const outputDeviceExist = computed(() => {
|
|
return audioOutputs.value.some(device => device.deviceId === outputDeviceId.value)
|
|
})
|
|
|
|
return {
|
|
inputDeviceId,
|
|
outputDeviceId,
|
|
autoGainControl,
|
|
noiseSuppression,
|
|
echoCancellation,
|
|
inputDeviceExist,
|
|
outputDeviceExist,
|
|
videoInputs: computed(() => JSON.parse(JSON.stringify(videoInputs.value))),
|
|
audioInputs: computed(() => JSON.parse(JSON.stringify(audioInputs.value))),
|
|
audioOutputs: computed(() => JSON.parse(JSON.stringify(audioOutputs.value))),
|
|
}
|
|
})
|