added pangea tags, more testing
This commit is contained in:
parent
13b38eac29
commit
ebbfba7ac9
14 changed files with 93 additions and 199 deletions
|
|
@ -81,7 +81,9 @@ class AudioPlayerState extends State<AudioPlayerWidget> {
|
|||
});
|
||||
_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<AudioPlayerWidget> {
|
|||
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<AudioPlayerWidget> {
|
|||
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')
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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<String>(
|
||||
// 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),
|
||||
);
|
||||
},
|
||||
);
|
||||
|
|
|
|||
|
|
@ -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<LanguageToggleSwitch> {
|
||||
@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: <Widget>[
|
||||
//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();
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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<String> 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}",
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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<String, dynamic> 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<String, dynamic> 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) {
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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: <Widget>[
|
||||
LanguageToggleSwitch(controller: chatController),
|
||||
// LanguageToggleSwitch(controller: chatController),
|
||||
TextToSpeechButton(
|
||||
controller: chatController,
|
||||
selectedEvent: chatController.selectedEvents.first,
|
||||
|
|
|
|||
|
|
@ -18,38 +18,8 @@ class MessageAudioCard extends StatefulWidget {
|
|||
}
|
||||
|
||||
class MessageAudioCardState extends State<MessageAudioCard> {
|
||||
// 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<MessageAudioCard> {
|
|||
],
|
||||
),
|
||||
)
|
||||
:
|
||||
// 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,
|
||||
),
|
||||
// ),
|
||||
// ),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -80,7 +80,11 @@ class PangeaRichTextState extends State<PangeaRichText> {
|
|||
widget.toolbarController.toolbar?.textSelection.setMessageText(
|
||||
repEvent?.text ?? widget.pangeaMessageEvent.body,
|
||||
);
|
||||
}).whenComplete(() => setState(() => _fetchingRepresentation = false));
|
||||
}).whenComplete(() {
|
||||
if (mounted) {
|
||||
setState(() => _fetchingRepresentation = false);
|
||||
}
|
||||
});
|
||||
return widget.pangeaMessageEvent.body;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue