MatrixRoomUtils

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | LICENSE

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 }