Browse Source

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
qrcode-reboot
Matthew Raymer 2 days ago
parent
commit
eb44b624d6
  1. 11
      src/components/QRScanner/QRScannerDialog.vue

11
src/components/QRScanner/QRScannerDialog.vue

@ -273,7 +273,7 @@ export default class QRScannerDialog extends Vue {
}
}
async onInit(promise: Promise<void>): Promise<void> {
async onInit(promise: Promise<void>, attempt = 1): Promise<void> {
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;

Loading…
Cancel
Save