RoomManager.razor (3626B)
1 @page "/RoomManager" 2 @inject ILocalStorageService LocalStorage 3 @inject NavigationManager NavigationManager 4 <h3>Room manager</h3> 5 <hr/> 6 @if (Rooms.Count == 0) 7 { 8 <p>You are not in any rooms!</p> 9 @* <p>Loading progress: @checkedRoomCount/@totalRoomCount</p> *@ 10 } 11 else 12 { 13 <p>You are in @Rooms.Count rooms and @Spaces.Count spaces</p> 14 <p> 15 <a href="/RoomManagerCreateRoom">Create room</a> 16 </p> 17 18 <details open> 19 <summary>Space List</summary> 20 @foreach (var room in Spaces) 21 { 22 <a style="color: unset; text-decoration: unset;" href="/RoomManager/Space/@room.RoomId.Replace('.', '~')"> 23 <RoomListItem Room="@room" ShowOwnProfile="false"></RoomListItem> 24 </a> 25 } 26 </details> 27 <details open> 28 <summary>Room List</summary> 29 @foreach (var room in Rooms) 30 { 31 <a style="color: unset; text-decoration: unset;" href="/RoomManager/Room/@room.RoomId.Replace('.', '~')"> 32 <RoomListItem Room="@room" ShowOwnProfile="true"></RoomListItem> 33 </a> 34 } 35 </details> 36 } 37 38 <div style="margin-bottom: 4em;"></div> 39 <LogView></LogView> 40 41 @code { 42 public List<Room> Rooms { get; set; } = new(); 43 public List<Room> Spaces { get; set; } = new(); 44 45 protected override async Task OnInitializedAsync() 46 { 47 Console.WriteLine("Initializing room manager"); 48 await LocalStorageWrapper.LoadFromLocalStorage(LocalStorage); 49 Console.WriteLine("Loaded from local storage"); 50 await base.OnInitializedAsync(); 51 Console.WriteLine("Initialized base"); 52 if (RuntimeCache.CurrentHomeServer == null) 53 { 54 NavigationManager.NavigateTo("/Login"); 55 return; 56 } 57 Console.WriteLine("Fetching joined rooms"); 58 var _rooms = await RuntimeCache.CurrentHomeServer.GetJoinedRooms(); 59 StateHasChanged(); 60 Console.WriteLine($"Got {_rooms.Count} rooms"); 61 var semaphore = new SemaphoreSlim(10); 62 var tasks = new List<Task<Room?>>(); 63 foreach (var room in _rooms) 64 { 65 tasks.Add(CheckIfSpace(room, semaphore)); 66 } 67 await Task.WhenAll(tasks); 68 69 Console.WriteLine("Fetched joined rooms!"); 70 } 71 72 private async Task<Room?> CheckIfSpace(Room room, SemaphoreSlim semaphore) 73 { 74 await semaphore.WaitAsync(); 75 // Console.WriteLine($"Checking if {room.RoomId} is a space"); 76 try 77 { 78 var state = await room.GetStateAsync<CreateEvent>("m.room.create"); 79 if (state != null) 80 { 81 //Console.WriteLine(state.Value.ToJson()); 82 if (state.Type != null) 83 { 84 if (state.Type == "m.space") 85 { 86 Console.WriteLine($"Room {room.RoomId} is a space!"); 87 Spaces.Add(room); 88 StateHasChanged(); 89 return room; 90 } 91 else 92 { 93 Console.WriteLine($"Encountered unknown room type {state.Type}"); 94 } 95 } 96 else 97 { 98 Rooms.Add(room); 99 //this is fine, apprently... 100 // Console.WriteLine($"Room {room.RoomId} has no Content.type in m.room.create!"); 101 } 102 } 103 } 104 catch (Exception e) 105 { 106 Console.WriteLine(e); 107 return null; 108 } 109 finally 110 { 111 semaphore.Release(); 112 } 113 return null; 114 } 115 116 }