From 9941c6e8705422f031a3468380cbb05b7c30dff5 Mon Sep 17 00:00:00 2001 From: otsmr Date: Wed, 13 May 2026 00:44:17 +0200 Subject: [PATCH] bug fixes --- .../api/client2client/contact.c2c.dart | 26 +++++++++++-------- .../camera_preview_controller_view.dart | 2 ++ .../main_camera_controller.dart | 5 +++- 3 files changed, 21 insertions(+), 12 deletions(-) diff --git a/lib/src/services/api/client2client/contact.c2c.dart b/lib/src/services/api/client2client/contact.c2c.dart index abef0df7..af306db3 100644 --- a/lib/src/services/api/client2client/contact.c2c.dart +++ b/lib/src/services/api/client2client/contact.c2c.dart @@ -60,6 +60,15 @@ Future handleNewContactRequest(int fromUserId) async { } Future handleContactAccept(int fromUserId) async { + final contact = await twonlyDB.contactsDao + .getContactByUserId(fromUserId) + .getSingleOrNull(); + if (contact == null) return; + if (contact.requested || contact.deletedByUser) { + Log.error('User has never send an request. So ignore the Accept.'); + return; + } + await twonlyDB.contactsDao.updateContact( fromUserId, const ContactsCompanion( @@ -68,17 +77,12 @@ Future handleContactAccept(int fromUserId) async { deletedByUser: Value(false), ), ); - final contact = await twonlyDB.contactsDao - .getContactByUserId(fromUserId) - .getSingleOrNull(); - if (contact != null) { - await twonlyDB.groupsDao.createNewDirectChat( - fromUserId, - GroupsCompanion( - groupName: Value(getContactDisplayName(contact)), - ), - ); - } + await twonlyDB.groupsDao.createNewDirectChat( + fromUserId, + GroupsCompanion( + groupName: Value(getContactDisplayName(contact)), + ), + ); } Future handleContactRequest( diff --git a/lib/src/visual/views/camera/camera_preview_components/camera_preview_controller_view.dart b/lib/src/visual/views/camera/camera_preview_components/camera_preview_controller_view.dart index 5f72b655..954b4483 100644 --- a/lib/src/visual/views/camera/camera_preview_components/camera_preview_controller_view.dart +++ b/lib/src/visual/views/camera/camera_preview_components/camera_preview_controller_view.dart @@ -283,6 +283,8 @@ class _CameraPreviewViewState extends State { await Future.delayed(const Duration(milliseconds: 1000)); } + if (!mounted) return; + await mc.cameraController?.pausePreview(); if (!mounted) { return; diff --git a/lib/src/visual/views/camera/camera_preview_components/main_camera_controller.dart b/lib/src/visual/views/camera/camera_preview_components/main_camera_controller.dart index eafad80b..b4737964 100644 --- a/lib/src/visual/views/camera/camera_preview_components/main_camera_controller.dart +++ b/lib/src/visual/views/camera/camera_preview_components/main_camera_controller.dart @@ -85,6 +85,8 @@ class MainCameraController { FaceFilterType _currentFilterType = FaceFilterType.none; FaceFilterType get currentFilterType => _currentFilterType; + Future? _pendingDisposal; + Future closeCamera() async { contactsVerified = {}; scannedNewProfiles = {}; @@ -96,7 +98,7 @@ class MainCameraController { final cameraControllerTemp = cameraController; cameraController = null; // prevents: CameraException(Disposed CameraController, buildPreview() was called on a disposed CameraController.) - Future.delayed(const Duration(milliseconds: 100), () async { + _pendingDisposal = Future.delayed(const Duration(milliseconds: 100), () async { await cameraControllerTemp?.dispose(); }); initCameraStarted = false; @@ -104,6 +106,7 @@ class MainCameraController { } Future selectCamera(int sCameraId, bool init) async { + await _pendingDisposal; initCameraStarted = true; if (AppEnvironment.cameras.isEmpty) {