Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 10 additions & 5 deletions lib/bloc/settings/settings_repository.dart
Original file line number Diff line number Diff line change
@@ -1,20 +1,20 @@
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';
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<StoredSettings> loadSettings() async {
final dynamic storedAppPrefs = await _storage.read(storedSettingsKey);

return StoredSettings.fromJson(storedAppPrefs);
return loadStoredSettings();
}

Future<void> updateSettings(StoredSettings settings) async {
Expand Down Expand Up @@ -42,7 +42,12 @@ class SettingsRepository {
return StoredSettings.fromJson(
legacy is Map<String, dynamic> ? legacy : null,
);
} catch (_) {
} catch (e, stackTrace) {
_log.warning(
'Failed to load stored settings, returning initial settings',
e,
stackTrace,
);
return StoredSettings.initial();
}
}
Expand Down
54 changes: 33 additions & 21 deletions lib/model/settings/market_maker_bot_settings.dart
Original file line number Diff line number Diff line change
@@ -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,
Expand Down Expand Up @@ -38,31 +41,40 @@ class MarketMakerBotSettings extends Equatable {
final dynamic configsRaw = json['trade_coin_pair_configs'];
final List<TradeCoinPairConfig> configs = (configsRaw is List)
? configsRaw
.whereType<Map<String, dynamic>>()
.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<String, dynamic>) {
_log.warning('Invalid trade coin pair config: $e');
return null;
}

Comment thread
takenagain marked this conversation as resolved.
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<TradeCoinPairConfig>()
.toList()
})
.whereType<TradeCoinPairConfig>()
.toList()
: const <TradeCoinPairConfig>[];

final MessageServiceConfig? messageCfg = (json['message_service_config']
is Map<String, dynamic>)
? MessageServiceConfig.fromJson(
json['message_service_config'] as Map<String, dynamic>,
)
final MessageServiceConfig? messageCfg =
(json['message_service_config'] is Map<String, dynamic>)
? MessageServiceConfig.fromJson(json['message_service_config'])
: null;

return MarketMakerBotSettings(
Expand Down
Loading