Mobile stt (#1928)

* chore: if user's language is not in langList, refresh langList

* chore: simplify logic for setting TTS lang, set TTS lang each time speak is called
pull/1688/head
ggurdin 9 months ago committed by GitHub
parent 81f0b296dc
commit 534fe2dfee
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

@ -37,6 +37,7 @@ class LearningProgressIndicatorsState
bool _loading = true;
StreamSubscription<AnalyticsStreamUpdate>? _analyticsSubscription;
StreamSubscription? _languageSubscription;
@override
void initState() {
@ -50,12 +51,20 @@ class LearningProgressIndicatorsState
_analyticsSubscription = MatrixState
.pangeaController.getAnalytics.analyticsStream.stream
.listen(updateData);
// rebuild when target language changes
_languageSubscription =
MatrixState.pangeaController.userController.stateStream.listen((_) {
if (mounted) setState(() {});
});
}
@override
void dispose() {
_analyticsSubscription?.cancel();
_analyticsSubscription = null;
_languageSubscription?.cancel();
_languageSubscription = null;
super.dispose();
}

@ -23,10 +23,11 @@ class PangeaLanguage {
List<LanguageModel> get baseOptions => _langList.toList();
static Future<void> initialize() async {
static Future<void> initialize({forceRefresh = false}) async {
try {
_langList = await _getCachedLanguages();
if (await _shouldFetch ||
if (forceRefresh ||
await _shouldFetch ||
_langList.isEmpty ||
_langList.every((lang) => !lang.l2)) {
_langList = await LanguageRepo.fetchLanguages();
@ -66,7 +67,7 @@ class PangeaLanguage {
}
// return true;
final DateTime lastFetchedDate = DateTime.parse(dateString);
final DateTime targetDate = DateTime(2025, 2, 12);
final DateTime targetDate = DateTime(2025, 2, 26);
if (lastFetchedDate.isBefore(targetDate)) {
return true;
}

@ -4,6 +4,7 @@ import 'dart:developer';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:collection/collection.dart';
import 'package:flutter_tts/flutter_tts.dart' as flutter_tts;
import 'package:matrix/matrix_api_lite/utils/logs.dart';
import 'package:text_to_speech/text_to_speech.dart';
@ -80,20 +81,21 @@ class TtsController {
_availableLangCodes = languages.toSet().toList();
}
void _setLanguage() {
Future<void> _setLanguage() async {
String? langCode;
if (l2LangCode != null && _availableLangCodes.contains(l2LangCode)) {
_useAlternativeTTS
? _alternativeTTS.setLanguage(l2LangCode!)
: _tts.setLanguage(l2LangCode!);
langCode = l2LangCode;
} else if (l2LangCodeShort != null) {
final langCodeShort = l2LangCodeShort!;
final langCode = _availableLangCodes.firstWhere(
langCode = _availableLangCodes.firstWhereOrNull(
(code) => code.startsWith(langCodeShort),
orElse: () => "en",
);
_useAlternativeTTS
}
if (langCode != null) {
await (_useAlternativeTTS
? _alternativeTTS.setLanguage(langCode)
: _tts.setLanguage(langCode);
: _tts.setLanguage(langCode));
}
}
@ -108,8 +110,6 @@ class TtsController {
await _tts.awaitSpeakCompletion(true);
await _setAvailableLanguages();
}
_setLanguage();
} catch (e, s) {
debugger(when: kDebugMode);
ErrorHandler.logError(
@ -181,6 +181,7 @@ class TtsController {
// Target ID for where to show warning popup
String? targetID,
}) async {
await _setLanguage();
final enableTTS = MatrixState
.pangeaController.userController.profile.toolSettings.enableTTS;

@ -12,6 +12,7 @@ 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/constants/language_constants.dart';
import 'package:fluffychat/pangea/learning_settings/models/language_model.dart';
import 'package:fluffychat/pangea/learning_settings/utils/language_list_util.dart';
import 'package:fluffychat/pangea/user/models/profile_model.dart';
import '../models/user_model.dart';
@ -113,6 +114,13 @@ class UserController extends BaseController {
try {
await _initialize();
addProfileListener();
if (profile.userSettings.targetLanguage != null &&
profile.userSettings.targetLanguage!.isNotEmpty &&
_pangeaController.languageController.userL2 == null) {
// update the language list and send an update to refresh analytics summary
await PangeaLanguage.initialize(forceRefresh: true);
setState(null);
}
} catch (err, s) {
ErrorHandler.logError(
e: err,

Loading…
Cancel
Save