From 5f9ab577bb632add478de18501ff9f179a5ed935 Mon Sep 17 00:00:00 2001 From: Robert Eggl Date: Fri, 19 Dec 2025 22:47:37 +0100 Subject: [PATCH] fix: request camera permission in ScannerModal (#1113) * feat: request camera permission in ScannerModal * chore: simplify source code --- frontend/components/App/ScannerModal.vue | 27 +++++++++++------------- 1 file changed, 12 insertions(+), 15 deletions(-) diff --git a/frontend/components/App/ScannerModal.vue b/frontend/components/App/ScannerModal.vue index 546e86b9..8af2a49f 100644 --- a/frontend/components/App/ScannerModal.vue +++ b/frontend/components/App/ScannerModal.vue @@ -81,17 +81,6 @@ errorMessage.value = t("scanner.error"); }; - const checkPermissionsError = async () => { - if (navigator.permissions) { - const permissionStatus = await navigator.permissions.query({ name: "camera" as PermissionName }); - if (permissionStatus.state === "denied") { - errorMessage.value = t("scanner.permission_denied"); - console.error("Camera permission denied"); - return true; - } - } - }; - const handleButtonClick = () => { openDialog(DialogID.ProductImport, { params: { barcode: detectedBarcode.value } }); }; @@ -103,11 +92,19 @@ return; } - if (await checkPermissionsError()) { - return; - } - try { + // Request camera permission first + try { + const stream = await navigator.mediaDevices.getUserMedia({ video: true }); + stream.getTracks().forEach(track => track.stop()); + } catch (err: unknown) { + if (err instanceof Error && err.name === "NotAllowedError") { + errorMessage.value = t("scanner.permission_denied"); + return; + } + throw err; + } + const devices = await codeReader.listVideoInputDevices(); sources.value = devices;