we got quotes 🔥
This commit is contained in:
parent
51d6e73c24
commit
11c03733cf
14 changed files with 159 additions and 124 deletions
100
lib/helpers/extensions/event_to_message.dart
Normal file
100
lib/helpers/extensions/event_to_message.dart
Normal file
|
|
@ -0,0 +1,100 @@
|
|||
import "package:flutter_chat_core/flutter_chat_core.dart";
|
||||
import "package:matrix/matrix.dart";
|
||||
|
||||
extension EventToMessage on Event {
|
||||
Future<Message?> toMessage({bool mustBeText = false}) async {
|
||||
final replyId = relationshipType == RelationshipTypes.reply
|
||||
? relationshipEventId
|
||||
: null;
|
||||
final sender = (await fetchSenderUser()) ?? senderFromMemoryOrFallback;
|
||||
|
||||
final newContent = content["m.new_content"] as Map<String, Object?>?;
|
||||
final metadata = {
|
||||
"formatted":
|
||||
newContent?["formatted_body"] ??
|
||||
newContent?["body"] ??
|
||||
content["formatted_body"] ??
|
||||
this.body,
|
||||
"eventType": type,
|
||||
"displayName": sender.displayName ?? sender.id,
|
||||
"txnId": transactionId,
|
||||
};
|
||||
|
||||
final editedAt = relationshipType == RelationshipTypes.edit
|
||||
? originServerTs
|
||||
: null;
|
||||
final body = newContent?["body"] as String? ?? this.body;
|
||||
final eventId = editedAt == null
|
||||
? this.eventId
|
||||
: relationshipEventId ?? this.eventId;
|
||||
|
||||
if (redacted) return null;
|
||||
|
||||
final asText =
|
||||
Message.text(
|
||||
metadata: metadata,
|
||||
id: eventId,
|
||||
authorId: senderId,
|
||||
text: body,
|
||||
replyToMessageId: replyId,
|
||||
deliveredAt: originServerTs,
|
||||
editedAt: editedAt,
|
||||
)
|
||||
as TextMessage;
|
||||
|
||||
if (mustBeText) return asText;
|
||||
|
||||
return switch (type) {
|
||||
EventTypes.Encrypted => asText.copyWith(
|
||||
text: "Unable to decrypt message.",
|
||||
metadata: {"formatted": "Unable to decrypt message.", ...metadata},
|
||||
),
|
||||
EventTypes.Message => switch (messageType) {
|
||||
MessageTypes.Image => Message.image(
|
||||
metadata: metadata,
|
||||
id: eventId,
|
||||
authorId: senderId,
|
||||
text: text,
|
||||
source: (await getAttachmentUri()).toString(),
|
||||
replyToMessageId: replyId,
|
||||
deliveredAt: originServerTs,
|
||||
),
|
||||
MessageTypes.Audio => Message.audio(
|
||||
metadata: metadata,
|
||||
id: eventId,
|
||||
authorId: senderId,
|
||||
text: text,
|
||||
replyToMessageId: replyId,
|
||||
source: (await getAttachmentUri()).toString(),
|
||||
deliveredAt: originServerTs,
|
||||
duration: Duration(hours: 1),
|
||||
),
|
||||
MessageTypes.File => Message.file(
|
||||
name: content["filename"].toString(),
|
||||
metadata: metadata,
|
||||
id: eventId,
|
||||
authorId: senderId,
|
||||
source: (await getAttachmentUri()).toString(),
|
||||
replyToMessageId: replyId,
|
||||
deliveredAt: originServerTs,
|
||||
),
|
||||
_ => asText,
|
||||
},
|
||||
EventTypes.RoomMember => Message.system(
|
||||
metadata: metadata,
|
||||
id: eventId,
|
||||
authorId: senderId,
|
||||
text:
|
||||
"${senderFromMemoryOrFallback.calcDisplayname()} joined the room.",
|
||||
),
|
||||
EventTypes.Redaction => null,
|
||||
EventTypes.Reaction => null,
|
||||
_ => Message.unsupported(
|
||||
metadata: metadata,
|
||||
id: eventId,
|
||||
authorId: senderId,
|
||||
replyToMessageId: replyId,
|
||||
),
|
||||
};
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue