Files
peyawallet/lib/data/config_repository.dart
Codex Bot 8d62045bb6
build / Build Linux wallet (push) Successful in 2m15s
build / Build Windows wallet (push) Successful in 41m26s
Fix wallet startup state and balance refresh
2026-04-10 12:10:03 +02:00

72 lines
1.9 KiB
Dart

import 'dart:convert';
import 'dart:io';
import 'package:logger/logger.dart';
import '../domain/models.dart';
import '../services/app_paths.dart';
class ConfigRepository {
ConfigRepository(this._configFile, this._logger);
final File _configFile;
final Logger _logger;
static Future<ConfigRepository> create(Logger logger) async {
final configFile = await AppPaths.configFile();
return ConfigRepository(configFile, logger);
}
File get configFile => _configFile;
Future<AppConfig> loadConfig() async {
if (await _configFile.exists()) {
return _readConfigFile(_configFile);
}
for (final legacyFile in await AppPaths.legacyConfigFiles()) {
if (!await legacyFile.exists()) {
continue;
}
final config = await _readConfigFile(legacyFile);
await saveConfig(config);
return config;
}
_logger.i('Config not found, using defaults.');
return AppConfig.defaults();
}
Future<void> saveConfig(AppConfig config) async {
try {
await _configFile.writeAsString(AppConfig.prettyPrint(config));
_logger.i('Config saved to ${_configFile.path}');
} catch (error, stack) {
_logger.e('Failed to save config', error: error, stackTrace: stack);
}
}
Map<String, dynamic> _decode(String raw) {
final json = raw.trim().isEmpty ? '{}' : raw;
return json.isEmpty
? <String, dynamic>{}
: (jsonDecode(json) as Map<String, dynamic>);
}
Future<AppConfig> _readConfigFile(File file) async {
try {
final contents = await file.readAsString();
final config = AppConfig.fromJson(_decode(contents));
_logger.i('Loaded config from ${file.path}');
return config;
} catch (error, stack) {
_logger.e(
'Failed to load config from ${file.path}, using defaults.',
error: error,
stackTrace: stack,
);
return AppConfig.defaults();
}
}
}