From 54bdbea858ba4b80e3ac00c6b32776fff7f42900 Mon Sep 17 00:00:00 2001 From: otsmr Date: Sat, 14 Mar 2026 01:18:33 +0100 Subject: [PATCH] New: Adds a link if the image contains a QR code --- CHANGELOG.md | 1 + lib/app.dart | 3 +-- lib/main.dart | 3 +++ .../main_camera_controller.dart | 15 ++++++++++++++- 4 files changed, 19 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 92df495..cfbbdc0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,7 @@ ## 0.0.98 +- New: Adds a link if the image contains a QR code - Improve: Video compression with progress updates - Improve: Show message "Flames restored" - Improve: Show toast message if user was added via QR diff --git a/lib/app.dart b/lib/app.dart index 4b1a84f..a60a3b2 100644 --- a/lib/app.dart +++ b/lib/app.dart @@ -1,5 +1,4 @@ import 'dart:async'; -import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:flutter_localizations/flutter_localizations.dart'; import 'package:provider/provider.dart'; @@ -188,7 +187,7 @@ class _AppMainWidgetState extends State { if (_showDatabaseMigration) { child = const Center(child: Text('Please reinstall twonly.')); } else if (_isUserCreated) { - if (gUser.twonlySafeBackup == null && !_skipBackup && kReleaseMode) { + if (gUser.twonlySafeBackup == null && !_skipBackup) { child = SetupBackupView( callBack: () { _skipBackup = true; diff --git a/lib/main.dart b/lib/main.dart index 16f82e8..600d3a7 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -46,6 +46,9 @@ void main() async { } unawaited(performTwonlySafeBackup()); + } else { + Log.info('User is not yet register. Ensure all local data is removed.'); + await deleteLocalUserData(); } globalApplicationCacheDirectory = (await getApplicationCacheDirectory()).path; diff --git a/lib/src/views/camera/camera_preview_components/main_camera_controller.dart b/lib/src/views/camera/camera_preview_components/main_camera_controller.dart index ab61665..a6332f9 100644 --- a/lib/src/views/camera/camera_preview_components/main_camera_controller.dart +++ b/lib/src/views/camera/camera_preview_components/main_camera_controller.dart @@ -1,6 +1,7 @@ import 'dart:async'; import 'dart:io'; import 'package:camera/camera.dart'; +import 'package:clock/clock.dart'; import 'package:collection/collection.dart'; import 'package:drift/drift.dart' show Value; import 'package:flutter/material.dart'; @@ -45,10 +46,11 @@ class MainCameraController { bool isSharePreviewIsShown = false; bool isVideoRecording = false; + DateTime? timeSharedLinkWasSetWithQr; Uri? sharedLinkForPreview; - void setSharedLinkForPreview(Uri url) { + void setSharedLinkForPreview(Uri? url) { sharedLinkForPreview = url; setState(); } @@ -279,11 +281,22 @@ class MainCameraController { ); customPaint = CustomPaint(painter: painter); + if (barcodes.isEmpty && timeSharedLinkWasSetWithQr != null) { + if (timeSharedLinkWasSetWithQr! + .isAfter(DateTime.now().subtract(const Duration(seconds: 2)))) { + setSharedLinkForPreview(null); + } + } + for (final barcode in barcodes) { if (barcode.displayValue != null) { if (barcode.displayValue!.startsWith('http://') || barcode.displayValue!.startsWith('https://')) { scannedUrl = barcode.displayValue; + if (sharedLinkForPreview == null) { + timeSharedLinkWasSetWithQr = clock.now(); + setSharedLinkForPreview(Uri.parse(scannedUrl!)); + } } } if (barcode.rawBytes == null) continue;