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.
fluffychat/lib/pangea/controllers/language_controller.dart

113 lines
3.7 KiB
Dart

import 'dart:developer';
import 'package:fluffychat/pangea/constants/language_keys.dart';
import 'package:fluffychat/pangea/controllers/language_list_controller.dart';
import 'package:fluffychat/pangea/controllers/pangea_controller.dart';
import 'package:fluffychat/pangea/extensions/pangea_room_extension/pangea_room_extension.dart';
import 'package:fluffychat/pangea/models/class_model.dart';
import 'package:fluffychat/pangea/models/language_model.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:matrix/matrix.dart';
import 'package:sentry_flutter/sentry_flutter.dart';
import '../widgets/user_settings/p_language_dialog.dart';
class LanguageController {
late PangeaController _pangeaController;
LanguageController(PangeaController pangeaController) {
_pangeaController = pangeaController;
}
//show diloag when user does not have languages selected
showDialogOnEmptyLanguage(BuildContext dialogContext, Function callback) {
if (_pangeaController.userController.userModel?.profile == null) {
debugger(when: kDebugMode);
Sentry.addBreadcrumb(
Breadcrumb(
message: 'calling showDialogOnEmptyLanguagae with empty user',
),
);
return;
}
if (!languagesSet) {
pLanguageDialog(dialogContext, callback);
}
}
bool get languagesSet =>
_userL1Code != null &&
_userL2Code != null &&
_userL1Code!.isNotEmpty &&
_userL2Code!.isNotEmpty &&
_userL1Code != LanguageKeys.unknownLanguage &&
_userL2Code != LanguageKeys.unknownLanguage;
String? get _userL1Code {
final source =
_pangeaController.userController.userModel?.profile?.sourceLanguage;
return source == null || source.isEmpty ? null : source;
}
String? get _userL2Code {
final target =
_pangeaController.userController.userModel?.profile?.targetLanguage;
return target == null || target.isEmpty ? null : target;
}
LanguageModel? get userL1 {
return _userL1Code != null ? PangeaLanguage.byLangCode(_userL1Code!) : null;
}
LanguageModel? get userL2 {
return _userL2Code != null ? PangeaLanguage.byLangCode(_userL2Code!) : null;
}
String? activeL1Code({String? roomID}) {
final String? activeL2 = activeL2Code(roomID: roomID);
if (roomID == null || activeL2 != _userL1Code) {
return _userL1Code;
}
final ClassSettingsModel? classContext = _pangeaController
.matrixState.client
.getRoomById(roomID)
?.firstLanguageSettings;
final String? classL1 = classContext?.dominantLanguage;
if (classL1 == LanguageKeys.mixedLanguage ||
classL1 == LanguageKeys.multiLanguage ||
classL1 == null) {
if (_userL2Code != _userL1Code) {
return _userL2Code;
}
return LanguageKeys.unknownLanguage;
}
return classL1;
}
/// Class languages override user languages within a class context
String? activeL2Code({String? roomID}) {
if (roomID == null) {
return _userL2Code;
}
final ClassSettingsModel? classContext = _pangeaController
.matrixState.client
.getRoomById(roomID)
?.firstLanguageSettings;
return classContext?.targetLanguage ?? _userL2Code;
}
LanguageModel? activeL1Model({String? roomID}) {
final activeL1 = activeL1Code(roomID: roomID);
return activeL1 != null ? PangeaLanguage.byLangCode(activeL1) : null;
}
LanguageModel? activeL2Model({String? roomID}) {
final activeL2 = activeL2Code(roomID: roomID);
final model = activeL2 != null ? PangeaLanguage.byLangCode(activeL2) : null;
return model;
}
bool equalActiveL1AndActiveL2({Room? room}) =>
activeL1Code() == activeL2Code(roomID: room?.id);
}