From 93c8393ab7cbb3f3d1696676a8e8910f25673e65 Mon Sep 17 00:00:00 2001 From: ggurdin Date: Tue, 3 Feb 2026 09:16:38 -0500 Subject: [PATCH] fix: update data type of user genders in bot options model --- .../models/bot_options_model.dart | 38 +++++++++++++------ .../utils/bot_client_extension.dart | 12 +++++- 2 files changed, 37 insertions(+), 13 deletions(-) diff --git a/lib/pangea/chat_settings/models/bot_options_model.dart b/lib/pangea/chat_settings/models/bot_options_model.dart index d8670dbab..8800212b7 100644 --- a/lib/pangea/chat_settings/models/bot_options_model.dart +++ b/lib/pangea/chat_settings/models/bot_options_model.dart @@ -24,7 +24,7 @@ class BotOptionsModel { final String? textAdventureGameMasterInstructions; final String? targetLanguage; final String? targetVoice; - final GenderEnum targetGender; + final Map userGenders; const BotOptionsModel({ //////////////////////////////////////////////////////////////////////////// @@ -37,7 +37,7 @@ class BotOptionsModel { this.mode = BotMode.discussion, this.targetLanguage, this.targetVoice, - this.targetGender = GenderEnum.unselected, + this.userGenders = const {}, //////////////////////////////////////////////////////////////////////////// // Discussion Mode Options @@ -61,6 +61,22 @@ class BotOptionsModel { }); factory BotOptionsModel.fromJson(json) { + final genderEntry = json[ModelKey.targetGender]; + Map targetGenders = {}; + if (genderEntry is Map) { + targetGenders = Map.fromEntries( + genderEntry.entries.map( + (e) => MapEntry( + e.key, + GenderEnum.values.firstWhere( + (g) => g.name == e.value, + orElse: () => GenderEnum.unselected, + ), + ), + ), + ); + } + return BotOptionsModel( ////////////////////////////////////////////////////////////////////////// // General Bot Options @@ -76,12 +92,7 @@ class BotOptionsModel { mode: json[ModelKey.mode] ?? BotMode.discussion, targetLanguage: json[ModelKey.targetLanguage], targetVoice: json[ModelKey.targetVoice], - targetGender: json[ModelKey.targetGender] != null - ? GenderEnum.values.firstWhere( - (g) => g.name == json[ModelKey.targetGender], - orElse: () => GenderEnum.unselected, - ) - : GenderEnum.unselected, + userGenders: targetGenders, ////////////////////////////////////////////////////////////////////////// // Discussion Mode Options @@ -112,6 +123,11 @@ class BotOptionsModel { Map toJson() { final data = {}; try { + final Map gendersEntry = {}; + for (final entry in userGenders.entries) { + gendersEntry[entry.key] = entry.value.name; + } + // data[ModelKey.isConversationBotChat] = isConversationBotChat; data[ModelKey.languageLevel] = languageLevel.storageInt; data[ModelKey.safetyModeration] = safetyModeration; @@ -130,7 +146,7 @@ class BotOptionsModel { data[ModelKey.customTriggerReactionKey] = customTriggerReactionKey ?? "⏩"; data[ModelKey.textAdventureGameMasterInstructions] = textAdventureGameMasterInstructions; - data[ModelKey.targetGender] = targetGender.name; + data[ModelKey.targetGender] = gendersEntry; return data; } catch (e, s) { debugger(when: kDebugMode); @@ -159,7 +175,7 @@ class BotOptionsModel { String? textAdventureGameMasterInstructions, String? targetLanguage, String? targetVoice, - GenderEnum? targetGender, + Map? userGenders, }) { return BotOptionsModel( languageLevel: languageLevel ?? this.languageLevel, @@ -183,7 +199,7 @@ class BotOptionsModel { this.textAdventureGameMasterInstructions, targetLanguage: targetLanguage ?? this.targetLanguage, targetVoice: targetVoice ?? this.targetVoice, - targetGender: targetGender ?? this.targetGender, + userGenders: userGenders ?? this.userGenders, ); } } diff --git a/lib/pangea/chat_settings/utils/bot_client_extension.dart b/lib/pangea/chat_settings/utils/bot_client_extension.dart index 6ae38cb56..c1ad861b7 100644 --- a/lib/pangea/chat_settings/utils/bot_client_extension.dart +++ b/lib/pangea/chat_settings/utils/bot_client_extension.dart @@ -9,6 +9,7 @@ import 'package:fluffychat/pangea/chat_settings/constants/bot_mode.dart'; import 'package:fluffychat/pangea/chat_settings/models/bot_options_model.dart'; import 'package:fluffychat/pangea/common/utils/error_handler.dart'; import 'package:fluffychat/pangea/events/constants/pangea_event_types.dart'; +import 'package:fluffychat/pangea/learning_settings/gender_enum.dart'; import 'package:fluffychat/pangea/user/user_model.dart'; import 'package:fluffychat/widgets/matrix.dart'; @@ -64,15 +65,22 @@ extension BotClientExtension on Client { if (botOptions.targetLanguage == targetLanguage && botOptions.languageLevel == languageLevel && botOptions.targetVoice == voice && - botOptions.targetGender == gender) { + botOptions.userGenders[userID] == gender) { continue; } + final updatedGenders = + Map.from(botOptions.userGenders); + + if (updatedGenders[userID] != gender) { + updatedGenders[userID!] = gender; + } + final updated = botOptions.copyWith( targetLanguage: targetLanguage, languageLevel: languageLevel, targetVoice: voice, - targetGender: gender, + userGenders: updatedGenders, ); futures.add(targetBotRoom.setBotOptions(updated)); }