wip polls

This commit is contained in:
Henry Hiles 2026-01-11 13:41:05 -05:00
commit 7d9d03deb1
No known key found for this signature in database
6 changed files with 195 additions and 14 deletions

View file

@ -3,7 +3,8 @@ import "package:flutter_chat_core/flutter_chat_core.dart";
import "package:matrix/matrix.dart";
extension EventToMessage on Event {
Future<Message?> toMessage({
Future<Message?> toMessage(
Timeline timeline, {
bool mustBeText = false,
bool includeEdits = false,
}) async {
@ -25,7 +26,7 @@ extension EventToMessage on Event {
event.content["formatted_body"] ??
event.content["body"] ??
"",
"reply": await replyEvent?.toMessage(mustBeText: true),
"reply": await replyEvent?.toMessage(mustBeText: true, timeline),
"body": newContent?["body"] ?? event.content["body"],
"eventType": event.type,
"avatarUrl": sender.avatarUrl.toString(),
@ -65,12 +66,21 @@ extension EventToMessage on Event {
as TextMessage;
if (mustBeText) return asText;
return switch (type) {
EventTypes.Encrypted => asText.copyWith(
text: "Unable to decrypt message.",
metadata: {...metadata, "formatted": "Unable to decrypt message."},
),
PollEventContent.startType => Message.custom(
metadata: {
...metadata,
"poll": event.parsedPollEventContent.pollStartContent,
"responses": event.getPollResponses(timeline),
},
id: eventId,
deliveredAt: originServerTs,
authorId: senderId,
),
(EventTypes.Sticker || EventTypes.Message) => switch (messageType) {
(MessageTypes.Sticker || MessageTypes.Image) => Message.image(
metadata: metadata,

View file

@ -3,7 +3,8 @@ import "package:matrix/matrix.dart";
import "package:nexus/helpers/extensions/event_to_message.dart";
extension ListToMessages on List<MatrixEvent> {
Future<List<Message>> toMessages(Room room) async => (await Future.wait(
map((event) => Event.fromMatrixEvent(event, room).toMessage()),
)).nonNulls.toList().reversed.toList();
Future<List<Message>> toMessages(Room room, Timeline timeline) async =>
(await Future.wait(
map((event) => Event.fromMatrixEvent(event, room).toMessage(timeline)),
)).nonNulls.toList().reversed.toList();
}