From 5495a35403d285007d67f503042720302efdf94c Mon Sep 17 00:00:00 2001 From: "Emma@Rory&" Date: Mon, 24 Jul 2023 20:56:42 +0200 Subject: Code cleanup --- MatrixRoomUtils.Web/Pages/About.razor | 30 ----- .../Pages/RoomManager/RoomManagerSpace.razor | 96 -------------- .../Pages/RoomState/RoomStateEditorPage.razor | 145 --------------------- .../Pages/RoomState/RoomStateViewerPage.razor | 128 ------------------ MatrixRoomUtils.Web/Pages/Rooms/Index.razor | 72 +++++----- MatrixRoomUtils.Web/Pages/Rooms/Space.razor | 96 ++++++++++++++ MatrixRoomUtils.Web/Pages/Rooms/StateEditor.razor | 145 +++++++++++++++++++++ MatrixRoomUtils.Web/Pages/Rooms/StateViewer.razor | 128 ++++++++++++++++++ 8 files changed, 412 insertions(+), 428 deletions(-) delete mode 100644 MatrixRoomUtils.Web/Pages/RoomManager/RoomManagerSpace.razor delete mode 100644 MatrixRoomUtils.Web/Pages/RoomState/RoomStateEditorPage.razor delete mode 100644 MatrixRoomUtils.Web/Pages/RoomState/RoomStateViewerPage.razor create mode 100644 MatrixRoomUtils.Web/Pages/Rooms/Space.razor create mode 100644 MatrixRoomUtils.Web/Pages/Rooms/StateEditor.razor create mode 100644 MatrixRoomUtils.Web/Pages/Rooms/StateViewer.razor (limited to 'MatrixRoomUtils.Web/Pages') diff --git a/MatrixRoomUtils.Web/Pages/About.razor b/MatrixRoomUtils.Web/Pages/About.razor index 971bd9b..48c7686 100644 --- a/MatrixRoomUtils.Web/Pages/About.razor +++ b/MatrixRoomUtils.Web/Pages/About.razor @@ -3,7 +3,6 @@ @using System.Net.Sockets @inject NavigationManager NavigationManager @inject ILocalStorageService LocalStorage -@using XtermBlazor About @@ -22,10 +21,6 @@

This deployment also serves a copy of the compiled, hosting-ready binaries at /MRU-SRC.tar.xz!

} - - - - @code { private bool showBinDownload { get; set; } private bool showSrcDownload { get; set; } @@ -39,29 +34,4 @@ await base.OnInitializedAsync(); } - - private Xterm _terminal; - - private TerminalOptions _options = new TerminalOptions - { - CursorBlink = true, - CursorStyle = CursorStyle.Block, - Theme = - { - Background = "#17615e", - }, - }; - - private async Task OnFirstRender() { - var message = "Hello, World!\nThis is a terminal emulator!\n\nYou can type stuff here, and it will be sent to the server!\n\nThis is a test of the emergency broadcast system.\n\nThis is only a t"; - _terminal.Options.RendererType = RendererType.Dom; - _terminal.Options.ScreenReaderMode = true; -// TcpClient. - for (var i = 0; i < message.Length; i++) { - await _terminal.Write(message[i].ToString()); - - await Task.Delay(50); - _terminal.Options.Theme.Background = $"#{(i * 2):X6}"; - } - } } diff --git a/MatrixRoomUtils.Web/Pages/RoomManager/RoomManagerSpace.razor b/MatrixRoomUtils.Web/Pages/RoomManager/RoomManagerSpace.razor deleted file mode 100644 index afa39b9..0000000 --- a/MatrixRoomUtils.Web/Pages/RoomManager/RoomManagerSpace.razor +++ /dev/null @@ -1,96 +0,0 @@ -@page "/RoomManager/Space/{RoomId}" -@using System.Text.Json -@using MatrixRoomUtils.Core.Responses -

Room manager - Viewing Space

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

@stateEvent.StateKey/@stateEvent.Type:

-
@stateEvent.RawContent.ToJson()
- } -
- -@code { - - [Parameter] - public string RoomId { get; set; } = "invalid!!!!!!"; - - private GenericRoom? Room { get; set; } - - private StateEventResponse[] States { get; set; } = Array.Empty(); - private List Rooms { get; } = new(); - private List ServersInSpace { get; } = new(); - - protected override async Task OnInitializedAsync() { - var hs = await MRUStorage.GetCurrentSessionOrNavigate(); - if (hs is null) return; - - Room = await hs.GetRoom(RoomId.Replace('~', '.')); - - var state = Room.GetFullStateAsync(); - await foreach (var stateEvent in state) { - if (stateEvent.Type == "m.space.child") { - var roomId = stateEvent.StateKey; - var room = await 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); - } - } - } - await base.OnInitializedAsync(); - - // 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 = await 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() { - foreach (var room in Rooms) { - room.JoinAsync(ServersInSpace.ToArray()); - } - } - -} \ No newline at end of file diff --git a/MatrixRoomUtils.Web/Pages/RoomState/RoomStateEditorPage.razor b/MatrixRoomUtils.Web/Pages/RoomState/RoomStateEditorPage.razor deleted file mode 100644 index 8b2ff0c..0000000 --- a/MatrixRoomUtils.Web/Pages/RoomState/RoomStateEditorPage.razor +++ /dev/null @@ -1,145 +0,0 @@ -@page "/Rooms/{RoomId}/State/Edit" -@using System.Net.Http.Headers -@using System.Text.Json -@using MatrixRoomUtils.Core.Responses -@inject ILocalStorageService LocalStorage -@inject NavigationManager NavigationManager -

