about summary refs log tree commit diff
path: root/LibMatrix.LegacyEvents.EventTypes/EventContent.cs
diff options
context:
space:
mode:
authorRory& <root@rory.gay>2024-05-30 09:31:29 +0000
committerRory& <root@rory.gay>2024-05-30 09:31:29 +0000
commit08f5483df2c01eba7c764cdaec94fca71e4976b8 (patch)
tree1e521bf7bae7bdf07fa8e87505b2fa95d21a196e /LibMatrix.LegacyEvents.EventTypes/EventContent.cs
parentRename StateEvent to LegacyMatrixEvent (diff)
downloadLibMatrix-08f5483df2c01eba7c764cdaec94fca71e4976b8.tar.xz
Clarify LegacyEvent types
Diffstat (limited to 'LibMatrix.LegacyEvents.EventTypes/EventContent.cs')
-rw-r--r--LibMatrix.LegacyEvents.EventTypes/EventContent.cs48
1 files changed, 48 insertions, 0 deletions
diff --git a/LibMatrix.LegacyEvents.EventTypes/EventContent.cs b/LibMatrix.LegacyEvents.EventTypes/EventContent.cs
new file mode 100644
index 0000000..3e76459
--- /dev/null
+++ b/LibMatrix.LegacyEvents.EventTypes/EventContent.cs
@@ -0,0 +1,48 @@
+using System.Text.Json;
+using System.Text.Json.Nodes;
+using System.Text.Json.Serialization;
+
+namespace LibMatrix.LegacyEvents.EventTypes;
+
+public abstract class EventContent;
+
+public class UnknownEventContent : TimelineEventContent;
+
+public abstract class TimelineEventContent : EventContent {
+    [JsonPropertyName("m.relates_to")]
+    public MessageRelatesTo? RelatesTo { get; set; }
+
+    [JsonPropertyName("m.new_content")]
+    public JsonObject? NewContent { get; set; }
+
+    public TimelineEventContent SetReplaceRelation(string eventId) {
+        NewContent = JsonSerializer.SerializeToNode(this, GetType())!.AsObject();
+        // NewContent = JsonSerializer.Deserialize(jsonText, GetType());
+        RelatesTo = new MessageRelatesTo {
+            RelationType = "m.replace",
+            EventId = eventId
+        };
+        return this;
+    }
+
+    public T SetReplaceRelation<T>(string eventId) where T : TimelineEventContent => SetReplaceRelation(eventId) as T ?? throw new InvalidOperationException();
+
+    public class MessageRelatesTo {
+        [JsonPropertyName("m.in_reply_to")]
+        public EventInReplyTo? InReplyTo { get; set; }
+
+        [JsonPropertyName("event_id")]
+        public string? EventId { get; set; }
+
+        [JsonPropertyName("rel_type")]
+        public string? RelationType { get; set; }
+
+        public class EventInReplyTo {
+            [JsonPropertyName("event_id")]
+            public string? EventId { get; set; }
+
+            [JsonPropertyName("rel_type")]
+            public string? RelType { get; set; }
+        }
+    }
+}
\ No newline at end of file