87 lines
1.8 KiB
TypeScript
87 lines
1.8 KiB
TypeScript
import { createGlobalState } from '@vueuse/core'
|
|
import { useClients } from '~/composables/use-clients'
|
|
|
|
export const useApp = createGlobalState(() => {
|
|
const { clients } = useClients()
|
|
const mediasoup = useMediasoup()
|
|
const toast = useToast()
|
|
|
|
const inputMuted = ref(false)
|
|
const outputMuted = ref(false)
|
|
|
|
const previousInputMuted = ref(inputMuted.value)
|
|
|
|
const me = computed(() => clients.value.find(client => client.isMe))
|
|
|
|
function muteInput() {
|
|
inputMuted.value = true
|
|
}
|
|
|
|
function unmuteInput() {
|
|
inputMuted.value = false
|
|
}
|
|
|
|
function toggleInput() {
|
|
if (inputMuted.value)
|
|
unmuteInput()
|
|
else
|
|
muteInput()
|
|
}
|
|
|
|
function muteOutput() {
|
|
outputMuted.value = true
|
|
}
|
|
|
|
function unmuteOutput() {
|
|
outputMuted.value = false
|
|
}
|
|
|
|
function toggleOutput() {
|
|
if (outputMuted.value)
|
|
unmuteOutput()
|
|
else
|
|
muteOutput()
|
|
}
|
|
|
|
watch(inputMuted, async (inputMuted) => {
|
|
if (inputMuted) {
|
|
await mediasoup.muteMic()
|
|
}
|
|
else {
|
|
if (outputMuted.value) {
|
|
outputMuted.value = false
|
|
}
|
|
await mediasoup.unmuteMic()
|
|
}
|
|
|
|
const toastText = inputMuted ? 'Microphone muted' : 'Microphone activated'
|
|
toast.add({ severity: 'info', summary: toastText, closable: false, life: 1000 })
|
|
})
|
|
|
|
watch(outputMuted, (outputMuted) => {
|
|
if (outputMuted) {
|
|
previousInputMuted.value = inputMuted.value
|
|
muteInput()
|
|
}
|
|
else {
|
|
inputMuted.value = previousInputMuted.value
|
|
}
|
|
|
|
const toastText = outputMuted ? 'Sound muted' : 'Sound resumed'
|
|
toast.add({ severity: 'info', summary: toastText, closable: false, life: 1000 })
|
|
})
|
|
|
|
return {
|
|
clients,
|
|
me,
|
|
inputMuted,
|
|
muteInput,
|
|
unmuteInput,
|
|
toggleInput,
|
|
outputMuted,
|
|
muteOutput,
|
|
unmuteOutput,
|
|
toggleOutput,
|
|
}
|
|
})
|