fix smaller issues

This commit is contained in:
otsmr 2026-05-12 21:47:45 +02:00
parent 4dbc369003
commit 61979aedcb
5 changed files with 14 additions and 16 deletions

View file

@ -277,7 +277,7 @@ class GroupsDao extends DatabaseAccessor<TwonlyDB> with _$GroupsDaoMixin {
groups.groupId.equalsExp(groupMembers.groupId), groups.groupId.equalsExp(groupMembers.groupId),
), ),
], ],
)..where(groups.isDirectChat.isNull())); )..where(groups.isDirectChat.equals(false)));
return query.map((row) => row.readTable(groupMembers)).get(); return query.map((row) => row.readTable(groupMembers)).get();
} catch (e) { } catch (e) {
Log.error(e); Log.error(e);

View file

@ -6,7 +6,6 @@ import 'package:background_downloader/background_downloader.dart';
import 'package:clock/clock.dart' as clock; import 'package:clock/clock.dart' as clock;
import 'package:http/http.dart' as http; import 'package:http/http.dart' as http;
import 'package:mutex/mutex.dart'; import 'package:mutex/mutex.dart';
import 'package:twonly/core/bridge.dart' as bridge;
import 'package:twonly/core/bridge/wrapper/backup.dart'; import 'package:twonly/core/bridge/wrapper/backup.dart';
import 'package:twonly/globals.dart'; import 'package:twonly/globals.dart';
import 'package:twonly/locator.dart'; import 'package:twonly/locator.dart';
@ -307,17 +306,6 @@ class BackupService {
); );
await deleteLocalUserData(); 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()); await KeyValueStore.put(KeyValueKeys.backupRecoveryState, state.toJson());
return _nextBackupStage(); return _nextBackupStage();
} }

View file

@ -7,7 +7,11 @@ import 'package:twonly/src/utils/exclusive_access.utils.dart';
import 'package:twonly/src/utils/log.dart'; import 'package:twonly/src/utils/log.dart';
class KeyValueStore { class KeyValueStore {
static final Mutex _mutex = Mutex(); static final Map<String, Mutex> _mutexes = {};
static Mutex _getMutex(String key) {
return _mutexes.putIfAbsent(key, Mutex.new);
}
static Future<File> _getFilePath(String key) async { static Future<File> _getFilePath(String key) async {
return File('${AppEnvironment.supportDir}/keyvalue/$key.json'); return File('${AppEnvironment.supportDir}/keyvalue/$key.json');
@ -16,7 +20,7 @@ class KeyValueStore {
static Future<T> _exclusive<T>(String key, Future<T> Function() action) { static Future<T> _exclusive<T>(String key, Future<T> Function() action) {
return exclusiveAccess( return exclusiveAccess(
lockName: 'keyvalue-$key', lockName: 'keyvalue-$key',
mutex: _mutex, mutex: _getMutex(key),
action: action, action: action,
); );
} }

View file

@ -134,6 +134,7 @@ impl BackupArchive {
for (file_name, target_dir, is_db, _) in Self::get_backup_files(ctx, &key_manager)? { for (file_name, target_dir, is_db, _) in Self::get_backup_files(ctx, &key_manager)? {
let src = restore_temp_dir.join(file_name); let src = restore_temp_dir.join(file_name);
if src.exists() { if src.exists() {
std::fs::create_dir_all(&target_dir)?;
let dst = target_dir.join(file_name); let dst = target_dir.join(file_name);
if is_db { if is_db {
// Remove existing database and its temporary files (WAL, SHM) // Remove existing database and its temporary files (WAL, SHM)

View file

@ -82,10 +82,15 @@ impl Context {
async fn init_common(config: InitConfig, is_flutter: bool) -> Result<()> { async fn init_common(config: InitConfig, is_flutter: bool) -> Result<()> {
if GLOBAL_CONTEXT.initialized() { 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(()); 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"); let log_dir = PathBuf::from(&config.data_dir).join("log");
init_tracing(&log_dir, is_flutter).await; init_tracing(&log_dir, is_flutter).await;