diff --git a/lib/models/messages/quotedmessage.dart b/lib/models/messages/quotedmessage.dart index 9f819618..d827d632 100644 --- a/lib/models/messages/quotedmessage.dart +++ b/lib/models/messages/quotedmessage.dart @@ -1,5 +1,6 @@ import 'dart:convert'; +import 'package:cwtch/config.dart'; import 'package:cwtch/models/message.dart'; import 'package:cwtch/models/messages/malformedmessage.dart'; import 'package:cwtch/widgets/malformedbubble.dart'; @@ -8,6 +9,9 @@ import 'package:cwtch/widgets/quotedmessage.dart'; import 'package:flutter/widgets.dart'; import 'package:provider/provider.dart'; +import '../../settings.dart'; +import '../../third_party/linkify/flutter_linkify.dart'; + class QuotedMessageStructure { final String quotedHash; final String body; @@ -34,9 +38,16 @@ class QuotedMessage extends Message { this.content, ); var content = message["body"]; - return Text( - content, - ); + var formatMessages = Provider.of(context).isExperimentEnabled(FormattingExperiment); + return SelectableLinkify( + text: content + '\u202F', + options: LinkifyOptions(messageFormatting: formatMessages, parseLinks: false, looseUrl: true, defaultToHttps: true), + linkifiers: [UrlLinkifier()], + onOpen: null, + textAlign: TextAlign.left, + style: TextStyle(overflow: TextOverflow.ellipsis), + codeStyle: TextStyle(overflow: TextOverflow.ellipsis), + textWidthBasis: TextWidthBasis.longestLine); } catch (e) { return MalformedBubble(); } diff --git a/lib/models/messages/textmessage.dart b/lib/models/messages/textmessage.dart index b2496f19..3c46a21a 100644 --- a/lib/models/messages/textmessage.dart +++ b/lib/models/messages/textmessage.dart @@ -10,6 +10,9 @@ import 'package:flutter/material.dart'; import 'package:flutter/widgets.dart'; import 'package:provider/provider.dart'; +import '../../settings.dart'; +import '../../third_party/linkify/flutter_linkify.dart'; + class TextMessage extends Message { final MessageMetadata metadata; final String content; @@ -21,9 +24,16 @@ class TextMessage extends Message { return ChangeNotifierProvider.value( value: this.metadata, builder: (bcontext, child) { - return Text( - this.content, - overflow: TextOverflow.ellipsis, + var formatMessages = Provider.of(bcontext).isExperimentEnabled(FormattingExperiment); + return SelectableLinkify( + text: content + '\u202F', + options: LinkifyOptions(messageFormatting: formatMessages, parseLinks: false, looseUrl: true, defaultToHttps: true), + linkifiers: [UrlLinkifier()], + onOpen: null, + textAlign: TextAlign.left, + style: TextStyle(overflow: TextOverflow.ellipsis), + codeStyle: TextStyle(overflow: TextOverflow.ellipsis), + textWidthBasis: TextWidthBasis.longestLine, ); }); } diff --git a/lib/widgets/quotedmessage.dart b/lib/widgets/quotedmessage.dart index ab03e46d..acf218f9 100644 --- a/lib/widgets/quotedmessage.dart +++ b/lib/widgets/quotedmessage.dart @@ -83,12 +83,14 @@ class QuotedMessageBubbleState extends State { // If the sender is not us, then we want to give them a nickname... String qMessageSender; - // if we are quoted then display our nickname + // if we sent the quoted message then display our nickname if (qMessage.getMetadata().senderHandle == Provider.of(context).onion) { qMessageSender = Provider.of(context).nickname; } else { - qMessageSender = Provider.of(context).senderHandle; - ContactInfoState? contact = Provider.of(context).contactList.findContact(qMessage.getMetadata().senderHandle); + // default to handle + qMessageSender = qMessage.getMetadata().senderHandle; + // if we have the handle as a contact then replace with the nickname... + ContactInfoState? contact = Provider.of(context).contactList.findContact(qMessageSender); if (contact != null) { qMessageSender = contact.nickname; }