75 lines
2.1 KiB
TypeScript
75 lines
2.1 KiB
TypeScript
import { createGlobalState } from '@vueuse/core'
|
|
import { computed, ref, watch } from 'vue'
|
|
import { useMediasoup } from './use-mediasoup'
|
|
import { useProducers } from './use-producers'
|
|
|
|
export const useMediaControls = createGlobalState(() => {
|
|
const { producers } = useMediasoup()
|
|
const { enableMic, enableVideo, disableVideo, enableShare, disableShare, pauseProducer, resumeProducer } = useProducers()
|
|
|
|
const micProducer = computed(() => producers.values.value.find(p => p.appData.source === 'mic'))
|
|
const cameraProducer = computed(() => producers.values.value.find(p => p.appData.source === 'camera'))
|
|
const shareProducer = computed(() => producers.values.value.find(p => p.appData.source === 'share'))
|
|
|
|
const isSoundEnabled = ref(true)
|
|
|
|
const isMicEnabled = computed(() => isSoundEnabled.value && !!micProducer.value && !micProducer.value.paused)
|
|
const isCameraEnabled = computed(() => !!cameraProducer.value && !cameraProducer.value.paused)
|
|
const isShareEnabled = computed(() => !!shareProducer.value)
|
|
|
|
watch(isSoundEnabled, async (enabled) => {
|
|
if (!enabled) {
|
|
if (micProducer.value && !micProducer.value.paused)
|
|
await pauseProducer(micProducer.value.id)
|
|
}
|
|
else {
|
|
if (micProducer.value?.paused)
|
|
await resumeProducer(micProducer.value.id)
|
|
}
|
|
})
|
|
|
|
async function toggleMic() {
|
|
if (!isSoundEnabled.value)
|
|
return
|
|
|
|
if (isMicEnabled.value) {
|
|
await pauseProducer(micProducer.value!.id)
|
|
}
|
|
else if (micProducer.value?.paused) {
|
|
await resumeProducer(micProducer.value.id)
|
|
}
|
|
else {
|
|
await enableMic()
|
|
}
|
|
}
|
|
|
|
function toggleSound() {
|
|
isSoundEnabled.value = !isSoundEnabled.value
|
|
}
|
|
|
|
async function toggleCamera() {
|
|
if (isCameraEnabled.value)
|
|
await disableVideo()
|
|
else
|
|
await enableVideo()
|
|
}
|
|
|
|
async function toggleShare() {
|
|
if (isShareEnabled.value)
|
|
await disableShare()
|
|
else
|
|
await enableShare()
|
|
}
|
|
|
|
return {
|
|
isMicEnabled,
|
|
isSoundEnabled,
|
|
isCameraEnabled,
|
|
isShareEnabled,
|
|
toggleMic,
|
|
toggleSound,
|
|
toggleCamera,
|
|
toggleShare,
|
|
}
|
|
})
|