about summary refs log tree commit diff
path: root/MatrixRoomUtils.Desktop/RoomInfo.cs
blob: a31d67a6166e537a196c2db9a76adef9cd74e242 (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
32
33
34
35
36
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;
    }
}