From 61979aedcb46f3b0c08a593e9af35501201bff9a Mon Sep 17 00:00:00 2001 From: otsmr Date: Tue, 12 May 2026 21:47:45 +0200 Subject: [PATCH] fix smaller issues --- lib/src/database/daos/groups.dao.dart | 2 +- lib/src/services/backup.service.dart | 12 ------------ lib/src/utils/keyvalue.dart | 8 ++++++-- rust/src/backup/backup_archive.rs | 1 + rust/src/context.rs | 7 ++++++- 5 files changed, 14 insertions(+), 16 deletions(-) diff --git a/lib/src/database/daos/groups.dao.dart b/lib/src/database/daos/groups.dao.dart index 28fe0883..f3e844bd 100644 --- a/lib/src/database/daos/groups.dao.dart +++ b/lib/src/database/daos/groups.dao.dart @@ -277,7 +277,7 @@ class GroupsDao extends DatabaseAccessor with _$GroupsDaoMixin { groups.groupId.equalsExp(groupMembers.groupId), ), ], - )..where(groups.isDirectChat.isNull())); + )..where(groups.isDirectChat.equals(false))); return query.map((row) => row.readTable(groupMembers)).get(); } catch (e) { Log.error(e); diff --git a/lib/src/services/backup.service.dart b/lib/src/services/backup.service.dart index b84a66d0..fb186044 100644 --- a/lib/src/services/backup.service.dart +++ b/lib/src/services/backup.service.dart @@ -6,7 +6,6 @@ import 'package:background_downloader/background_downloader.dart'; import 'package:clock/clock.dart' as clock; import 'package:http/http.dart' as http; import 'package:mutex/mutex.dart'; -import 'package:twonly/core/bridge.dart' as bridge; import 'package:twonly/core/bridge/wrapper/backup.dart'; import 'package:twonly/globals.dart'; import 'package:twonly/locator.dart'; @@ -307,17 +306,6 @@ class BackupService { ); await deleteLocalUserData(); - try { - await bridge.initializeTwonlyFlutter( - config: bridge.InitConfig( - databaseDir: AppEnvironment.supportDir, - dataDir: AppEnvironment.supportDir, - ), - ); - } catch (e) { - Log.error(e); - return RecoveryError.unkownError; - } await KeyValueStore.put(KeyValueKeys.backupRecoveryState, state.toJson()); return _nextBackupStage(); } diff --git a/lib/src/utils/keyvalue.dart b/lib/src/utils/keyvalue.dart index 25b0617d..f879a208 100644 --- a/lib/src/utils/keyvalue.dart +++ b/lib/src/utils/keyvalue.dart @@ -7,7 +7,11 @@ import 'package:twonly/src/utils/exclusive_access.utils.dart'; import 'package:twonly/src/utils/log.dart'; class KeyValueStore { - static final Mutex _mutex = Mutex(); + static final Map _mutexes = {}; + + static Mutex _getMutex(String key) { + return _mutexes.putIfAbsent(key, Mutex.new); + } static Future _getFilePath(String key) async { return File('${AppEnvironment.supportDir}/keyvalue/$key.json'); @@ -16,7 +20,7 @@ class KeyValueStore { static Future _exclusive(String key, Future Function() action) { return exclusiveAccess( lockName: 'keyvalue-$key', - mutex: _mutex, + mutex: _getMutex(key), action: action, ); } diff --git a/rust/src/backup/backup_archive.rs b/rust/src/backup/backup_archive.rs index 5e7e08f3..bcbd73a4 100644 --- a/rust/src/backup/backup_archive.rs +++ b/rust/src/backup/backup_archive.rs @@ -134,6 +134,7 @@ impl BackupArchive { for (file_name, target_dir, is_db, _) in Self::get_backup_files(ctx, &key_manager)? { let src = restore_temp_dir.join(file_name); if src.exists() { + std::fs::create_dir_all(&target_dir)?; let dst = target_dir.join(file_name); if is_db { // Remove existing database and its temporary files (WAL, SHM) diff --git a/rust/src/context.rs b/rust/src/context.rs index 3ac01d50..53361e38 100644 --- a/rust/src/context.rs +++ b/rust/src/context.rs @@ -82,10 +82,15 @@ impl Context { async fn init_common(config: InitConfig, is_flutter: bool) -> Result<()> { if GLOBAL_CONTEXT.initialized() { - tracing::info!("twonly already initialized."); + tracing::info!("twonly already initialized. Ensuring storage directories exist."); + std::fs::create_dir_all(&config.database_dir)?; + std::fs::create_dir_all(&config.data_dir)?; return Ok(()); } + std::fs::create_dir_all(&config.database_dir)?; + std::fs::create_dir_all(&config.data_dir)?; + let log_dir = PathBuf::from(&config.data_dir).join("log"); init_tracing(&log_dir, is_flutter).await;