add poll support

Fixes #130
This commit is contained in:
Henry Hiles 2026-11-02 12:03:52 -05:00
commit f6aaf49164
Signed by: Henry-Hiles
SSH key fingerprint: SHA256:VKQUdS31Q90KvX7EkKMHMBpUspcmItAh86a+v7PGiIs
2 changed files with 1041 additions and 144 deletions

View file

@ -1,15 +1,19 @@
import "package:nexus/models/content/encrypted.dart";
import "package:nexus/models/content/message.dart";
import "package:nexus/models/content/poll_start.dart";
import "package:nexus/models/content/sticker.dart";
import "package:nexus/models/event.dart";
extension IsShownAsMessage on Event {
/// Whether this is a message, sticker or poll.
bool get hasMessageContent => switch (content) {
MessageContent() || StickerContent() || PollStartContent() => true,
_ => false,
};
/// Whether this is shown in the timeline as a message, with MessageRenderer.
bool get isShownAsMessage =>
redactedBy == null &&
relationType != "m.replace" &&
switch (content) {
MessageContent() || EncryptedContent() || StickerContent() => true,
_ => false,
};
(hasMessageContent || content is EncryptedContent);
}

View file

@ -0,0 +1,6 @@
import "package:nexus/models/event.dart";
extension SendFailed on Event {
/// gomuks marks events that are still sending as "not sent" (and often forgets to clear it at all)
bool get sendFailed => sendError != null && sendError != "not sent";
}