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) => {