From 9e416eefa1fe084b815d8c5ee399aaf24fb5d926 Mon Sep 17 00:00:00 2001 From: krille-chan Date: Sat, 19 Jul 2025 12:10:03 +0200 Subject: [PATCH 1/2] fix: Delete database correctly after corruption --- .../builder.dart | 29 +++++++++---------- 1 file changed, 13 insertions(+), 16 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 8521b1ffc..a2df2558d 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 @@ -8,7 +8,6 @@ import 'package:path_provider/path_provider.dart'; import 'package:sqflite_common_ffi/sqflite_ffi.dart'; import 'package:universal_html/html.dart' as html; -import 'package:fluffychat/config/app_config.dart'; import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/utils/client_manager.dart'; import 'package:fluffychat/utils/platform_infos.dart'; @@ -25,6 +24,18 @@ Future flutterMatrixSdkDatabaseBuilder(String clientName) async { return database; } catch (e, s) { Logs().wtf('Unable to construct database!', e, s); + + try { + // Send error notification: + final l10n = await lookupL10n(PlatformDispatcher.instance.locale); + ClientManager.sendInitNotification( + l10n.initAppError, + e.toString(), + ); + } catch (e, s) { + Logs().e('Unable to send error notification', e, s); + } + // Try to delete database so that it can created again on next init: database?.delete().catchError( (e, s) => Logs().wtf( @@ -35,25 +46,11 @@ Future flutterMatrixSdkDatabaseBuilder(String clientName) async { ); // Delete database file: - if (database == null && !kIsWeb) { + if (!kIsWeb) { final dbFile = File(await _getDatabasePath(clientName)); if (await dbFile.exists()) await dbFile.delete(); } - try { - // Send error notification: - final l10n = await lookupL10n(PlatformDispatcher.instance.locale); - ClientManager.sendInitNotification( - l10n.initAppError, - l10n.databaseBuildErrorBody( - AppConfig.newIssueUrl.toString(), - e.toString(), - ), - ); - } catch (e, s) { - Logs().e('Unable to send error notification', e, s); - } - rethrow; } } From a37810c0611bc07e14ae1d20852c33eddf41f686 Mon Sep 17 00:00:00 2001 From: krille-chan Date: Sat, 19 Jul 2025 12:33:47 +0200 Subject: [PATCH 2/2] fix: Open database crashes on start --- .../flutter_matrix_dart_sdk_database/builder.dart | 6 +++--- 1 file changed, 3 insertions(+), 3 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 a2df2558d..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 @@ -80,12 +80,12 @@ Future _constructDatabase(String clientName) async { final factory = createDatabaseFactoryFfi(ffiInit: SQfLiteEncryptionHelper.ffiInit); - // migrate from potential previous SQLite database path to current one - await _migrateLegacyLocation(path, clientName); - // required for [getDatabasesPath] databaseFactory = factory; + // migrate from potential previous SQLite database path to current one + await _migrateLegacyLocation(path, clientName); + // in case we got a cipher, we use the encryption helper // to manage SQLite encryption final helper = cipher == null