import { put as e, all as i, call as s, select as r, getContext as t } from "redux-saga/effects"
import { taskErrorSaga as o } from "../error"
import { PERMISSIONS as n } from "./media-constraints"
import { ENV_CONTEXT_KEY as c, PLATFORM_CONTEXT_KEY as a } from "../constants"
import {
checkDevicePermissionCompleted as d,
getMediaPermissionCamera as m,
getMediaPermissionMic as l,
getMediaPermissionShareScreen as y,
setMediaPermissions as u,
} from "./device.reducer"
import { DEVICE_PERMISSION as h } from "./device.constants"
const p = (e) => e === n.GRANTED || e === n.UNSUPPORTED
export function* isMediaPermissionsSupported() {
const { isMac: e, isMobile: i } = yield t(c)
return e || i
}
export function* cacheAllMediaPermissions() {
if (yield isMediaPermissionsSupported())
try {
const { media: r } = yield t(a),
[o, n] = yield i([s([r.status, r.status.microphone]), s([r.status, r.status.camera])])
yield e(u({ mic: o, camera: n }))
} catch (e) {
yield o("cacheAllMediaPermissions", e)
}
}
export function* requestMicPermissionSaga() {
const { media: e } = yield t(a)
try {
const i = yield s([e.access, e.access.microphone])
return p(i)
} catch (e) {
yield o("requestMicrophonePermissionSaga", e)
}
return !1
}
export function* requestCameraPermissionSaga() {
const { media: e } = yield t(a)
try {
const i = yield s([e.access, e.access.camera])
return p(i)
} catch (e) {
yield o("requestMicrophonePermissionSaga", e)
}
return !1
}
export function* requestScreenPermissionSaga() {
const { media: e } = yield t(a)
try {
const i = yield s([e.access, e.access.screen])
return p(i)
} catch (e) {
yield o("requestMicrophonePermissionSaga", e)
}
return !1
}
export function* checkMicPermissionGranted(i) {
const n = yield r(l)
let c = n
const { media: m } = yield t(a)
try {
c = yield s([m.status, m.status.microphone])
} catch (e) {
yield o("checkMicrophonePermission", e)
}
c !== n && (yield e(u({ mic: c })))
let y = p(c)
return (
y || (y = yield s(requestMicPermissionSaga)),
yield e(
d({
permission: h.MICROPHONE,
isGranted: y,
showPermissionDeniedModal: i?.showPermissionDeniedModal,
}),
),
y
)
}
export function* checkCameraPermissionGranted(i) {
const n = yield r(m)
let c = n
const { media: l } = yield t(a)
try {
c = yield s([l.status, l.status.camera])
} catch (e) {
yield o("checkCameraPermission", e)
}
c !== n && (yield e(u({ camera: c })))
let y = p(c)
return (
y || (y = yield s(requestCameraPermissionSaga)),
yield e(
d({
permission: h.CAMERA,
isGranted: y,
showPermissionDeniedModal: i?.showPermissionDeniedModal,
}),
),
y
)
}
export function* checkScreenSharePermissionGranted() {
const { isMac: i, isMobile: n } = yield t(c)
if (!i && !n) return !0
const m = yield r(y)
let l = m
try {
const { media: e } = yield t(a)
l = yield s([e.status, e.status.screen])
} catch (e) {
yield o("checkScreenShareSaga", e)
}
l !== m && (yield e(u({ shareScreen: l })))
let P = p(l)
return (
P || (P = yield s(requestScreenPermissionSaga)),
yield e(d({ permission: h.SCREEN_SHARE, isGranted: P, showPermissionDeniedModal: !0 })),
P
)
}