diff options
Diffstat (limited to 'MatrixRoomUtils.Desktop/RoomInfo.cs')
-rw-r--r-- | MatrixRoomUtils.Desktop/RoomInfo.cs | 37 |
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; + } +} |