From c256388e8b6dd723a51990a7b475077ad9d15e76 Mon Sep 17 00:00:00 2001 From: ggurdin Date: Mon, 10 Nov 2025 15:57:40 -0500 Subject: [PATCH] remove unnecesary choreographer extensions --- lib/pages/chat/chat.dart | 32 +++++++++++-------- lib/pages/chat/input_bar.dart | 19 +++++------ .../chat/widgets/pangea_chat_input_row.dart | 11 +++++-- .../choregrapher_user_settings_extension.dart | 26 --------------- .../choreographer/choreo_constants.dart | 1 + lib/pangea/choreographer/choreographer.dart | 27 +++++++++------- .../choreographer_ui_extension.dart | 12 ------- .../choreographer/igc/start_igc_button.dart | 3 +- lib/pangea/choreographer/it/it_bar.dart | 27 ++++++++-------- lib/pangea/common/utils/overlay.dart | 4 +-- lib/pangea/spaces/models/space_model.dart | 8 +++-- 11 files changed, 76 insertions(+), 94 deletions(-) delete mode 100644 lib/pangea/choreographer/choregrapher_user_settings_extension.dart delete mode 100644 lib/pangea/choreographer/choreographer_ui_extension.dart diff --git a/lib/pages/chat/chat.dart b/lib/pages/chat/chat.dart index 475e7dc2a..96240c3f4 100644 --- a/lib/pages/chat/chat.dart +++ b/lib/pages/chat/chat.dart @@ -40,11 +40,10 @@ import 'package:fluffychat/pangea/bot/utils/bot_name.dart'; import 'package:fluffychat/pangea/chat/utils/unlocked_morphs_snackbar.dart'; import 'package:fluffychat/pangea/chat/widgets/event_too_large_dialog.dart'; import 'package:fluffychat/pangea/choreographer/assistance_state_enum.dart'; -import 'package:fluffychat/pangea/choreographer/choregrapher_user_settings_extension.dart'; +import 'package:fluffychat/pangea/choreographer/choreo_constants.dart'; import 'package:fluffychat/pangea/choreographer/choreo_record_model.dart'; import 'package:fluffychat/pangea/choreographer/choreographer.dart'; import 'package:fluffychat/pangea/choreographer/choreographer_state_extension.dart'; -import 'package:fluffychat/pangea/choreographer/choreographer_ui_extension.dart'; import 'package:fluffychat/pangea/choreographer/text_editing/edit_type_enum.dart'; import 'package:fluffychat/pangea/choreographer/text_editing/pangea_text_controller.dart'; import 'package:fluffychat/pangea/common/controllers/pangea_controller.dart'; @@ -1751,10 +1750,10 @@ class ChatController extends State Future onInputBarSubmitted() async { // send(); if (MatrixState.pangeaController.subscriptionController.shouldShowPaywall) { - PaywallCard.show(context, choreographer.inputTransformTargetKey); + PaywallCard.show(context, ChoreoConstants.inputTransformTargetKey); return; } - await onRequestWritingAssistance(autosend: true); + await onRequestWritingAssistance(manual: false, autosend: true); // FocusScope.of(context).requestFocus(inputFocus); // Pangea# } @@ -2078,7 +2077,7 @@ class ChatController extends State // analytics based on when / how many messages the logged in user send. This // stream sends the data for newly sent messages. if (originalSent?.langCode.split("-").first != - choreographer.l2Lang?.langCodeShort) { + MatrixState.pangeaController.languageController.userL2?.langCodeShort) { return; } @@ -2142,8 +2141,10 @@ class ChatController extends State ); final stt = await messageEvent.getSpeechToText( - choreographer.l1Lang?.langCodeShort ?? LanguageKeys.unknownLanguage, - choreographer.l2Lang?.langCodeShort ?? LanguageKeys.unknownLanguage, + MatrixState.pangeaController.languageController.userL1?.langCodeShort ?? + LanguageKeys.unknownLanguage, + MatrixState.pangeaController.languageController.userL2?.langCodeShort ?? + LanguageKeys.unknownLanguage, ); if (stt == null || stt.transcript.sttTokens.isEmpty) return; final constructs = stt.constructs(roomId, eventId); @@ -2175,8 +2176,10 @@ class ChatController extends State return false; } - final l1 = choreographer.l1Lang?.langCodeShort; - final l2 = choreographer.l2Lang?.langCodeShort; + final l1 = + MatrixState.pangeaController.languageController.userL1?.langCodeShort; + final l2 = + MatrixState.pangeaController.languageController.userL2?.langCodeShort; final activityLang = room.activityPlan?.req.targetLanguage.split('-').first; return activityLang != null && @@ -2185,12 +2188,15 @@ class ChatController extends State l1 != activityLang; } - Future onRequestWritingAssistance({bool autosend = false}) async { + Future onRequestWritingAssistance({ + bool manual = false, + bool autosend = false, + }) async { if (shouldShowLanguageMismatchPopup) { return showLanguageMismatchPopup(); } - await choreographer.requestWritingAssistance(); + await choreographer.requestWritingAssistance(manual: manual); if (choreographer.assistanceState == AssistanceStateEnum.fetched) { final match = choreographer.igcController.firstOpenMatch!; match.updatedMatch.isITStart @@ -2227,13 +2233,13 @@ class ChatController extends State ); WidgetsBinding.instance.addPostFrameCallback( - (_) => onRequestWritingAssistance(autosend: true), + (_) => onRequestWritingAssistance(manual: false, autosend: true), ); }, ), maxHeight: 325, maxWidth: 325, - transformTargetId: choreographer.inputTransformTargetKey, + transformTargetId: ChoreoConstants.inputTransformTargetKey, ); } diff --git a/lib/pages/chat/input_bar.dart b/lib/pages/chat/input_bar.dart index 7bcead53b..6e2f691ab 100644 --- a/lib/pages/chat/input_bar.dart +++ b/lib/pages/chat/input_bar.dart @@ -8,10 +8,9 @@ import 'package:matrix/matrix.dart'; import 'package:slugify/slugify.dart'; import 'package:fluffychat/l10n/l10n.dart'; -import 'package:fluffychat/pangea/choreographer/choregrapher_user_settings_extension.dart'; +import 'package:fluffychat/pangea/choreographer/choreo_constants.dart'; import 'package:fluffychat/pangea/choreographer/choreographer.dart'; import 'package:fluffychat/pangea/choreographer/choreographer_state_extension.dart'; -import 'package:fluffychat/pangea/choreographer/choreographer_ui_extension.dart'; import 'package:fluffychat/pangea/choreographer/text_editing/pangea_text_controller.dart'; import 'package:fluffychat/pangea/common/utils/overlay.dart'; import 'package:fluffychat/pangea/learning_settings/constants/language_constants.dart'; @@ -435,13 +434,15 @@ class InputBar extends StatelessWidget { return L10n.of(context).buildTranslation; } - return choreographer.l1Lang != null && - choreographer.l2Lang != null && - choreographer.l1Lang!.langCode != LanguageKeys.unknownLanguage && - choreographer.l2Lang!.langCode != LanguageKeys.unknownLanguage + return MatrixState.pangeaController.languageController.userL1 != null && + MatrixState.pangeaController.languageController.userL2 != null && + MatrixState.pangeaController.languageController.userL1!.langCode != + LanguageKeys.unknownLanguage && + MatrixState.pangeaController.languageController.userL2!.langCode != + LanguageKeys.unknownLanguage ? L10n.of(context).writeAMessageLangCodes( - choreographer.l1Lang!.displayName, - choreographer.l2Lang!.displayName, + MatrixState.pangeaController.languageController.userL1!.displayName, + MatrixState.pangeaController.languageController.userL2!.displayName, ) : L10n.of(context).writeAMessage; } @@ -453,7 +454,7 @@ class InputBar extends StatelessWidget { final subscriptionStatus = MatrixState.pangeaController.subscriptionController.subscriptionStatus; if (subscriptionStatus == SubscriptionStatus.shouldShowPaywall) { - PaywallCard.show(context, choreographer.inputTransformTargetKey); + PaywallCard.show(context, ChoreoConstants.inputTransformTargetKey); return; } diff --git a/lib/pangea/chat/widgets/pangea_chat_input_row.dart b/lib/pangea/chat/widgets/pangea_chat_input_row.dart index 3155a969e..f0c211231 100644 --- a/lib/pangea/chat/widgets/pangea_chat_input_row.dart +++ b/lib/pangea/chat/widgets/pangea_chat_input_row.dart @@ -7,12 +7,13 @@ import 'package:fluffychat/config/themes.dart'; import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/pages/chat/chat.dart'; import 'package:fluffychat/pages/chat/input_bar.dart'; +import 'package:fluffychat/pangea/choreographer/choreo_constants.dart'; import 'package:fluffychat/pangea/choreographer/choreographer_send_button.dart'; import 'package:fluffychat/pangea/choreographer/choreographer_state_extension.dart'; -import 'package:fluffychat/pangea/choreographer/choreographer_ui_extension.dart'; import 'package:fluffychat/pangea/choreographer/igc/start_igc_button.dart'; import 'package:fluffychat/pangea/learning_settings/models/language_model.dart'; import 'package:fluffychat/utils/platform_infos.dart'; +import 'package:fluffychat/widgets/matrix.dart'; class PangeaChatInputRow extends StatelessWidget { final ChatController controller; @@ -36,7 +37,9 @@ class PangeaChatInputRow extends StatelessWidget { return Column( children: [ CompositedTransformTarget( - link: controller.choreographer.inputLayerLinkAndKey.link, + link: MatrixState.pAnyState + .layerLinkAndKey(ChoreoConstants.inputTransformTargetKey) + .link, child: Container( decoration: const BoxDecoration( borderRadius: BorderRadius.all( @@ -44,7 +47,9 @@ class PangeaChatInputRow extends StatelessWidget { ), ), child: Row( - key: controller.choreographer.inputLayerLinkAndKey.key, + key: MatrixState.pAnyState + .layerLinkAndKey(ChoreoConstants.inputTransformTargetKey) + .key, crossAxisAlignment: CrossAxisAlignment.center, mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ diff --git a/lib/pangea/choreographer/choregrapher_user_settings_extension.dart b/lib/pangea/choreographer/choregrapher_user_settings_extension.dart deleted file mode 100644 index 13421cde4..000000000 --- a/lib/pangea/choreographer/choregrapher_user_settings_extension.dart +++ /dev/null @@ -1,26 +0,0 @@ -import 'package:fluffychat/pangea/choreographer/choreographer.dart'; -import 'package:fluffychat/pangea/learning_settings/models/language_model.dart'; -import 'package:fluffychat/pangea/spaces/models/space_model.dart'; -import 'package:fluffychat/widgets/matrix.dart'; - -extension ChoregrapherUserSettingsExtension on Choreographer { - LanguageModel? get l2Lang => - MatrixState.pangeaController.languageController.activeL2Model(); - String? get l2LangCode => l2Lang?.langCode; - LanguageModel? get l1Lang => - MatrixState.pangeaController.languageController.activeL1Model(); - String? get l1LangCode => l1Lang?.langCode; - - bool get igcEnabled => - MatrixState.pangeaController.permissionsController.isToolEnabled( - ToolSetting.interactiveGrammar, - ); - bool get itEnabled => - MatrixState.pangeaController.permissionsController.isToolEnabled( - ToolSetting.interactiveTranslator, - ); - bool get isAutoIGCEnabled => - MatrixState.pangeaController.permissionsController.isToolEnabled( - ToolSetting.autoIGC, - ); -} diff --git a/lib/pangea/choreographer/choreo_constants.dart b/lib/pangea/choreographer/choreo_constants.dart index c48827d87..85b9e6186 100644 --- a/lib/pangea/choreographer/choreo_constants.dart +++ b/lib/pangea/choreographer/choreo_constants.dart @@ -10,4 +10,5 @@ class ChoreoConstants { static const red = Colors.red; static const int msBeforeIGCStart = 10000; static const int maxLength = 1000; + static const String inputTransformTargetKey = 'input_text_field'; } diff --git a/lib/pangea/choreographer/choreographer.dart b/lib/pangea/choreographer/choreographer.dart index 6805de4fe..790b780b0 100644 --- a/lib/pangea/choreographer/choreographer.dart +++ b/lib/pangea/choreographer/choreographer.dart @@ -3,7 +3,6 @@ import 'dart:async'; import 'package:flutter/material.dart'; import 'package:fluffychat/pangea/choreographer/assistance_state_enum.dart'; -import 'package:fluffychat/pangea/choreographer/choregrapher_user_settings_extension.dart'; import 'package:fluffychat/pangea/choreographer/choreo_constants.dart'; import 'package:fluffychat/pangea/choreographer/choreo_mode_enum.dart'; import 'package:fluffychat/pangea/choreographer/choreo_record_model.dart'; @@ -19,6 +18,7 @@ import 'package:fluffychat/pangea/events/models/representation_content_model.dar import 'package:fluffychat/pangea/events/models/tokens_event_content_model.dart'; import 'package:fluffychat/pangea/events/repo/token_api_models.dart'; import 'package:fluffychat/pangea/learning_settings/constants/language_constants.dart'; +import 'package:fluffychat/pangea/spaces/models/space_model.dart'; import 'package:fluffychat/pangea/subscription/controllers/subscription_controller.dart'; import 'package:fluffychat/pangea/toolbar/controllers/tts_controller.dart'; import 'package:fluffychat/widgets/future_loading_dialog.dart'; @@ -190,8 +190,8 @@ class Choreographer extends ChangeNotifier { textController.editType = EditTypeEnum.keyboard; } - Future requestWritingAssistance() => - _getWritingAssistance(manual: true); + Future requestWritingAssistance({bool manual = false}) => + _getWritingAssistance(manual: manual); Future _getWritingAssistance({ bool manual = false, @@ -201,10 +201,13 @@ class Choreographer extends ChangeNotifier { MatrixState.pangeaController.subscriptionController.subscriptionStatus; if (canSendStatus != SubscriptionStatus.subscribed || - l2Lang == null || - l1Lang == null || - (!igcEnabled && !itEnabled) || - (!isAutoIGCEnabled && !manual && _choreoMode != ChoreoModeEnum.it)) { + MatrixState.pangeaController.languageController.userL2 == null || + MatrixState.pangeaController.languageController.userL1 == null || + (!ToolSetting.interactiveGrammar.enabled && + !ToolSetting.interactiveTranslator.enabled) || + (!ToolSetting.autoIGC.enabled && + !manual && + _choreoMode != ChoreoModeEnum.it)) { return; } @@ -225,6 +228,10 @@ class Choreographer extends ChangeNotifier { Future getMessageContent(String message) async { TokensResponseModel? tokensResp; + final l2LangCode = + MatrixState.pangeaController.languageController.userL2?.langCode; + final l1LangCode = + MatrixState.pangeaController.languageController.userL1?.langCode; if (l1LangCode != null && l2LangCode != null) { final res = await MatrixState.pangeaController.messageData .getTokens( @@ -232,8 +239,8 @@ class Choreographer extends ChangeNotifier { room: null, req: TokensRequestModel( fullText: message, - senderL1: l1LangCode!, - senderL2: l2LangCode!, + senderL1: l1LangCode, + senderL2: l2LangCode, ), ) .timeout(const Duration(seconds: 10)); @@ -409,8 +416,6 @@ class Choreographer extends ChangeNotifier { s: s, data: { "currentText": currentText, - "l1LangCode": l1LangCode, - "l2LangCode": l2LangCode, "choreoRecord": _record.toJson(), }, ); diff --git a/lib/pangea/choreographer/choreographer_ui_extension.dart b/lib/pangea/choreographer/choreographer_ui_extension.dart deleted file mode 100644 index b60ccbe7d..000000000 --- a/lib/pangea/choreographer/choreographer_ui_extension.dart +++ /dev/null @@ -1,12 +0,0 @@ -import 'package:fluffychat/pangea/choreographer/choreographer.dart'; -import 'package:fluffychat/pangea/common/utils/any_state_holder.dart'; -import 'package:fluffychat/widgets/matrix.dart'; - -extension ChoregrapherUserSettingsExtension on Choreographer { - LayerLinkAndKey get itBarLinkAndKey => - MatrixState.pAnyState.layerLinkAndKey(itBarTransformTargetKey); - String get itBarTransformTargetKey => 'it_bar'; - LayerLinkAndKey get inputLayerLinkAndKey => - MatrixState.pAnyState.layerLinkAndKey(inputTransformTargetKey); - String get inputTransformTargetKey => 'input_text_field'; -} diff --git a/lib/pangea/choreographer/igc/start_igc_button.dart b/lib/pangea/choreographer/igc/start_igc_button.dart index b3c7e9917..111a440f4 100644 --- a/lib/pangea/choreographer/igc/start_igc_button.dart +++ b/lib/pangea/choreographer/igc/start_igc_button.dart @@ -135,7 +135,8 @@ class _StartIGCButtonState extends State enableFeedback: enableFeedback, customBorder: const CircleBorder(), onTap: enableFeedback - ? widget.controller.onRequestWritingAssistance + ? () => + widget.controller.onRequestWritingAssistance(manual: true) : null, onLongPress: enableFeedback ? () => showDialog( diff --git a/lib/pangea/choreographer/it/it_bar.dart b/lib/pangea/choreographer/it/it_bar.dart index 7edd41bad..eaeb537b5 100644 --- a/lib/pangea/choreographer/it/it_bar.dart +++ b/lib/pangea/choreographer/it/it_bar.dart @@ -5,10 +5,8 @@ import 'package:flutter/material.dart'; import 'package:sentry_flutter/sentry_flutter.dart'; import 'package:fluffychat/l10n/l10n.dart'; -import 'package:fluffychat/pangea/choreographer/choregrapher_user_settings_extension.dart'; import 'package:fluffychat/pangea/choreographer/choreo_constants.dart'; import 'package:fluffychat/pangea/choreographer/choreographer.dart'; -import 'package:fluffychat/pangea/choreographer/choreographer_ui_extension.dart'; import 'package:fluffychat/pangea/choreographer/it/completed_it_step_model.dart'; import 'package:fluffychat/pangea/choreographer/it/it_feedback_card.dart'; import 'package:fluffychat/pangea/choreographer/it/word_data_card.dart'; @@ -104,28 +102,33 @@ class ITBarState extends State with SingleTickerProviderStateMixin { } final text = currentStep.continuances[index].text; + final l1Code = + MatrixState.pangeaController.languageController.userL1!.langCode; + final l2Code = + MatrixState.pangeaController.languageController.userL2!.langCode; + MatrixState.pAnyState.closeOverlay("it_feedback_card"); OverlayUtil.showPositionedCard( context: context, cardToShow: choiceFeedback == null ? WordDataCard( word: text, - wordLang: widget.choreographer.l2LangCode!, + wordLang: l2Code, fullText: _sourceText.value ?? widget.choreographer.currentText, - fullTextLang: widget.choreographer.l1LangCode!, + fullTextLang: l2Code, ) : ITFeedbackCard( FullTextTranslationRequestModel( text: text, - tgtLang: widget.choreographer.l1LangCode!, - userL1: widget.choreographer.l1LangCode!, - userL2: widget.choreographer.l2LangCode!, + tgtLang: l1Code, + userL1: l1Code, + userL2: l2Code, ), ), maxHeight: 300, maxWidth: 300, borderColor: borderColor, - transformTargetId: widget.choreographer.itBarTransformTargetKey, + transformTargetId: 'it_bar', isScrollable: choiceFeedback == null, overlayKey: "it_feedback_card", ignorePointer: true, @@ -196,9 +199,7 @@ class ITBarState extends State with SingleTickerProviderStateMixin { child: child, ), child: CompositedTransformTarget( - link: MatrixState.pAnyState - .layerLinkAndKey(widget.choreographer.itBarTransformTargetKey) - .link, + link: MatrixState.pAnyState.layerLinkAndKey('it_bar').link, child: Column( children: [ if (!InstructionsEnum.clickBestOption.isToggledOff) ...[ @@ -209,9 +210,7 @@ class ITBarState extends State with SingleTickerProviderStateMixin { const SizedBox(height: 8.0), ], Container( - key: MatrixState.pAnyState - .layerLinkAndKey(widget.choreographer.itBarTransformTargetKey) - .key, + key: MatrixState.pAnyState.layerLinkAndKey('it_bar').key, decoration: BoxDecoration( borderRadius: const BorderRadius.only( topLeft: Radius.circular(24), diff --git a/lib/pangea/common/utils/overlay.dart b/lib/pangea/common/utils/overlay.dart index 66248b5e0..9dd4e09bf 100644 --- a/lib/pangea/common/utils/overlay.dart +++ b/lib/pangea/common/utils/overlay.dart @@ -3,8 +3,8 @@ import 'dart:developer'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; +import 'package:fluffychat/pangea/choreographer/choreo_constants.dart'; import 'package:fluffychat/pangea/choreographer/choreographer.dart'; -import 'package:fluffychat/pangea/choreographer/choreographer_ui_extension.dart'; import 'package:fluffychat/pangea/choreographer/igc/pangea_match_state_model.dart'; import 'package:fluffychat/pangea/choreographer/igc/span_card.dart'; import 'package:fluffychat/pangea/common/utils/any_state_holder.dart'; @@ -232,7 +232,7 @@ class OverlayUtil { ), maxHeight: 325, maxWidth: 325, - transformTargetId: choreographer.inputTransformTargetKey, + transformTargetId: ChoreoConstants.inputTransformTargetKey, ignorePointer: true, isScrollable: false, ); diff --git a/lib/pangea/spaces/models/space_model.dart b/lib/pangea/spaces/models/space_model.dart index 19551e7ca..e1cd18e81 100644 --- a/lib/pangea/spaces/models/space_model.dart +++ b/lib/pangea/spaces/models/space_model.dart @@ -8,6 +8,7 @@ import 'package:matrix/matrix.dart'; import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/pangea/common/utils/error_handler.dart'; import 'package:fluffychat/pangea/spaces/constants/space_constants.dart'; +import 'package:fluffychat/widgets/matrix.dart'; import '../../events/constants/pangea_event_types.dart'; import '../../learning_settings/constants/language_constants.dart'; import '../../learning_settings/models/language_model.dart'; @@ -234,10 +235,8 @@ enum ToolSetting { // translations, autoIGC, enableTTS, - enableAutocorrect, -} + enableAutocorrect; -extension SettingCopy on ToolSetting { String toolName(BuildContext context) { switch (this) { case ToolSetting.interactiveTranslator: @@ -294,4 +293,7 @@ extension SettingCopy on ToolSetting { return true; } } + + bool get enabled => + MatrixState.pangeaController.permissionsController.isToolEnabled(this); }