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
This commit is contained in:
parent
81f0b296dc
commit
534fe2dfee
4 changed files with 32 additions and 13 deletions
|
|
@ -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…
Add table
Reference in a new issue