about summary refs log tree commit diff
path: root/MatrixRoomUtils.Web/Classes/RoomInfo.cs
blob: f9d545206054273f63aa98c6b5211a36a821ccc8 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
using MatrixRoomUtils.Core;
using MatrixRoomUtils.Core.Interfaces;
using MatrixRoomUtils.Core.Responses;
using MatrixRoomUtils.Core.RoomTypes;

namespace MatrixRoomUtils.Web.Classes;

public class RoomInfo {
    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;
    }
}