@page "/Rooms/{RoomId}/Space" @using LibMatrix.RoomTypes @using ArcaneLibs.Extensions @using LibMatrix

Room manager - Viewing Space

@foreach (var room in Rooms) { @* *@ }
State list @foreach (var stateEvent in States.OrderBy(x => x.Type).ThenBy(x => x.StateKey)) {

@stateEvent.Type/@stateEvent.StateKey:

@stateEvent.RawContent.ToJson()
}
@code { [Parameter] public string RoomId { get; set; } = "invalid!!!!!!"; private GenericRoom? Room { get; set; } private List States { get; set; } = []; private List Rooms { get; } = new(); private List ServersInSpace { get; } = new(); private AuthenticatedHomeserverGeneric Homeserver { get; set; } = null!; protected override async Task OnInitializedAsync() { var hs = await RMUStorage.GetCurrentSessionOrNavigate(); if (hs is null) return; Homeserver = hs; Room = hs.GetRoom(RoomId.Replace('~', '.')); var state = Room.GetFullStateAsync(); await foreach (var stateEvent in state) { switch (stateEvent.Type) { case "m.space.child": { var roomId = stateEvent.StateKey; var room = hs.GetRoom(roomId); if (room is not null) { Rooms.Add(room); } break; } case "m.room.member": { var serverName = stateEvent.StateKey.Split(':').Last(); if (!ServersInSpace.Contains(serverName)) { ServersInSpace.Add(serverName); } break; } } States.Add(stateEvent); } StateHasChanged(); // var state = await Room.GetStateAsync(""); // if (state is not null) { // // Console.WriteLine(state.Value.ToJson()); // States = state.Value.Deserialize()!; // // foreach (var stateEvent in States) { // if (stateEvent.Type == "m.space.child") { // // if (stateEvent.Content.ToJson().Length < 5) return; // var roomId = stateEvent.StateKey; // var room = hs.GetRoom(roomId); // if (room is not null) { // Rooms.Add(room); // } // } // else if (stateEvent.Type == "m.room.member") { // var serverName = stateEvent.StateKey.Split(':').Last(); // if (!ServersInSpace.Contains(serverName)) { // ServersInSpace.Add(serverName); // } // } // } // if(state.Value.TryGetProperty("Type", out var Type)) // { // } // else // { // //this is fine, apprently... // //Console.WriteLine($"Room {room.RoomId} has no Content.Type in m.room.create!"); // } // await base.OnInitializedAsync(); } private async Task JoinAllRooms() { var joinedRooms = await Homeserver.GetJoinedRooms(); List> tasks = Rooms .Where(x=>!joinedRooms.Any(y=>y.RoomId == x.RoomId)) .Select(room => room.JoinAsync(ServersInSpace.ToArray())).ToList(); await Task.WhenAll(tasks); // foreach (var room in Rooms) { // await room.JoinAsync(ServersInSpace.ToArray()); // } } }