import 'dart:developer'; import 'package:fluffychat/pangea/utils/error_handler.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:matrix/matrix.dart'; import '../constants/class_default_values.dart'; import '../constants/language_constants.dart'; import '../constants/pangea_event_types.dart'; import 'language_model.dart'; class LanguageSettingsModel { String? city; String? country; String? schoolName; int? languageLevel; String dominantLanguage; String targetLanguage; LanguageSettingsModel({ this.dominantLanguage = ClassDefaultValues.defaultDominantLanguage, this.targetLanguage = ClassDefaultValues.defaultTargetLanguage, this.languageLevel, this.city, this.country, this.schoolName, }); factory LanguageSettingsModel.fromJson(Map json) { return LanguageSettingsModel( city: json['city'], country: json['country'], dominantLanguage: LanguageModel.codeFromNameOrCode( json['dominant_language'] ?? LanguageKeys.unknownLanguage, ), targetLanguage: LanguageModel.codeFromNameOrCode( json['target_language'] ?? LanguageKeys.unknownLanguage, ), languageLevel: json['language_level'], schoolName: json['school_name'], ); } Map toJson() { final data = {}; try { data['city'] = city; data['country'] = country; //check for and do "english" => en and "spanish" => es data['dominant_language'] = dominantLanguage; //check for and do "english" => en and "spanish" => es data['target_language'] = targetLanguage; data['language_level'] = languageLevel; data['school_name'] = schoolName; return data; } catch (e, s) { debugger(when: kDebugMode); ErrorHandler.logError(e: e, s: s); return data; } } StateEvent get toStateEvent => StateEvent( content: toJson(), type: PangeaEventTypes.languageSettings, ); } class PangeaRoomRules { // int? pangeaClassID; // this is id our database bool isPublic; bool isOpenEnrollment; bool oneToOneChatClass; bool isCreateRooms; bool isShareVideo; bool isSharePhoto; bool isShareFiles; bool isShareLocation; bool isCreateStories; bool isVoiceNotes; bool isInviteOnlyStudents; // 0 = forbidden, 1 = allow individual to choose, 2 = require int interactiveTranslator; int interactiveGrammar; int immersionMode; int definitions; int translations; int autoIGC; PangeaRoomRules({ this.isPublic = false, this.isOpenEnrollment = false, this.oneToOneChatClass = true, this.isCreateRooms = true, this.isShareVideo = true, this.isSharePhoto = true, this.isShareFiles = true, this.isShareLocation = false, this.isCreateStories = false, this.isVoiceNotes = true, this.isInviteOnlyStudents = true, this.interactiveTranslator = ClassDefaultValues.languageToolPermissions, this.interactiveGrammar = ClassDefaultValues.languageToolPermissions, this.immersionMode = ClassDefaultValues.languageToolPermissions, this.definitions = ClassDefaultValues.languageToolPermissions, this.translations = ClassDefaultValues.languageToolPermissions, this.autoIGC = ClassDefaultValues.languageToolPermissions, }); setLanguageToolSetting(ToolSetting setting, int value) { switch (setting) { case ToolSetting.interactiveTranslator: interactiveTranslator = value; break; case ToolSetting.interactiveGrammar: interactiveGrammar = value; break; case ToolSetting.immersionMode: immersionMode = value; break; case ToolSetting.definitions: definitions = value; break; // case ToolSetting.translations: // translations = value; // break; case ToolSetting.autoIGC: autoIGC = value; break; default: throw Exception('Invalid key for setting permissions - $setting'); } } StateEvent get toStateEvent => StateEvent( content: toJson(), type: PangeaEventTypes.rules, ); factory PangeaRoomRules.fromJson(Map json) => PangeaRoomRules( // pangeaClassID: json['pangea_class']; isPublic: json['is_public'], isOpenEnrollment: json['is_open_enrollment'], oneToOneChatClass: json['one_to_one_chat_class'], isCreateRooms: json['is_create_rooms'], isShareVideo: json['is_share_video'], isSharePhoto: json['is_share_photo'], isShareFiles: json['is_share_files'], isShareLocation: json['is_share_location'], isCreateStories: json['is_create_stories'], isVoiceNotes: json['is_voice_notes'], isInviteOnlyStudents: json['is_invite_only_students'] ?? true, interactiveTranslator: json['interactive_translator'] ?? ClassDefaultValues.languageToolPermissions, interactiveGrammar: json['interactive_grammar'] ?? ClassDefaultValues.languageToolPermissions, immersionMode: json['immersion_mode'] ?? ClassDefaultValues.languageToolPermissions, definitions: json['definitions'] ?? ClassDefaultValues.languageToolPermissions, translations: json['translations'] ?? ClassDefaultValues.languageToolPermissions, autoIGC: json['auto_igc'] ?? ClassDefaultValues.languageToolPermissions, ); Map toJson() { final data = {}; // data['pangea_class'] = pangeaClassID; data['is_public'] = isPublic; data['is_open_enrollment'] = isOpenEnrollment; data['one_to_one_chat_class'] = oneToOneChatClass; data['is_create_rooms'] = isCreateRooms; data['is_share_video'] = isShareVideo; data['is_share_photo'] = isSharePhoto; data['is_share_files'] = isShareFiles; data['is_share_location'] = isShareLocation; data['is_create_stories'] = isCreateStories; data['is_voice_notes'] = isVoiceNotes; data['is_invite_only_students'] = isInviteOnlyStudents; data['interactive_translator'] = interactiveTranslator; data['interactive_grammar'] = interactiveGrammar; data['immersion_mode'] = immersionMode; data['definitions'] = definitions; data['translations'] = translations; data['auto_igc'] = autoIGC; return data; } int getToolSettings(ToolSetting setting) { switch (setting) { case ToolSetting.interactiveTranslator: return interactiveTranslator; case ToolSetting.interactiveGrammar: return interactiveGrammar; case ToolSetting.immersionMode: return immersionMode; case ToolSetting.definitions: return definitions; // case ToolSetting.translations: // return translations; case ToolSetting.autoIGC: return autoIGC; default: throw Exception('Invalid key for setting permissions - $setting'); } } String languageToolPermissionsText( BuildContext context, ToolSetting setting, ) { switch (getToolSettings(setting)) { case 0: return L10n.of(context)!.interactiveTranslatorNotAllowed; case 1: return L10n.of(context)!.interactiveTranslatorAllowed; case 2: return L10n.of(context)!.interactiveTranslatorRequired; default: return L10n.of(context)!.notYetSet; } } } enum ToolSetting { interactiveTranslator, interactiveGrammar, immersionMode, definitions, // translations, autoIGC, } extension SettingCopy on ToolSetting { String toolName(BuildContext context) { switch (this) { case ToolSetting.interactiveTranslator: return L10n.of(context)!.interactiveTranslatorSliderHeader; case ToolSetting.interactiveGrammar: return L10n.of(context)!.interactiveGrammarSliderHeader; case ToolSetting.immersionMode: return L10n.of(context)!.toggleImmersionMode; case ToolSetting.definitions: return L10n.of(context)!.definitionsToolName; // case ToolSetting.translations: // return L10n.of(context)!.messageTranslationsToolName; case ToolSetting.autoIGC: return L10n.of(context)!.autoIGCToolName; } } //use l10n to get tool name String toolDescription(BuildContext context) { switch (this) { case ToolSetting.interactiveTranslator: return L10n.of(context)!.itToggleDescription; case ToolSetting.interactiveGrammar: return L10n.of(context)!.igcToggleDescription; case ToolSetting.immersionMode: return L10n.of(context)!.toggleImmersionModeDesc; case ToolSetting.definitions: return L10n.of(context)!.definitionsToolDescription; // case ToolSetting.translations: // return L10n.of(context)!.translationsToolDescrption; case ToolSetting.autoIGC: return L10n.of(context)!.autoIGCToolDescription; } } bool get isAvailableSetting { switch (this) { case ToolSetting.interactiveTranslator: case ToolSetting.interactiveGrammar: case ToolSetting.definitions: return false; case ToolSetting.immersionMode: case ToolSetting.autoIGC: return true; } } }