brutalism design
This commit is contained in:
74
new-client/src/shared/composables/use-media-controls.ts
Normal file
74
new-client/src/shared/composables/use-media-controls.ts
Normal file
@@ -0,0 +1,74 @@
|
||||
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,
|
||||
}
|
||||
})
|
||||
Reference in New Issue
Block a user