OverviewFilesCommitsIssuesDocsReleasesPeers

keet-deobfuscated / @holepunchto / keet-store / store / media / device.reducer.js

75 lines · javascript ref:
import { createSlice as e, createAction as i } from "@reduxjs/toolkit"
import { userErrorNotification as t } from "../notification/index"
import { DEVICE_ERROR as o } from "./device.constants"
export const updateDevices = i("device/update-devices")
export const DEVICE_STATE_KEY = "device"
const c = {
  devicesMap: {},
  isReady: !1,
  audio: { devices: [], activeDev: null, permission: "" },
  audioOutput: { devices: [], activeDev: null },
  video: { devices: [], activeDev: null, permission: "" },
  shareScreen: { permission: "" },
}
export const deviceSlice = e({
  name: "device",
  initialState: c,
  reducers: {
    setAllDevices: (e, i) => {
      const { devicesMap: t, audio: o, video: c, audioOutput: s } = i.payload
      return {
        ...e,
        devicesMap: t || {},
        audio: { ...e.audio, devices: Array.isArray(o) ? o : [] },
        audioOutput: { ...e.audioOutput, devices: Array.isArray(s) ? s : [] },
        video: { ...e.video, devices: Array.isArray(c) ? c : [] },
        isReady: !0,
      }
    },
    setAudioDevice: (e, i) => {
      const { payload: t } = i
      return { ...e, audio: { ...e.audio, activeDev: t } }
    },
    setAudioOutputDevice: (e, i) => {
      const { payload: t } = i
      return { ...e, audioOutput: { ...e.audioOutput, activeDev: t } }
    },
    setVideoDevice: (e, i) => {
      const { payload: t } = i
      return { ...e, video: { ...e.video, activeDev: t } }
    },
    setMediaPermissions: (e, i) => {
      const {
          payload: { mic: t, camera: o, shareScreen: c },
        } = i,
        s = "string" == typeof t ? { ...e.audio, permission: t } : e.audio,
        d = "string" == typeof o ? { ...e.video, permission: o } : e.video,
        a = "string" == typeof c ? { ...e.shareScreen, permission: c } : e.shareScreen
      return { ...e, audio: s, video: d, shareScreen: a }
    },
  },
})
export const getDeviceState = (e) => e.device
export const getMediaPermissionMic = (e) => getDeviceState(e).audio.permission
export const getMediaPermissionCamera = (e) => getDeviceState(e).video.permission
export const getMediaPermissionShareScreen = (e) => getDeviceState(e).shareScreen.permission
export const getAudioDevice = (e) => getDeviceState(e).audio.activeDev
export const getAudioDevices = (e) => getDeviceState(e).audio.devices
export const getAudioOutputDevice = (e) => getDeviceState(e).audioOutput.activeDev
export const getAudioOutputDevices = (e) => getDeviceState(e).audioOutput.devices
export const getVideoDevice = (e) => getDeviceState(e).video.activeDev
export const getVideoDevices = (e) => getDeviceState(e).video.devices
export const {
  setAllDevices: setAllDevices,
  setAudioDevice: setAudioDevice,
  setAudioOutputDevice: setAudioOutputDevice,
  setVideoDevice: setVideoDevice,
  setMediaPermissions: setMediaPermissions,
} = deviceSlice.actions
export const deviceAllInitCmd = i("media/device-all-init-cmd")
export const deviceAllInitFail = i("media/device-all-init-fail")
export const checkDevicePermissionCompleted = i("media/device-permission-check-completed")
export const deviceUpdateErrorNotification = (e) => t({ title: o.UPDATE, message: e })
export const getDeviceInitialState = deviceSlice.getInitialState
export const deviceReducer = deviceSlice.reducer