diff --git a/lib/pages/chat/events/audio_player.dart b/lib/pages/chat/events/audio_player.dart index 5cf5a98a7..beeb24d4c 100644 --- a/lib/pages/chat/events/audio_player.dart +++ b/lib/pages/chat/events/audio_player.dart @@ -81,7 +81,9 @@ class AudioPlayerState extends State { }); _playAction(); } catch (e, s) { + // #Pangea debugger(); + // Pangea# Logs().v('Could not download audio file', e, s); ScaffoldMessenger.of(context).showSnackBar( SnackBar( @@ -134,6 +136,7 @@ class AudioPlayerState extends State { if (audioFile != null) { audioPlayer.setFilePath(audioFile.path); } else { + // #Pangea final data = matrixFile!.bytes; final mimeType = matrixFile!.mimeType; //shouldn't have to be settting this here @@ -150,10 +153,13 @@ class AudioPlayerState extends State { debugPrint("still an ogg file!"); } try { + // Pangea# await audioPlayer.setAudioSource(MatrixFileAudioSource(matrixFile!)); + // #Pangea } catch (e, s) { debugger(when: kDebugMode); } + // Pangea# } audioPlayer.play().onError( ErrorReporter(context, 'Unable to play audio message') diff --git a/lib/pages/chat/events/html_message.dart b/lib/pages/chat/events/html_message.dart index 2f43cfdbb..a98ab4fc1 100644 --- a/lib/pages/chat/events/html_message.dart +++ b/lib/pages/chat/events/html_message.dart @@ -18,18 +18,12 @@ class HtmlMessage extends StatelessWidget { final String html; final Room room; final Color textColor; - // #Pangea - // final ShowDefintionUtil? messageToolbar; - // Pangea# const HtmlMessage({ super.key, required this.html, required this.room, this.textColor = Colors.black, - // #Pangea - // this.messageToolbar, - // Pangea# }); dom.Node _linkifyHtml(dom.Node element) { diff --git a/lib/pages/chat/events/message.dart b/lib/pages/chat/events/message.dart index 61bf83061..971e85a58 100644 --- a/lib/pages/chat/events/message.dart +++ b/lib/pages/chat/events/message.dart @@ -242,6 +242,7 @@ class Message extends StatelessWidget { alignment: alignment, padding: const EdgeInsets.only(left: 8), child: GestureDetector( + // #Pangea onTap: () => toolbarController?.showToolbar(context), onDoubleTap: () => toolbarController?.showToolbar(context), @@ -249,6 +250,13 @@ class Message extends StatelessWidget { onSelect(event); HapticFeedback.selectionClick(); }, + // onLongPress: longPressSelect + // ? null + // : () { + // onSelect(event); + // HapticFeedback.selectionClick(); + // }, + // Pangea# child: AnimatedOpacity( opacity: animateIn ? 0 diff --git a/lib/pages/chat/events/message_content.dart b/lib/pages/chat/events/message_content.dart index 51bf1e969..c772d3582 100644 --- a/lib/pages/chat/events/message_content.dart +++ b/lib/pages/chat/events/message_content.dart @@ -177,14 +177,10 @@ class MessageContent extends StatelessWidget { if (event.messageType == MessageTypes.Emote) { html = '* $html'; } - // #Pangea - // messageToolbar?.messageText = html; - // Pangea# return HtmlMessage( html: html, textColor: textColor, room: event.room, - // messageToolbar: messageToolbar, ); } // else we fall through to the normal message rendering @@ -276,12 +272,10 @@ class MessageContent extends StatelessWidget { pangeaMessageEvent: pangeaMessageEvent!, immersionMode: immersionMode, toolbarController: toolbarController!, - // selectedDisplayLang: selectedDisplayLang, - // highlighted: toolbarController!.highlighted, ); } + // Pangea# return FutureBuilder( - // Pangea# future: event.calcLocalizedBody( MatrixLocals(L10n.of(context)!), hideReply: true, @@ -290,10 +284,12 @@ class MessageContent extends StatelessWidget { // #Pangea if (!snapshot.hasData) { return Text( + // Pangea# event.calcLocalizedBodyFallback( MatrixLocals(L10n.of(context)!), hideReply: true, ), + // #Pangea style: messageTextStyle, ); } @@ -311,7 +307,6 @@ class MessageContent extends StatelessWidget { ?.toolbar?.textSelection .onTextSelection(selection), onTap: () => toolbarController?.showToolbar(context), - // Pangea# text: toolbarController?.toolbar?.textSelection.messageText ?? messageText, focusNode: toolbarController?.focusNode, @@ -333,6 +328,7 @@ class MessageContent extends StatelessWidget { // MatrixLocals(L10n.of(context)!), // hideReply: true, // ), + // Pangea# style: TextStyle( color: textColor, fontSize: bigEmotes ? fontSize * 3 : fontSize, @@ -347,7 +343,6 @@ class MessageContent extends StatelessWidget { decorationColor: textColor.withAlpha(150), ), onOpen: (url) => UrlLauncher(context, url.url).launchUrl(), - // onTap: () => messageToolbar?.onTextTap(context), ); }, ); diff --git a/lib/pangea/choreographer/widgets/language_display_toggle.dart b/lib/pangea/choreographer/widgets/language_display_toggle.dart index 451e31782..9478b4220 100644 --- a/lib/pangea/choreographer/widgets/language_display_toggle.dart +++ b/lib/pangea/choreographer/widgets/language_display_toggle.dart @@ -1,4 +1,3 @@ -import 'package:fluffychat/pangea/widgets/flag.dart'; import 'package:flutter/material.dart'; import 'package:flutter_gen/gen_l10n/l10n.dart'; @@ -55,70 +54,3 @@ class LanguageDisplayToggle extends StatelessWidget { // ); } } - -class LanguageToggleSwitch extends StatefulWidget { - final ChatController controller; - - const LanguageToggleSwitch({super.key, required this.controller}); - - @override - _LanguageToggleSwitchState createState() => _LanguageToggleSwitchState(); -} - -class _LanguageToggleSwitchState extends State { - @override - Widget build(BuildContext context) { - final borderRadius = - BorderRadius.circular(20.0); // Use the same radius as your LanguageFlag - - return Tooltip( - message: L10n.of(context)!.toggleLanguages, - child: TextButton( - style: TextButton.styleFrom( - backgroundColor: Colors.transparent, // No background color - shape: RoundedRectangleBorder(borderRadius: borderRadius), - padding: EdgeInsets.zero, // Aligns with your custom padding - ), - onPressed: _toggleLanguage, // Use the onTap logic for onPressed - child: Container( - decoration: BoxDecoration( - color: Theme.of(context) - .colorScheme - .background, // Adapt to your app theme or custom color - borderRadius: borderRadius, - ), - padding: const EdgeInsets.symmetric(horizontal: 8.0, vertical: 4.0), - child: Row( - mainAxisSize: MainAxisSize.min, - children: [ - //trranslatte icon - Opacity( - opacity: isL1Selected ? 1.0 : 0.6, - child: LanguageFlag( - language: widget.controller.choreographer.l1Lang, - ), - ), - const SizedBox(width: 8.0), // Spacing between flags - Opacity( - opacity: isL1Selected ? 0.6 : 1.0, - child: LanguageFlag( - language: widget.controller.choreographer.l2Lang, - ), - ), - ], - ), - ), - ), - ); - } - - bool get isL1Selected => - widget.controller.choreographer.messageOptions.isTranslationOn; - - void _toggleLanguage() { - setState(() { - widget.controller.choreographer.messageOptions - .toggleSelectedDisplayLang(); - }); - } -} diff --git a/lib/pangea/controllers/pangea_controller.dart b/lib/pangea/controllers/pangea_controller.dart index 558fc55b2..e60b44b40 100644 --- a/lib/pangea/controllers/pangea_controller.dart +++ b/lib/pangea/controllers/pangea_controller.dart @@ -1,6 +1,7 @@ import 'dart:developer'; import 'dart:math'; +import 'package:fluffychat/pangea/constants/class_default_values.dart'; import 'package:fluffychat/pangea/controllers/class_controller.dart'; import 'package:fluffychat/pangea/controllers/contextual_definition_controller.dart'; import 'package:fluffychat/pangea/controllers/language_controller.dart'; @@ -224,19 +225,19 @@ class PangeaController { continue; } final List userIds = participants.map((user) => user.id).toList(); - // if (space.canInvite && !userIds.contains(BotName.byEnvironment)) { - // try { - // await space.invite(BotName.byEnvironment); - // await space.setPower( - // BotName.byEnvironment, - // ClassDefaultValues.powerLevelOfAdmin, - // ); - // } catch (err) { - // ErrorHandler.logError( - // e: "Failed to invite pangea bot to space ${space.id}", - // ); - // } - // } + if (space.canInvite && !userIds.contains(BotName.byEnvironment)) { + try { + await space.invite(BotName.byEnvironment); + await space.setPower( + BotName.byEnvironment, + ClassDefaultValues.powerLevelOfAdmin, + ); + } catch (err) { + ErrorHandler.logError( + e: "Failed to invite pangea bot to space ${space.id}", + ); + } + } } } } diff --git a/lib/pangea/extensions/pangea_room_extension.dart b/lib/pangea/extensions/pangea_room_extension.dart index 8901085db..85d68672f 100644 --- a/lib/pangea/extensions/pangea_room_extension.dart +++ b/lib/pangea/extensions/pangea_room_extension.dart @@ -591,51 +591,52 @@ extension PangeaRoom on Room { required String parentEventId, required String type, }) async { - // try { - debugPrint("creating $type child for $parentEventId"); - Sentry.addBreadcrumb(Breadcrumb.fromJson(content)); - if (parentEventId.contains("web")) { - debugger(when: kDebugMode); - Sentry.addBreadcrumb( - Breadcrumb( - message: - "sendPangeaEvent with likely invalid parentEventId $parentEventId", - ), + try { + debugPrint("creating $type child for $parentEventId"); + Sentry.addBreadcrumb(Breadcrumb.fromJson(content)); + if (parentEventId.contains("web")) { + debugger(when: kDebugMode); + Sentry.addBreadcrumb( + Breadcrumb( + message: + "sendPangeaEvent with likely invalid parentEventId $parentEventId", + ), + ); + } + final Map repContent = { + // what is the functionality of m.reference? + "m.relates_to": {"rel_type": type, "event_id": parentEventId}, + type: content, + }; + + final String? newEventId = await sendEvent(repContent, type: type); + + if (newEventId == null) { + debugger(when: kDebugMode); + return null; + } + + //PTODO - handle the frequent case of a null newEventId + final Event? newEvent = await getEventById(newEventId); + + if (newEvent == null) { + debugger(when: kDebugMode); + } + + return newEvent; + } catch (err, stack) { + // debugger(when: kDebugMode); + ErrorHandler.logError( + e: err, + s: stack, + data: { + "type": type, + "parentEventId": parentEventId, + "content": content, + }, ); + return null; } - final Map repContent = { - // what is the functionality of m.reference? - "m.relates_to": {"rel_type": type, "event_id": parentEventId}, - type: content, - }; - - final String? newEventId = await sendEvent(repContent, type: type); - - if (newEventId == null) { - debugger(when: kDebugMode); - } - - //PTODO - handle the frequent case of a null newEventId - final Event? newEvent = await getEventById(newEventId!); - - if (newEvent == null) { - debugger(when: kDebugMode); - } - - return newEvent; - // } catch (err, stack) { - // debugger(when: kDebugMode); - // ErrorHandler.logError( - // e: err, - // s: stack, - // data: { - // "type": type, - // "parentEventId": parentEventId, - // "content": content, - // }, - // ); - // return null; - // } } ConstructEvent? _vocabEventLocal(String lemma) { diff --git a/lib/pangea/utils/get_chat_list_item_subtitle.dart b/lib/pangea/utils/get_chat_list_item_subtitle.dart index 82b3461c4..2a77decad 100644 --- a/lib/pangea/utils/get_chat_list_item_subtitle.dart +++ b/lib/pangea/utils/get_chat_list_item_subtitle.dart @@ -1,12 +1,11 @@ -import 'package:flutter/material.dart'; - -import 'package:flutter_gen/gen_l10n/l10n.dart'; -import 'package:matrix/matrix.dart'; - import 'package:fluffychat/pangea/constants/language_keys.dart'; import 'package:fluffychat/pangea/controllers/pangea_controller.dart'; import 'package:fluffychat/pangea/models/class_model.dart'; import 'package:fluffychat/pangea/models/pangea_message_event.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_gen/gen_l10n/l10n.dart'; +import 'package:matrix/matrix.dart'; + import '../../utils/matrix_sdk_extensions/matrix_locals.dart'; class GetChatListItemSubtitle { @@ -17,11 +16,9 @@ class GetChatListItemSubtitle { ) async { if (event == null) return L10n.of(context)!.emptyChat; // try { - if (event.type != EventTypes.Message) - // || - // !pangeaController.permissionsController - // .isToolEnabled(ToolSetting.immersionMode, event.room)) - { + if (event.type != EventTypes.Message || + !pangeaController.permissionsController + .isToolEnabled(ToolSetting.immersionMode, event.room)) { return event.calcLocalizedBody( MatrixLocals(L10n.of(context)!), hideReply: true, diff --git a/lib/pangea/utils/overlay.dart b/lib/pangea/utils/overlay.dart index 26399c8aa..07eab5133 100644 --- a/lib/pangea/utils/overlay.dart +++ b/lib/pangea/utils/overlay.dart @@ -60,9 +60,7 @@ class OverlayUtil { MatrixState.pAnyState.openOverlay(entry, context); } catch (err, stack) { - debugPrint("ERROR: $err"); - debugPrint("STACK: $stack"); - // debugger(when: kDebugMode); + debugger(when: kDebugMode); ErrorHandler.logError(e: err, s: stack); } } diff --git a/lib/pangea/widgets/chat/message_actions.dart b/lib/pangea/widgets/chat/message_actions.dart index 03d3f8e6e..05731f234 100644 --- a/lib/pangea/widgets/chat/message_actions.dart +++ b/lib/pangea/widgets/chat/message_actions.dart @@ -1,5 +1,4 @@ import 'package:fluffychat/pages/chat/chat.dart'; -import 'package:fluffychat/pangea/choreographer/widgets/language_display_toggle.dart'; import 'package:fluffychat/pangea/widgets/chat/text_to_speech_button.dart'; import 'package:flutter/material.dart'; @@ -13,7 +12,7 @@ class PangeaMessageActions extends StatelessWidget { return chatController.selectedEvents.length == 1 ? Row( children: [ - LanguageToggleSwitch(controller: chatController), + // LanguageToggleSwitch(controller: chatController), TextToSpeechButton( controller: chatController, selectedEvent: chatController.selectedEvents.first, diff --git a/lib/pangea/widgets/chat/message_audio_card.dart b/lib/pangea/widgets/chat/message_audio_card.dart index c523e5048..ff4a3baea 100644 --- a/lib/pangea/widgets/chat/message_audio_card.dart +++ b/lib/pangea/widgets/chat/message_audio_card.dart @@ -18,38 +18,8 @@ class MessageAudioCard extends StatefulWidget { } class MessageAudioCardState extends State { - // RepresentationEvent? repEvent; bool _isLoading = false; Event? localAudioEvent; - // String langCode = "en"; - - // void setLangCode() { - // final String? l2Code = - // MatrixState.pangeaController.languageController.activeL2Code( - // roomID: widget.messageEvent.room.id, - // ); - // setState(() => langCode = l2Code ?? "en"); - // } - - // void fetchRepresentation(BuildContext context) { - // repEvent = widget.messageEvent.representationByLanguage( - // langCode, - // ); - - // if (repEvent == null) { - // setState(() => _isLoading = true); - // widget.messageEvent - // .representationByLanguageGlobal( - // context: context, - // langCode: langCode, - // ) - // .onError((error, stackTrace) => ErrorHandler.logError()) - // .then(((RepresentationEvent? event) => repEvent = event)) - // .whenComplete( - // () => setState(() => _isLoading = false), - // ); - // } - // } void fetchAudio() { if (!mounted) return; @@ -124,21 +94,10 @@ class MessageAudioCardState extends State { ], ), ) - : - // Opacity( - // opacity: widget.messageEvent.getDisplayRepresentation().then((event) => event == null ? ) == null - // ? 0.5 - // : 1, - // // child: SizedBox( - // // width: 44, - // // height: 36, - // child: - Padding( + : Padding( padding: const EdgeInsets.only(left: 8), child: playButton, ), - // ), - // ), ); } } diff --git a/lib/pangea/widgets/chat/overlay_message.dart b/lib/pangea/widgets/chat/overlay_message.dart index 8bc1b5cf0..e39ffe827 100644 --- a/lib/pangea/widgets/chat/overlay_message.dart +++ b/lib/pangea/widgets/chat/overlay_message.dart @@ -27,9 +27,7 @@ class OverlayMessage extends StatelessWidget { this.selected = false, required this.timeline, // #Pangea - // required this.selectedDisplayLang, required this.immersionMode, - // required this.definitions, required this.ownMessage, required this.toolbarController, this.width, diff --git a/lib/pangea/widgets/igc/pangea_rich_text.dart b/lib/pangea/widgets/igc/pangea_rich_text.dart index cdd86b1b1..d0a7ed11e 100644 --- a/lib/pangea/widgets/igc/pangea_rich_text.dart +++ b/lib/pangea/widgets/igc/pangea_rich_text.dart @@ -80,7 +80,11 @@ class PangeaRichTextState extends State { widget.toolbarController.toolbar?.textSelection.setMessageText( repEvent?.text ?? widget.pangeaMessageEvent.body, ); - }).whenComplete(() => setState(() => _fetchingRepresentation = false)); + }).whenComplete(() { + if (mounted) { + setState(() => _fetchingRepresentation = false); + } + }); return widget.pangeaMessageEvent.body; } diff --git a/pubspec.yaml b/pubspec.yaml index b36f4c64c..c759327fa 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -20,7 +20,9 @@ dependencies: chewie: ^1.7.1 collection: ^1.17.2 cupertino_icons: any + # #Pangea # desktop_drop: ^0.4.4 + # Pangea# desktop_notifications: ^0.6.3 device_info_plus: ^9.1.0 dynamic_color: ^1.6.8