From d3856eb695ce9816f20b122362a253da8cb5a29c Mon Sep 17 00:00:00 2001 From: Richie McIlroy <33632126+richiemcilroy@users.noreply.github.com> Date: Mon, 18 Mar 2024 23:03:53 +0000 Subject: [PATCH] fix: Improved permissions checks performance --- apps/desktop/src-tauri/Info.plist | 2 +- .../src/components/windows/Permissions.tsx | 58 ++++++++++--------- 2 files changed, 31 insertions(+), 29 deletions(-) diff --git a/apps/desktop/src-tauri/Info.plist b/apps/desktop/src-tauri/Info.plist index b2daf24ff..bbf95dbd1 100644 --- a/apps/desktop/src-tauri/Info.plist +++ b/apps/desktop/src-tauri/Info.plist @@ -21,7 +21,7 @@ com.apple.security.device.usb com.apple.security.device.camera - This app requires access to the camera for showing camera preview. + com.apple.security.device.microphone com.apple.security.device.audio-input diff --git a/apps/desktop/src/components/windows/Permissions.tsx b/apps/desktop/src/components/windows/Permissions.tsx index 004722d79..43c9e7853 100644 --- a/apps/desktop/src/components/windows/Permissions.tsx +++ b/apps/desktop/src/components/windows/Permissions.tsx @@ -29,41 +29,45 @@ export const Permissions = () => { }; const checkCameraAccess = async () => { - try { - const stream = await navigator.mediaDevices.getUserMedia({ video: true }); - // Assuming access is granted if the above line doesn't throw an error - await savePermissions("camera", true); - setPermissions((prev) => ({ - ...prev, - camera: true, - })); - // Stop using the camera after checking access - stream.getTracks().forEach((track) => track.stop()); - } catch (error) { - console.log("Camera access denied"); + if (navigator.mediaDevices && navigator.mediaDevices.getUserMedia) { + try { + const stream = await navigator.mediaDevices.getUserMedia({ + video: true, + }); + await savePermissions("camera", true); + setPermissions((prev) => ({ + ...prev, + camera: true, + })); + stream.getTracks().forEach((track) => track.stop()); + } catch (error) { + console.log("Camera access denied"); + } } }; const checkMicrophoneAccess = async () => { - try { - const stream = await navigator.mediaDevices.getUserMedia({ audio: true }); - // Assuming access is granted if the above line doesn't throw an error - await savePermissions("microphone", true); - setPermissions((prev) => ({ - ...prev, - microphone: true, - })); - // Stop using the microphone after checking access - stream.getTracks().forEach((track) => track.stop()); - } catch (error) { - console.log("Microphone access denied"); + if (navigator.mediaDevices && navigator.mediaDevices.getUserMedia) { + try { + const stream = await navigator.mediaDevices.getUserMedia({ + audio: true, + }); + await savePermissions("microphone", true); + setPermissions((prev) => ({ + ...prev, + microphone: true, + })); + stream.getTracks().forEach((track) => track.stop()); + } catch (error) { + console.log("Microphone access denied"); + } } }; useEffect(() => { const checkPermissions = async () => { if (!permissions.screen) { - checkScreenCapture(); + await checkScreenCapture(); } if (!permissions.camera) { await checkCameraAccess(); @@ -73,9 +77,7 @@ export const Permissions = () => { } }; - const checkPermissionInterval = setInterval(checkPermissions, 1000); - - return () => clearInterval(checkPermissionInterval); + checkPermissions(); }, [permissions]); const handlePermissionOpened = (permission: string) => {