remove unnecesary choreographer extensions

This commit is contained in:
ggurdin 2025-11-10 15:57:40 -05:00
parent 941827bb8a
commit c256388e8b
No known key found for this signature in database
GPG key ID: A01CB41737CBB478
11 changed files with 76 additions and 94 deletions

View file

@ -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<ChatPageWithRoom>
Future<void> 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<ChatPageWithRoom>
// 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<ChatPageWithRoom>
);
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<ChatPageWithRoom>
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<ChatPageWithRoom>
l1 != activityLang;
}
Future<void> onRequestWritingAssistance({bool autosend = false}) async {
Future<void> 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<ChatPageWithRoom>
);
WidgetsBinding.instance.addPostFrameCallback(
(_) => onRequestWritingAssistance(autosend: true),
(_) => onRequestWritingAssistance(manual: false, autosend: true),
);
},
),
maxHeight: 325,
maxWidth: 325,
transformTargetId: choreographer.inputTransformTargetKey,
transformTargetId: ChoreoConstants.inputTransformTargetKey,
);
}

View file

@ -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;
}

View file

@ -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: <Widget>[

View file

@ -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,
);
}

View file

@ -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';
}

View file

@ -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<void> requestWritingAssistance() =>
_getWritingAssistance(manual: true);
Future<void> requestWritingAssistance({bool manual = false}) =>
_getWritingAssistance(manual: manual);
Future<void> _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<PangeaMessageContentModel> 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(),
},
);

View file

@ -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';
}

View file

@ -135,7 +135,8 @@ class _StartIGCButtonState extends State<StartIGCButton>
enableFeedback: enableFeedback,
customBorder: const CircleBorder(),
onTap: enableFeedback
? widget.controller.onRequestWritingAssistance
? () =>
widget.controller.onRequestWritingAssistance(manual: true)
: null,
onLongPress: enableFeedback
? () => showDialog(

View file

@ -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<ITBar> 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<ITBar> 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<ITBar> 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),

View file

@ -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,
);

View file

@ -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);
}