You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
295 lines
9.4 KiB
Dart
295 lines
9.4 KiB
Dart
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<String, dynamic> 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<String, dynamic> toJson() {
|
|
final data = <String, dynamic>{};
|
|
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,
|
|
data: data,
|
|
);
|
|
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<String, dynamic> 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<String, dynamic> toJson() {
|
|
final data = <String, dynamic>{};
|
|
// 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,
|
|
enableTTS,
|
|
}
|
|
|
|
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;
|
|
case ToolSetting.enableTTS:
|
|
return L10n.of(context).enableTTSToolName;
|
|
}
|
|
}
|
|
|
|
//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;
|
|
case ToolSetting.enableTTS:
|
|
return L10n.of(context).enableTTSToolDescription;
|
|
}
|
|
}
|
|
|
|
bool get isAvailableSetting {
|
|
switch (this) {
|
|
case ToolSetting.interactiveTranslator:
|
|
case ToolSetting.interactiveGrammar:
|
|
case ToolSetting.definitions:
|
|
case ToolSetting.immersionMode:
|
|
return false;
|
|
case ToolSetting.autoIGC:
|
|
case ToolSetting.enableTTS:
|
|
return true;
|
|
}
|
|
}
|
|
}
|