Room state editor - Editing @RoomId

-
- -

@status

- - Show member events -
- - - @foreach (var stateEvent in FilteredEvents.Where(x => x.StateKey != "").Select(x => x.StateKey).Distinct().OrderBy(x => x)) { - - Console.WriteLine(stateEvent); - } - -
- - - @foreach (var stateEvent in FilteredEvents.Where(x => x.StateKey != shownStateKey).Select(x => x.Type).Distinct().OrderBy(x => x)) { - - } - -
- - - - - -@code { - //get room list - // - sync withroom list filter - // Type = support.feline.msc3784 - //support.feline.policy.lists.msc.v1 - - [Parameter] - public string? RoomId { get; set; } - - public List FilteredEvents { get; set; } = new(); - public List Events { get; set; } = new(); - public string status = ""; - - protected override async Task OnInitializedAsync() { - await base.OnInitializedAsync(); - var hs = await MRUStorage.GetCurrentSessionOrNavigate(); - if (hs is null) return; - RoomId = RoomId.Replace('~', '.'); - await LoadStatesAsync(); - Console.WriteLine("Policy list editor initialized!"); - } - - private DateTime _lastUpdate = DateTime.Now; - - private async Task LoadStatesAsync() { - var hs = await MRUStorage.GetCurrentSessionOrNavigate(); - - var StateLoaded = 0; - var response = (await hs.GetRoom(RoomId)).GetFullStateAsync(); - await foreach (var _ev in response) { - // var e = new StateEventResponse { - // Type = _ev.Type, - // StateKey = _ev.StateKey, - // OriginServerTs = _ev.OriginServerTs, - // Content = _ev.Content - // }; - Events.Add(_ev); - if (string.IsNullOrEmpty(_ev.StateKey)) { - FilteredEvents.Add(_ev); - } - StateLoaded++; - if ((DateTime.Now - _lastUpdate).TotalMilliseconds > 100) { - _lastUpdate = DateTime.Now; - status = $"Loaded {StateLoaded} state events"; - StateHasChanged(); - await Task.Delay(0); - } - } - - StateHasChanged(); - } - - private async Task RebuildFilteredData() { - status = "Rebuilding filtered data..."; - StateHasChanged(); - await Task.Delay(1); - var _FilteredEvents = Events; - if (!ShowMembershipEvents) - _FilteredEvents = _FilteredEvents.Where(x => x.Type != "m.room.member").ToList(); - - status = "Done, rerendering!"; - StateHasChanged(); - await Task.Delay(1); - FilteredEvents = _FilteredEvents; - - if (_shownType is not null) - shownEventJson = _FilteredEvents.Where(x => x.Type == _shownType).First().RawContent.ToJson(indent: true, ignoreNull: true); - - StateHasChanged(); - } - - public struct PreRenderedStateEvent { - public string content { get; set; } - public long origin_server_ts { get; set; } - public string state_key { get; set; } - public string type { get; set; } - // public string Sender { get; set; } - // public string EventId { get; set; } - // public string UserId { get; set; } - // public string ReplacesState { get; set; } - } - - public bool ShowMembershipEvents { - get => _showMembershipEvents; - set { - _showMembershipEvents = value; - RebuildFilteredData(); - } - } - - private bool _showMembershipEvents; - private string _shownStateKey; - private string _shownType; - - private string shownStateKey { - get => _shownStateKey; - set { - _shownStateKey = value; - RebuildFilteredData(); - } - } - - private string shownType { - get => _shownType; - set { - _shownType = value; - RebuildFilteredData(); - } - } - - private string shownEventJson { get; set; } -} \ No newline at end of file diff --git a/MatrixRoomUtils.Web/Pages/RoomState/RoomStateViewerPage.razor b/MatrixRoomUtils.Web/Pages/RoomState/RoomStateViewerPage.razor deleted file mode 100644 index 09b38f0..0000000 --- a/MatrixRoomUtils.Web/Pages/RoomState/RoomStateViewerPage.razor +++ /dev/null @@ -1,128 +0,0 @@ -@page "/Rooms/{RoomId}/State/View" -@using System.Net.Http.Headers -@using System.Text.Json -@using MatrixRoomUtils.Core.Responses -@inject ILocalStorageService LocalStorage -@inject NavigationManager NavigationManager -

Room state viewer - Viewing @RoomId

-
- -

@status

- - Show member events - - - - - - - - - - @foreach (var stateEvent in FilteredEvents.Where(x => x.StateKey == "").OrderBy(x => x.OriginServerTs)) { - - - - - } - -
TypeContent
@stateEvent.Type -
@stateEvent.RawContent.ToJson()
-
- -@foreach (var group in FilteredEvents.GroupBy(x => x.StateKey).OrderBy(x => x.Key).Where(x => x.Key != "")) { -
- @group.Key - - - - - - - - - @foreach (var stateEvent in group.OrderBy(x => x.OriginServerTs)) { - - - - - } - -
TypeContent
@stateEvent.Type -
@stateEvent.RawContent.ToJson()
-
-
-} - - - -@code { - //get room list - // - sync withroom list filter - // Type = support.feline.msc3784 - //support.feline.policy.lists.msc.v1 - - [Parameter] - public string? RoomId { get; set; } - - public List FilteredEvents { get; set; } = new(); - public List Events { get; set; } = new(); - public string status = ""; - - protected override async Task OnInitializedAsync() { - await base.OnInitializedAsync(); - var hs = await MRUStorage.GetCurrentSessionOrNavigate(); - if (hs is null) return; - await LoadStatesAsync(); - Console.WriteLine("Policy list editor initialized!"); - } - - private DateTime _lastUpdate = DateTime.Now; - - private async Task LoadStatesAsync() { - var StateLoaded = 0; - var hs = await MRUStorage.GetCurrentSessionOrNavigate(); - if (hs is null) return; - var response = (await hs.GetRoom(RoomId)).GetFullStateAsync(); - await foreach (var _ev in response) { - Events.Add(_ev); - if (string.IsNullOrEmpty(_ev.StateKey)) { - FilteredEvents.Add(_ev); - } - StateLoaded++; - if ((DateTime.Now - _lastUpdate).TotalMilliseconds > 100) { - _lastUpdate = DateTime.Now; - status = $"Loaded {StateLoaded} state events"; - StateHasChanged(); - await Task.Delay(0); - } - } - - StateHasChanged(); - } - - private async Task RebuildFilteredData() { - status = "Rebuilding filtered data..."; - StateHasChanged(); - await Task.Delay(1); - var _FilteredEvents = Events; - if (!ShowMembershipEvents) - _FilteredEvents = _FilteredEvents.Where(x => x.Type != "m.room.member").ToList(); - - status = "Done, rerendering!"; - StateHasChanged(); - await Task.Delay(1); - FilteredEvents = _FilteredEvents; - StateHasChanged(); - } - - public bool ShowMembershipEvents { - get => _showMembershipEvents; - set { - _showMembershipEvents = value; - RebuildFilteredData(); - } - } - - private bool _showMembershipEvents; -} \ No newline at end of file diff --git a/MatrixRoomUtils.Web/Pages/Rooms/Index.razor b/MatrixRoomUtils.Web/Pages/Rooms/Index.razor index 816299f..6d12dc2 100644 --- a/MatrixRoomUtils.Web/Pages/Rooms/Index.razor +++ b/MatrixRoomUtils.Web/Pages/Rooms/Index.razor @@ -13,45 +13,54 @@ @code { + public List KnownRooms { get; set; } = new(); + private List Rooms { get; set; } = new(); private ProfileResponseEventData GlobalProfile { get; set; } - protected override async Task OnInitializedAsync() { - var hs = await MRUStorage.GetCurrentSessionOrNavigate(); - if (hs is null) return; - GlobalProfile = await hs.GetProfile(hs.WhoAmI.UserId); - var filter = new SyncFilter() { + private SyncFilter filter = new() { + AccountData = new() { + NotTypes = new() { "*" }, + Limit = 1 + }, + Presence = new() { + NotTypes = new() { "*" }, + Limit = 1 + }, + Room = new() { AccountData = new() { - NotTypes = new() { "*" } + NotTypes = new() { "*" }, + Limit = 1 }, - Presence = new() { - NotTypes = new() { "*" } + Ephemeral = new() { + NotTypes = new() { "*" }, + Limit = 1 }, - Room = new RoomFilter() { - AccountData = new() { - NotTypes = new() { "*" } - }, - Ephemeral = new() { - NotTypes = new() { "*" } - }, - State = new RoomFilter.StateFilter() { - Types = new List() { - "m.room.name", - "m.room.avatar", - "m.room.create", - "org.matrix.mjolnir.shortcode", - } - }, - Timeline = new() { - NotTypes = new() { "*" }, - Limit = 1 + State = new() { + Types = new List() { + "m.room.name", + "m.room.avatar", + "m.room.create", + "org.matrix.mjolnir.shortcode", + "m.room.power_levels" } + }, + Timeline = new() { + NotTypes = new() { "*" }, + Limit = 1 } - }; + } + }; + + protected override async Task OnInitializedAsync() { + var hs = await MRUStorage.GetCurrentSessionOrNavigate(); + if (hs is null) return; + GlobalProfile = await hs.GetProfile(hs.WhoAmI.UserId); + Status = "Syncing..."; SyncResult? sync = null; string? nextBatch = null; - while (sync is null or { Rooms.Join.Count: > 10}) { + while (sync is null or { Rooms.Join.Count: >= 1}) { sync = await hs.SyncHelper.Sync(since: nextBatch, filter: filter, timeout: 0); nextBatch = sync?.NextBatch ?? nextBatch; if (sync is null) continue; @@ -70,11 +79,13 @@ StateEvents = new() }; Rooms.Add(room); + KnownRooms.Add(room); } room.StateEvents.AddRange(roomData.State.Events); } - Status = $"Got {Rooms.Count} rooms so far!"; + Status = $"Got {Rooms.Count} rooms so far! Next batch: {nextBatch}"; StateHasChanged(); + await Task.Delay(100); } Console.WriteLine("Sync done!"); Status = "Sync complete!"; @@ -103,8 +114,10 @@ } Console.WriteLine("Set stub data!"); Status = "Set stub data!"; + SemaphoreSlim semaphore = new(8, 8); var memberTasks = Rooms.Select(async roomInfo => { if (!roomInfo.StateEvents.Any(x => x.Type == "m.room.member" && x.StateKey == hs.WhoAmI.UserId)) { + await semaphore.WaitAsync(); roomInfo.StateEvents.Add(new StateEventResponse() { Type = "m.room.member", StateKey = hs.WhoAmI.UserId, @@ -112,6 +125,7 @@ Membership = "unknown" } }); + semaphore.Release(); } }).ToList(); await Task.WhenAll(memberTasks); diff --git a/MatrixRoomUtils.Web/Pages/Rooms/Space.razor b/MatrixRoomUtils.Web/Pages/Rooms/Space.razor new file mode 100644 index 0000000..91f97d0 --- /dev/null +++ b/MatrixRoomUtils.Web/Pages/Rooms/Space.razor @@ -0,0 +1,96 @@ +@page "/Rooms/{RoomId}/Space" +@using System.Text.Json +@using MatrixRoomUtils.Core.Responses +

Room manager - Viewing Space

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

@stateEvent.StateKey/@stateEvent.Type:

+
@stateEvent.RawContent.ToJson()
+ } +
+ +@code { + + [Parameter] + public string RoomId { get; set; } = "invalid!!!!!!"; + + private GenericRoom? Room { get; set; } + + private StateEventResponse[] States { get; set; } = Array.Empty(); + private List Rooms { get; } = new(); + private List ServersInSpace { get; } = new(); + + protected override async Task OnInitializedAsync() { + var hs = await MRUStorage.GetCurrentSessionOrNavigate(); + if (hs is null) return; + + Room = await hs.GetRoom(RoomId.Replace('~', '.')); + + var state = Room.GetFullStateAsync(); + await foreach (var stateEvent in state) { + if (stateEvent.Type == "m.space.child") { + var roomId = stateEvent.StateKey; + var room = await 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); + } + } + } + await base.OnInitializedAsync(); + + // 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 = await 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() { + foreach (var room in Rooms) { + room.JoinAsync(ServersInSpace.ToArray()); + } + } + +} diff --git a/MatrixRoomUtils.Web/Pages/Rooms/StateEditor.razor b/MatrixRoomUtils.Web/Pages/Rooms/StateEditor.razor new file mode 100644 index 0000000..8b2ff0c --- /dev/null +++ b/MatrixRoomUtils.Web/Pages/Rooms/StateEditor.razor @@ -0,0 +1,145 @@ +@page "/Rooms/{RoomId}/State/Edit" +@using System.Net.Http.Headers +@using System.Text.Json +@using MatrixRoomUtils.Core.Responses +@inject ILocalStorageService LocalStorage +@inject NavigationManager NavigationManager +

Room state editor - Editing @RoomId

+
+ +

@status

+ + Show member events +
+ + + @foreach (var stateEvent in FilteredEvents.Where(x => x.StateKey != "").Select(x => x.StateKey).Distinct().OrderBy(x => x)) { + + Console.WriteLine(stateEvent); + } + +
+ + + @foreach (var stateEvent in FilteredEvents.Where(x => x.StateKey != shownStateKey).Select(x => x.Type).Distinct().OrderBy(x => x)) { + + } + +
+ + + + + +@code { + //get room list + // - sync withroom list filter + // Type = support.feline.msc3784 + //support.feline.policy.lists.msc.v1 + + [Parameter] + public string? RoomId { get; set; } + + public List FilteredEvents { get; set; } = new(); + public List Events { get; set; } = new(); + public string status = ""; + + protected override async Task OnInitializedAsync() { + await base.OnInitializedAsync(); + var hs = await MRUStorage.GetCurrentSessionOrNavigate(); + if (hs is null) return; + RoomId = RoomId.Replace('~', '.'); + await LoadStatesAsync(); + Console.WriteLine("Policy list editor initialized!"); + } + + private DateTime _lastUpdate = DateTime.Now; + + private async Task LoadStatesAsync() { + var hs = await MRUStorage.GetCurrentSessionOrNavigate(); + + var StateLoaded = 0; + var response = (await hs.GetRoom(RoomId)).GetFullStateAsync(); + await foreach (var _ev in response) { + // var e = new StateEventResponse { + // Type = _ev.Type, + // StateKey = _ev.StateKey, + // OriginServerTs = _ev.OriginServerTs, + // Content = _ev.Content + // }; + Events.Add(_ev); + if (string.IsNullOrEmpty(_ev.StateKey)) { + FilteredEvents.Add(_ev); + } + StateLoaded++; + if ((DateTime.Now - _lastUpdate).TotalMilliseconds > 100) { + _lastUpdate = DateTime.Now; + status = $"Loaded {StateLoaded} state events"; + StateHasChanged(); + await Task.Delay(0); + } + } + + StateHasChanged(); + } + + private async Task RebuildFilteredData() { + status = "Rebuilding filtered data..."; + StateHasChanged(); + await Task.Delay(1); + var _FilteredEvents = Events; + if (!ShowMembershipEvents) + _FilteredEvents = _FilteredEvents.Where(x => x.Type != "m.room.member").ToList(); + + status = "Done, rerendering!"; + StateHasChanged(); + await Task.Delay(1); + FilteredEvents = _FilteredEvents; + + if (_shownType is not null) + shownEventJson = _FilteredEvents.Where(x => x.Type == _shownType).First().RawContent.ToJson(indent: true, ignoreNull: true); + + StateHasChanged(); + } + + public struct PreRenderedStateEvent { + public string content { get; set; } + public long origin_server_ts { get; set; } + public string state_key { get; set; } + public string type { get; set; } + // public string Sender { get; set; } + // public string EventId { get; set; } + // public string UserId { get; set; } + // public string ReplacesState { get; set; } + } + + public bool ShowMembershipEvents { + get => _showMembershipEvents; + set { + _showMembershipEvents = value; + RebuildFilteredData(); + } + } + + private bool _showMembershipEvents; + private string _shownStateKey; + private string _shownType; + + private string shownStateKey { + get => _shownStateKey; + set { + _shownStateKey = value; + RebuildFilteredData(); + } + } + + private string shownType { + get => _shownType; + set { + _shownType = value; + RebuildFilteredData(); + } + } + + private string shownEventJson { get; set; } +} \ No newline at end of file diff --git a/MatrixRoomUtils.Web/Pages/Rooms/StateViewer.razor b/MatrixRoomUtils.Web/Pages/Rooms/StateViewer.razor new file mode 100644 index 0000000..09b38f0 --- /dev/null +++ b/MatrixRoomUtils.Web/Pages/Rooms/StateViewer.razor @@ -0,0 +1,128 @@ +@page "/Rooms/{RoomId}/State/View" +@using System.Net.Http.Headers +@using System.Text.Json +@using MatrixRoomUtils.Core.Responses +@inject ILocalStorageService LocalStorage +@inject NavigationManager NavigationManager +

Room state viewer - Viewing @RoomId

+
+ +

@status

+ + Show member events + + + + + + + + + + @foreach (var stateEvent in FilteredEvents.Where(x => x.StateKey == "").OrderBy(x => x.OriginServerTs)) { + + + + + } + +
TypeContent
@stateEvent.Type +
@stateEvent.RawContent.ToJson()
+
+ +@foreach (var group in FilteredEvents.GroupBy(x => x.StateKey).OrderBy(x => x.Key).Where(x => x.Key != "")) { +
+ @group.Key + + + + + + + + + @foreach (var stateEvent in group.OrderBy(x => x.OriginServerTs)) { + + + + + } + +
TypeContent
@stateEvent.Type +
@stateEvent.RawContent.ToJson()
+
+
+} + + + +@code { + //get room list + // - sync withroom list filter + // Type = support.feline.msc3784 + //support.feline.policy.lists.msc.v1 + + [Parameter] + public string? RoomId { get; set; } + + public List FilteredEvents { get; set; } = new(); + public List Events { get; set; } = new(); + public string status = ""; + + protected override async Task OnInitializedAsync() { + await base.OnInitializedAsync(); + var hs = await MRUStorage.GetCurrentSessionOrNavigate(); + if (hs is null) return; + await LoadStatesAsync(); + Console.WriteLine("Policy list editor initialized!"); + } + + private DateTime _lastUpdate = DateTime.Now; + + private async Task LoadStatesAsync() { + var StateLoaded = 0; + var hs = await MRUStorage.GetCurrentSessionOrNavigate(); + if (hs is null) return; + var response = (await hs.GetRoom(RoomId)).GetFullStateAsync(); + await foreach (var _ev in response) { + Events.Add(_ev); + if (string.IsNullOrEmpty(_ev.StateKey)) { + FilteredEvents.Add(_ev); + } + StateLoaded++; + if ((DateTime.Now - _lastUpdate).TotalMilliseconds > 100) { + _lastUpdate = DateTime.Now; + status = $"Loaded {StateLoaded} state events"; + StateHasChanged(); + await Task.Delay(0); + } + } + + StateHasChanged(); + } + + private async Task RebuildFilteredData() { + status = "Rebuilding filtered data..."; + StateHasChanged(); + await Task.Delay(1); + var _FilteredEvents = Events; + if (!ShowMembershipEvents) + _FilteredEvents = _FilteredEvents.Where(x => x.Type != "m.room.member").ToList(); + + status = "Done, rerendering!"; + StateHasChanged(); + await Task.Delay(1); + FilteredEvents = _FilteredEvents; + StateHasChanged(); + } + + public bool ShowMembershipEvents { + get => _showMembershipEvents; + set { + _showMembershipEvents = value; + RebuildFilteredData(); + } + } + + private bool _showMembershipEvents; +} \ No newline at end of file -- cgit 1.5.1