diff --git a/lib/bloc/settings/settings_repository.dart b/lib/bloc/settings/settings_repository.dart index 2dd226a439..05f7c3d58e 100644 --- a/lib/bloc/settings/settings_repository.dart +++ b/lib/bloc/settings/settings_repository.dart @@ -1,5 +1,6 @@ import 'dart:convert'; +import 'package:logging/logging.dart'; import 'package:web_dex/model/stored_settings.dart'; import 'package:web_dex/services/storage/base_storage.dart'; import 'package:web_dex/services/storage/get_storage.dart'; @@ -7,14 +8,13 @@ import 'package:web_dex/shared/constants.dart'; class SettingsRepository { SettingsRepository({BaseStorage? storage}) - : _storage = storage ?? getStorage(); + : _storage = storage ?? getStorage(); final BaseStorage _storage; + static final _log = Logger('SettingsRepository'); Future loadSettings() async { - final dynamic storedAppPrefs = await _storage.read(storedSettingsKey); - - return StoredSettings.fromJson(storedAppPrefs); + return loadStoredSettings(); } Future updateSettings(StoredSettings settings) async { @@ -42,7 +42,12 @@ class SettingsRepository { return StoredSettings.fromJson( legacy is Map ? legacy : null, ); - } catch (_) { + } catch (e, stackTrace) { + _log.warning( + 'Failed to load stored settings, returning initial settings', + e, + stackTrace, + ); return StoredSettings.initial(); } } diff --git a/lib/model/settings/market_maker_bot_settings.dart b/lib/model/settings/market_maker_bot_settings.dart index 72699e529f..559cd2370c 100644 --- a/lib/model/settings/market_maker_bot_settings.dart +++ b/lib/model/settings/market_maker_bot_settings.dart @@ -1,9 +1,12 @@ import 'package:equatable/equatable.dart'; +import 'package:logging/logging.dart'; import 'package:web_dex/mm2/mm2_api/rpc/market_maker_bot/message_service_config/message_service_config.dart'; import 'package:web_dex/mm2/mm2_api/rpc/market_maker_bot/trade_coin_pair_config.dart'; /// Settings for the KDF Simple Market Maker Bot. class MarketMakerBotSettings extends Equatable { + static final Logger _log = Logger('MarketMakerBotSettings'); + const MarketMakerBotSettings({ required this.isMMBotEnabled, required this.botRefreshRate, @@ -38,31 +41,40 @@ class MarketMakerBotSettings extends Equatable { final dynamic configsRaw = json['trade_coin_pair_configs']; final List configs = (configsRaw is List) ? configsRaw - .whereType>() - .map((e) { - try { - // Skip invalid entries that are missing required fields - if (!e.containsKey('name') || - !e.containsKey('base') || - !e.containsKey('rel') || - !e.containsKey('spread') || - !e.containsKey('enable')) { + .map((dynamic e) { + // Log before skipping, rather than silently filtering invalid entries + if (e is! Map) { + _log.warning('Invalid trade coin pair config: $e'); + return null; + } + + try { + // Skip invalid entries rather than crashing on startup + if (!e.containsKey('name') || + !e.containsKey('base') || + !e.containsKey('rel') || + !e.containsKey('spread') || + !e.containsKey('enable')) { + _log.warning('Invalid trade coin pair config: $e'); + return null; + } + return TradeCoinPairConfig.fromJson(e); + } catch (error, stackTrace) { + _log.warning( + 'Invalid trade coin pair config', + error, + stackTrace, + ); return null; } - return TradeCoinPairConfig.fromJson(e); - } catch (_) { - return null; - } - }) - .whereType() - .toList() + }) + .whereType() + .toList() : const []; - final MessageServiceConfig? messageCfg = (json['message_service_config'] - is Map) - ? MessageServiceConfig.fromJson( - json['message_service_config'] as Map, - ) + final MessageServiceConfig? messageCfg = + (json['message_service_config'] is Map) + ? MessageServiceConfig.fromJson(json['message_service_config']) : null; return MarketMakerBotSettings(