diff options
Diffstat (limited to '')
-rw-r--r-- | LibMatrix/Interfaces/EventContent.cs | 33 |
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 |