blob: 7c311365098b2df2f27fb9c093ffceec68eb01e3 (
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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
|
@page "/Rooms/{RoomId}/State/View"
@using ArcaneLibs.Extensions
@using LibMatrix
@inject NavigationManager NavigationManager
<h3>Room state viewer - Viewing @RoomId</h3>
<hr/>
<p>@status</p>
<input type="checkbox" id="showAll" @bind="ShowMembershipEvents"/> Show member events
<table class="table table-striped table-hover" style="width: fit-Content;">
<thead>
<tr>
<th scope="col">Type</th>
<th scope="col">Content</th>
</tr>
</thead>
<tbody>
@foreach (var stateEvent in FilteredEvents.Where(x => x.StateKey == "").OrderBy(x => x.OriginServerTs)) {
<tr>
<td>@stateEvent.Type</td>
<td style="max-width: fit-Content;">
<pre>@stateEvent.RawContent.ToJson()</pre>
</td>
</tr>
}
</tbody>
</table>
@foreach (var group in FilteredEvents.GroupBy(x => x.StateKey).OrderBy(x => x.Key).Where(x => x.Key != "")) {
<details>
<summary>@group.Key</summary>
<table class="table table-striped table-hover" style="width: fit-Content;">
<thead>
<tr>
<th scope="col">Type</th>
<th scope="col">Content</th>
</tr>
</thead>
<tbody>
@foreach (var stateEvent in group.OrderBy(x => x.OriginServerTs)) {
<tr>
<td>@stateEvent.Type</td>
<td style="max-width: fit-Content;">
<pre>@stateEvent.RawContent.ToJson()</pre>
</td>
</tr>
}
</tbody>
</table>
</details>
}
<LogView></LogView>
@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<StateEventResponse> FilteredEvents { get; set; } = new();
public List<StateEventResponse> Events { get; set; } = new();
public string status = "";
protected override async Task OnInitializedAsync() {
await base.OnInitializedAsync();
var hs = await RMUStorage.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 RMUStorage.GetCurrentSessionOrNavigate();
if (hs is null) return;
var response = (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)) continue;
_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;
}
|