add edits
This commit is contained in:
parent
9951898598
commit
6523420120
3 changed files with 47 additions and 15 deletions
|
|
@ -19,17 +19,28 @@ class RoomChatController extends AsyncNotifier<ChatController> {
|
||||||
if (event.roomId != room.id) return;
|
if (event.roomId != room.id) return;
|
||||||
final message = await event.toMessage();
|
final message = await event.toMessage();
|
||||||
if (message != null) {
|
if (message != null) {
|
||||||
|
if (event.relationshipType == RelationshipTypes.edit) {
|
||||||
|
final controller = await future;
|
||||||
|
final oldMessage = controller.messages.firstWhereOrNull(
|
||||||
|
(element) => element.id == event.relationshipEventId,
|
||||||
|
);
|
||||||
|
if (oldMessage == null) return;
|
||||||
|
await updateMessage(oldMessage, message);
|
||||||
|
} else {
|
||||||
await insertMessage(message);
|
await insertMessage(message);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}).cancel,
|
}).cancel,
|
||||||
);
|
);
|
||||||
|
|
||||||
return InMemoryChatController(
|
return InMemoryChatController(
|
||||||
messages: (await Future.wait(
|
messages: {
|
||||||
|
for (var msg in (await Future.wait(
|
||||||
response.chunk.map(
|
response.chunk.map(
|
||||||
(event) => Event.fromMatrixEvent(event, room).toMessage(),
|
(event) => Event.fromMatrixEvent(event, room).toMessage(),
|
||||||
),
|
),
|
||||||
)).nonNulls.toList().reversed.toList(),
|
)).nonNulls.toList().reversed.toList())
|
||||||
|
msg.id: msg,
|
||||||
|
}.values.toList(),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -40,13 +40,24 @@ extension ToMessage on Event {
|
||||||
? relationshipEventId
|
? relationshipEventId
|
||||||
: null;
|
: null;
|
||||||
final sender = (await fetchSenderUser()) ?? senderFromMemoryOrFallback;
|
final sender = (await fetchSenderUser()) ?? senderFromMemoryOrFallback;
|
||||||
|
|
||||||
|
final newContent = content["m.new_content"] as Map<String, Object?>?;
|
||||||
final metadata = {
|
final metadata = {
|
||||||
"formatted": formattedText.isEmpty ? body : formattedText,
|
"formatted":
|
||||||
|
newContent?["formatted_body"] ??
|
||||||
|
newContent?["body"] ??
|
||||||
|
(formattedText.isEmpty ? this.body : formattedText),
|
||||||
"eventType": type,
|
"eventType": type,
|
||||||
"displayName": sender.displayName ?? sender.id,
|
"displayName": sender.displayName ?? sender.id,
|
||||||
"txnId": transactionId,
|
"txnId": transactionId,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
final editedAt = relationshipType == RelationshipTypes.edit
|
||||||
|
? originServerTs
|
||||||
|
: null;
|
||||||
|
final body = newContent?["body"] as String? ?? this.body;
|
||||||
|
final eventId = relationshipEventId ?? this.eventId;
|
||||||
|
|
||||||
if (redacted) return null;
|
if (redacted) return null;
|
||||||
|
|
||||||
final asText =
|
final asText =
|
||||||
|
|
@ -57,6 +68,7 @@ extension ToMessage on Event {
|
||||||
text: body,
|
text: body,
|
||||||
replyToMessageId: replyId,
|
replyToMessageId: replyId,
|
||||||
deliveredAt: originServerTs,
|
deliveredAt: originServerTs,
|
||||||
|
editedAt: editedAt,
|
||||||
)
|
)
|
||||||
as TextMessage;
|
as TextMessage;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -142,7 +142,10 @@ class RoomChat extends HookConsumerWidget {
|
||||||
),
|
),
|
||||||
(m) =>
|
(m) =>
|
||||||
"<a href=\"${m.group(0)!}\">${m.group(0)!}</a>",
|
"<a href=\"${m.group(0)!}\">${m.group(0)!}</a>",
|
||||||
),
|
) +
|
||||||
|
((message.editedAt != null)
|
||||||
|
? "<sub edited>(edited)</sub>"
|
||||||
|
: ""),
|
||||||
customWidgetBuilder: (element) {
|
customWidgetBuilder: (element) {
|
||||||
if (element.localName == "mx-reply") {
|
if (element.localName == "mx-reply") {
|
||||||
return SizedBox.shrink();
|
return SizedBox.shrink();
|
||||||
|
|
@ -193,11 +196,17 @@ class RoomChat extends HookConsumerWidget {
|
||||||
"color",
|
"color",
|
||||||
value,
|
value,
|
||||||
),
|
),
|
||||||
|
|
||||||
"data-mx-bg-color" =>
|
"data-mx-bg-color" =>
|
||||||
MapEntry(
|
MapEntry(
|
||||||
"background-color",
|
"background-color",
|
||||||
value,
|
value,
|
||||||
),
|
),
|
||||||
|
|
||||||
|
"edited" => MapEntry(
|
||||||
|
"display",
|
||||||
|
"block",
|
||||||
|
),
|
||||||
_ => null,
|
_ => null,
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue