about summary refs log tree commit diff
path: root/MatrixRoomUtils.Desktop/RoomInfo.cs
diff options
context:
space:
mode:
Diffstat (limited to 'MatrixRoomUtils.Desktop/RoomInfo.cs')
-rw-r--r--MatrixRoomUtils.Desktop/RoomInfo.cs37
1 files changed, 37 insertions, 0 deletions
diff --git a/MatrixRoomUtils.Desktop/RoomInfo.cs b/MatrixRoomUtils.Desktop/RoomInfo.cs
new file mode 100644
index 0000000..a31d67a
--- /dev/null
+++ b/MatrixRoomUtils.Desktop/RoomInfo.cs
@@ -0,0 +1,37 @@
+using MatrixRoomUtils.Core;
+using MatrixRoomUtils.Core.Interfaces;
+using MatrixRoomUtils.Core.Responses;
+using MatrixRoomUtils.Core.RoomTypes;
+
+namespace MatrixRoomUtils.Web.Classes;
+
+public class RoomInfo {
+    public RoomInfo() { }
+
+    public RoomInfo(GenericRoom room) {
+        Room = room;
+    }
+
+    public GenericRoom Room { get; set; }
+    public List<StateEventResponse?> StateEvents { get; init; } = new();
+
+    public async Task<StateEventResponse?> GetStateEvent(string type, string stateKey = "") {
+        var @event = StateEvents.FirstOrDefault(x => x.Type == type && x.StateKey == stateKey);
+        if (@event is not null) return @event;
+        @event = new StateEventResponse() {
+            RoomId = Room.RoomId,
+            Type = type,
+            StateKey = stateKey,
+        };
+        try {
+            @event.TypedContent = await Room.GetStateAsync<object>(type, stateKey);
+        }
+        catch (MatrixException e) {
+            if (e is { ErrorCode: "M_NOT_FOUND" }) @event.TypedContent = default!;
+            else throw;
+        }
+
+        StateEvents.Add(@event);
+        return @event;
+    }
+}