From 547380e8119df446472f18fbd0c6ac33b2a6701d Mon Sep 17 00:00:00 2001 From: Niko PLP <niko@nextgraph.org> Date: Sun, 14 Jul 2024 18:56:52 +0300 Subject: [PATCH] error handling on wallet/scanqr --- ng-app/src/locales/en.json | 3 ++- ng-app/src/routes/ScanQR.svelte | 31 ++++++++++++++++++++++--------- 2 files changed, 24 insertions(+), 10 deletions(-) diff --git a/ng-app/src/locales/en.json b/ng-app/src/locales/en.json index c4aa8d7..09a35aa 100644 --- a/ng-app/src/locales/en.json +++ b/ng-app/src/locales/en.json @@ -358,7 +358,8 @@ "ExportWalletTimeOut": "The wallet-export session has expired. Try again.", "ConnectionError": "Could not connect to the server.", "IncompatibleQrCode": "You scanned a NextGraph QR-Code that is of the wrong type.", - "NotARendezVous": "You scanned an invalid QR-Code." + "NotARendezVous": "You scanned an invalid QR-Code.", + "camera_unavailable": "Camera is unavailable." }, "connectivity": { "stopped": "Stopped", diff --git a/ng-app/src/routes/ScanQR.svelte b/ng-app/src/routes/ScanQR.svelte index 0d1ec40..316714f 100644 --- a/ng-app/src/routes/ScanQR.svelte +++ b/ng-app/src/routes/ScanQR.svelte @@ -18,14 +18,14 @@ import { onMount, onDestroy } from "svelte"; import { t } from "svelte-i18n"; import { scanned_qr_code } from "../store"; - import { ArrowLeft } from "svelte-heros-v2"; + import { ArrowLeft, ExclamationTriangle } from "svelte-heros-v2"; import { Spinner } from "flowbite-svelte"; - let tauri_platform = import.meta.env.TAURI_PLATFORM; let mobile = tauri_platform == "android" || tauri_platform == "ios"; let webScanner; let nativeScanner; + let error = false; function on_qr_scanned(content) { scanned_qr_code.set(content); @@ -64,12 +64,17 @@ on_qr_scanned(decoded_text); }); } catch (e) { - webScanner = new Html5Qrcode ("scanner-div"); - await webScanner.start({ facingMode: "environment" }, { fps: 10, qrbox: { width: 300, height: 300 }, formatsToSupport: [0] }, (decoded_text, decoded_result) => { - //console.log(decoded_result); - // Handle scan result - on_qr_scanned(decoded_text); - }); + try { + webScanner = new Html5Qrcode ("scanner-div"); + await webScanner.start({ facingMode: "environment" }, { fps: 10, qrbox: { width: 300, height: 300 }, formatsToSupport: [0] }, (decoded_text, decoded_result) => { + //console.log(decoded_result); + // Handle scan result + on_qr_scanned(decoded_text); + }); + } catch (e) { + webScanner = null; + error = true; + } } // // Add scanner to Screen. @@ -118,10 +123,18 @@ <div> <h2 class="text-xl mb-6">{$t("pages.scan_qr.scanning")}</h2> </div> - <Spinner /> + {#if !error}<Spinner />{/if} <!-- Web Scanner --> <div id="scanner-div"></div> + {#if error} + <div class="mx-6 max-w-6xl lg:px-8 mx-auto px-4 text-red-800"> + <ExclamationTriangle class="animate-bounce mt-10 h-16 w-16 mx-auto" /> + + {@html $t("errors.camera_unavailable")} + + </div> + {/if} <div class="mx-auto max-w-xs"> <button on:click={() => window.history.go(-1)}