From eb44b624d652326c821438c514662659c86a5a07 Mon Sep 17 00:00:00 2001 From: Matthew Raymer Date: Mon, 28 Apr 2025 07:25:25 +0000 Subject: [PATCH] fix(qr): add retry logic to QR scanner initialization - Retries QR scanner initialization up to 3 times if it fails, with a delay between attempts - Improves user experience on slow or delayed camera hardware/browser permission responses - Updates status message to reflect retry attempts --- src/components/QRScanner/QRScannerDialog.vue | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/components/QRScanner/QRScannerDialog.vue b/src/components/QRScanner/QRScannerDialog.vue index 75e5213d..ebc93eea 100644 --- a/src/components/QRScanner/QRScannerDialog.vue +++ b/src/components/QRScanner/QRScannerDialog.vue @@ -273,7 +273,7 @@ export default class QRScannerDialog extends Vue { } } - async onInit(promise: Promise): Promise { + async onInit(promise: Promise, attempt = 1): Promise { if (this.isNativePlatform) { logger.log("Skipping web scanner initialization on native platform"); return; @@ -350,12 +350,17 @@ export default class QRScannerDialog extends Vue { // Now initialize the QR scanner this.initializationStatus = "Starting QR scanner..."; logger.log("Initializing QR scanner..."); - // await promise; // <-- comment this out for debugging - + await promise; this.isInitializing = false; this.cameraStatus = "Ready"; logger.log("QR scanner initialized successfully"); } catch (error) { + if (attempt < 3) { + // Retry after a short delay + setTimeout(() => this.onInit(promise, attempt + 1), 1500); + this.initializationStatus = `Retrying camera initialization (attempt ${attempt + 1})...`; + return; + } const wrappedError = error instanceof Error ? error : new Error(String(error)); this.error = wrappedError.message;