From 0d7807bed3100fb0a59d9d10103efe8d6497dba1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christian=20Ku=C3=9Fowski?= Date: Tue, 11 Nov 2025 10:52:26 +0100 Subject: [PATCH] fix: Possible database corruption cause by allow multiple instances --- .../builder.dart | 1 - .../notification_background_handler.dart | 36 ++----------------- 2 files changed, 3 insertions(+), 34 deletions(-) diff --git a/lib/utils/matrix_sdk_extensions/flutter_matrix_dart_sdk_database/builder.dart b/lib/utils/matrix_sdk_extensions/flutter_matrix_dart_sdk_database/builder.dart index 09738b518..3387fdf38 100644 --- a/lib/utils/matrix_sdk_extensions/flutter_matrix_dart_sdk_database/builder.dart +++ b/lib/utils/matrix_sdk_extensions/flutter_matrix_dart_sdk_database/builder.dart @@ -105,7 +105,6 @@ Future _constructDatabase(String clientName) async { version: 1, // most important : apply encryption when opening the DB onConfigure: helper?.applyPragmaKey, - singleInstance: false, ), ); diff --git a/lib/utils/notification_background_handler.dart b/lib/utils/notification_background_handler.dart index aa8ea17dd..aec2d747a 100644 --- a/lib/utils/notification_background_handler.dart +++ b/lib/utils/notification_background_handler.dart @@ -3,21 +3,17 @@ import 'dart:ui'; import 'package:collection/collection.dart'; import 'package:flutter_local_notifications/flutter_local_notifications.dart'; -import 'package:flutter_vodozemac/flutter_vodozemac.dart' as vod; import 'package:go_router/go_router.dart'; import 'package:matrix/matrix.dart'; import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/utils/client_download_content_extension.dart'; -import 'package:fluffychat/utils/client_manager.dart'; import 'package:fluffychat/utils/matrix_sdk_extensions/matrix_locals.dart'; import 'package:fluffychat/utils/platform_infos.dart'; import 'package:fluffychat/utils/push_helper.dart'; import '../config/app_config.dart'; import '../config/setting_keys.dart'; -bool _vodInitialized = false; - extension NotificationResponseJson on NotificationResponse { String toJsonString() => jsonEncode({ 'type': notificationResponseType.name, @@ -49,35 +45,9 @@ void notificationTapBackground( Logs().i('Notification tap in background'); final sendPort = IsolateNameServer.lookupPortByName('background_tab_port'); - if (sendPort != null) { - sendPort.send(notificationResponse.toJsonString()); - return; - } - - if (!_vodInitialized) { - await vod.init(); - _vodInitialized = true; - } - final store = await AppSettings.init(); - final client = (await ClientManager.getClients( - initialize: false, - store: store, - )) - .first; - await client.abortSync(); - await client.init( - waitForFirstSync: false, - waitUntilLoadCompletedLoaded: false, - ); - - if (!client.isLogged()) { - throw Exception('Notification tab in background but not logged in!'); - } - try { - await notificationTap(notificationResponse, client: client); - } finally { - await client.dispose(closeDatabase: false); - } + if (sendPort == null) throw Exception('Main isolate not up!'); + sendPort.send(notificationResponse.toJsonString()); + Logs().wtf('Send notification tap intent to main isolate!'); return; }