about summary refs log tree commit diff
path: root/LibMatrix/Interfaces/EventContent.cs
diff options
context:
space:
mode:
Diffstat (limited to 'LibMatrix/Interfaces/EventContent.cs')
-rw-r--r--LibMatrix/Interfaces/EventContent.cs33
1 files changed, 27 insertions, 6 deletions
diff --git a/LibMatrix/Interfaces/EventContent.cs b/LibMatrix/Interfaces/EventContent.cs
index ec09c7e..1fb6974 100644
--- a/LibMatrix/Interfaces/EventContent.cs
+++ b/LibMatrix/Interfaces/EventContent.cs
@@ -1,21 +1,42 @@
+using System.Text.Json;
+using System.Text.Json.Nodes;
 using System.Text.Json.Serialization;
 
 namespace LibMatrix.Interfaces;
 
-public abstract class EventContent {
-    
-}
+public abstract class EventContent { }
+
 public abstract class TimelineEventContent : EventContent {
     [JsonPropertyName("m.relates_to")]
     public MessageRelatesTo? RelatesTo { get; set; }
 
-    // [JsonPropertyName("m.new_content")]
-    // public TimelineEventContent? NewContent { 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() {
+            RelationType = "m.replace",
+            EventId = eventId
+        };
+        return this;
+    }
+
+    public T SetReplaceRelation<T>(string eventId) where T : TimelineEventContent {
+        return 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; }
@@ -24,4 +45,4 @@ public abstract class TimelineEventContent : EventContent {
             public string RelType { get; set; }
         }
     }
-}
+}
\ No newline at end of file