getTranslationState function
Implementation
TranslationState getTranslationState(MediasfuParameters parameters) {
final preferences = parameters.listenerTranslationPreferences;
final perSpeaker = (preferences?.perSpeaker ?? const <String, String>{})
.entries
.map((entry) => TranslationPreference(
speakerId: entry.key,
language: entry.value.isEmpty ? null : entry.value,
wantOriginal: entry.value.isEmpty,
))
.toList(growable: false);
final languages = <String>{};
final global = preferences?.globalLanguage;
if (global != null && global.isNotEmpty) languages.add(global);
for (final entry in perSpeaker) {
if (entry.language != null) languages.add(entry.language!);
}
for (final value in parameters.speakerTranslationStates?.values ?? const []) {
if (value is Map && value['language'] is String) {
final language = value['language'] as String;
if (language.isNotEmpty) languages.add(language);
}
}
return TranslationState(
globalLanguage: global,
perSpeaker: perSpeaker,
active: (global != null && global.isNotEmpty) ||
perSpeaker.any((entry) => !entry.wantOriginal),
availableLanguages: List<String>.unmodifiable(languages),
);
}