From 89a14526658e5d061b1aef34ab569e979c9c0cf8 Mon Sep 17 00:00:00 2001
From: Rory&
Date: Wed, 6 Aug 2025 03:15:16 +0200
Subject: Various changes, room create/upgrade work
---
MatrixUtils.Web/Pages/Dev/DevUtilities.razor | 31 +-
MatrixUtils.Web/Pages/Dev/WellKnownRes.razor | 2 +-
MatrixUtils.Web/Pages/HSAdmin/HSAdmin.razor | 1 +
.../Pages/HSAdmin/HSE/ManageExternalProfiles.razor | 2 +-
.../Pages/HSAdmin/Synapse/BlockMedia.razor | 6 +-
.../SynapseRoomShutdownWindowContent.razor | 2 +-
.../Pages/HSAdmin/Synapse/RoomQuery.razor | 2 +-
.../Synapse/SubTools/SynapseRoomStateResync.razor | 2 +-
.../Pages/HSAdmin/Synapse/UserList.razor | 4 +-
MatrixUtils.Web/Pages/Index.razor | 13 +-
MatrixUtils.Web/Pages/InvalidSession.razor | 6 +-
.../Client/ClientComponents/ClientRoomList.razor | 2 +-
.../Labs/DMSpace/DMSpaceStages/DMSpaceStage1.razor | 4 +-
.../Labs/DMSpace/DMSpaceStages/DMSpaceStage2.razor | 6 +-
.../Labs/DMSpace/DMSpaceStages/DMSpaceStage3.razor | 2 +-
MatrixUtils.Web/Pages/LoginPage.razor | 8 +-
MatrixUtils.Web/Pages/Rooms/Create2.razor | 159 +++++
MatrixUtils.Web/Pages/Rooms/PolicyList.razor | 696 ++++++++++-----------
MatrixUtils.Web/Pages/Rooms/PolicyList.razor.cs | 144 +++++
MatrixUtils.Web/Pages/Rooms/PolicyList.razor.css | 9 -
MatrixUtils.Web/Pages/Rooms/PolicyList2.razor | 12 +-
.../PolicyListCategoryComponent.razor | 66 ++
.../PolicyListEditorHeader.razor | 65 ++
.../PolicyListRowComponent.razor | 167 +++++
MatrixUtils.Web/Pages/Rooms/PolicyLists.razor | 160 +++--
MatrixUtils.Web/Pages/Rooms/PolicyLists.razor.css | 6 -
.../RoomCreateBasicRoomInfoOptions.razor | 52 ++
.../RoomCreateCreateOptions.razor | 92 +++
.../RoomCreateInitialStateOptions.razor | 52 ++
.../RoomCreateMembershipOptions.razor | 55 ++
.../RoomCreatePermissionsOptions.razor | 123 ++++
.../RoomCreatePrivacyOptions.razor | 70 +++
.../RoomCreateUpgradeOptions.razor | 33 +
MatrixUtils.Web/Pages/Rooms/Timeline.razor | 1 +
MatrixUtils.Web/Pages/ServerInfo.razor | 1 +
MatrixUtils.Web/Pages/Tools/Debug/JoinRoom.razor | 33 +-
MatrixUtils.Web/Pages/Tools/Debug/LeaveRoom.razor | 2 +-
.../Pages/Tools/Debug/MigrateRoom.razor | 2 +-
.../Pages/Tools/Info/SessionCount.razor | 4 +-
MatrixUtils.Web/Pages/Tools/InviteCounter.razor | 2 +-
MatrixUtils.Web/Pages/Tools/MassCMEBan.razor | 2 +-
.../Draupnir/DraupnirProtectedRoomsEditor.razor | 2 +-
.../Draupnir/DraupnirProtectionsEditor.razor | 2 +-
.../Draupnir/DraupnirWatchedListsEditor.razor | 2 +-
.../Pages/Tools/Moderation/FindUsersByRegex.razor | 6 +-
.../Pages/Tools/Moderation/InviteCounter.razor | 2 +-
.../Pages/Tools/Moderation/MassCMEBan.razor | 2 +-
.../Pages/Tools/Moderation/MembershipHistory.razor | 14 +-
.../Pages/Tools/Moderation/RoomIntersections.razor | 6 +-
.../Pages/Tools/Moderation/UserTrace.razor | 4 +-
.../Pages/Tools/Room/DropPowerlevel.razor | 2 +-
.../Pages/Tools/Room/SpaceRestrictedJoins.razor | 2 +-
.../Pages/Tools/User/CopyPowerlevel.razor | 2 +-
.../Pages/Tools/User/MassJoinRoom.razor | 2 +-
MatrixUtils.Web/Pages/User/Profile.razor | 6 +-
55 files changed, 1631 insertions(+), 524 deletions(-)
create mode 100644 MatrixUtils.Web/Pages/Rooms/Create2.razor
create mode 100644 MatrixUtils.Web/Pages/Rooms/PolicyList.razor.cs
delete mode 100644 MatrixUtils.Web/Pages/Rooms/PolicyList.razor.css
create mode 100644 MatrixUtils.Web/Pages/Rooms/PolicyListComponents/PolicyListCategoryComponent.razor
create mode 100644 MatrixUtils.Web/Pages/Rooms/PolicyListComponents/PolicyListEditorHeader.razor
create mode 100644 MatrixUtils.Web/Pages/Rooms/PolicyListComponents/PolicyListRowComponent.razor
delete mode 100644 MatrixUtils.Web/Pages/Rooms/PolicyLists.razor.css
create mode 100644 MatrixUtils.Web/Pages/Rooms/RoomCreateComponents/RoomCreateBasicRoomInfoOptions.razor
create mode 100644 MatrixUtils.Web/Pages/Rooms/RoomCreateComponents/RoomCreateCreateOptions.razor
create mode 100644 MatrixUtils.Web/Pages/Rooms/RoomCreateComponents/RoomCreateInitialStateOptions.razor
create mode 100644 MatrixUtils.Web/Pages/Rooms/RoomCreateComponents/RoomCreateMembershipOptions.razor
create mode 100644 MatrixUtils.Web/Pages/Rooms/RoomCreateComponents/RoomCreatePermissionsOptions.razor
create mode 100644 MatrixUtils.Web/Pages/Rooms/RoomCreateComponents/RoomCreatePrivacyOptions.razor
create mode 100644 MatrixUtils.Web/Pages/Rooms/RoomCreateComponents/RoomCreateUpgradeOptions.razor
(limited to 'MatrixUtils.Web/Pages')
diff --git a/MatrixUtils.Web/Pages/Dev/DevUtilities.razor b/MatrixUtils.Web/Pages/Dev/DevUtilities.razor
index 3b2d533..f6392a4 100644
--- a/MatrixUtils.Web/Pages/Dev/DevUtilities.razor
+++ b/MatrixUtils.Web/Pages/Dev/DevUtilities.razor
@@ -1,5 +1,8 @@
@page "/Dev/Utilities"
@using ArcaneLibs.Extensions
+@using LibMatrix.EventTypes.Spec.Ephemeral
+@using LibMatrix.EventTypes.Spec.State.RoomInfo
+@using LibMatrix.Helpers
@using MatrixUtils.Abstractions
Debug Tools
@@ -14,7 +17,7 @@ else {
Room List
@foreach (var roomId in Rooms) {
-
+
}
@@ -61,6 +64,7 @@ else {
StateHasChanged();
return;
}
+
if (res.Content.Headers.ContentType.MediaType == "application/json")
GetRequestResult = $"Error: {res.StatusCode}\n" + (await res.Content.ReadFromJsonAsync
- Delete room
+ Delete room
Resync state
diff --git a/MatrixUtils.Web/Pages/HSAdmin/Synapse/SubTools/SynapseRoomStateResync.razor b/MatrixUtils.Web/Pages/HSAdmin/Synapse/SubTools/SynapseRoomStateResync.razor
index f3faafa..c2446a2 100644
--- a/MatrixUtils.Web/Pages/HSAdmin/Synapse/SubTools/SynapseRoomStateResync.razor
+++ b/MatrixUtils.Web/Pages/HSAdmin/Synapse/SubTools/SynapseRoomStateResync.razor
@@ -16,7 +16,7 @@
Via:
- Execute
+ Execute
}
@if (Executing) {
diff --git a/MatrixUtils.Web/Pages/HSAdmin/Synapse/UserList.razor b/MatrixUtils.Web/Pages/HSAdmin/Synapse/UserList.razor
index a2ada30..54ac800 100644
--- a/MatrixUtils.Web/Pages/HSAdmin/Synapse/UserList.razor
+++ b/MatrixUtils.Web/Pages/HSAdmin/Synapse/UserList.razor
@@ -59,8 +59,8 @@
- Log in
- @* Delete room *@
+ Log in
+ @* Delete room *@
@* Resync state *@
diff --git a/MatrixUtils.Web/Pages/Index.razor b/MatrixUtils.Web/Pages/Index.razor
index 509c634..82ee0f2 100644
--- a/MatrixUtils.Web/Pages/Index.razor
+++ b/MatrixUtils.Web/Pages/Index.razor
@@ -4,6 +4,7 @@
@using LibMatrix
@using ArcaneLibs
@using System.Diagnostics
+@using LibMatrix.Responses.Federation
Index
@@ -58,9 +59,9 @@ Small collection of tools to do not-so-everyday things.
- Manage
- Remove
- Log out
+ Manage
+ Remove
+ Log out
|
@@ -89,7 +90,7 @@ Small collection of tools to do not-so-everyday things.
- Remove
+ Remove
|
}
@@ -118,10 +119,10 @@ Small collection of tools to do not-so-everyday things.
- Re-login
+ Re-login
|
- Remove
+ Remove
|
}
diff --git a/MatrixUtils.Web/Pages/InvalidSession.razor b/MatrixUtils.Web/Pages/InvalidSession.razor
index 1ec99f6..f86d112 100644
--- a/MatrixUtils.Web/Pages/InvalidSession.razor
+++ b/MatrixUtils.Web/Pages/InvalidSession.razor
@@ -8,14 +8,14 @@
@if (_auth is not null) {
It appears that the affected user is @_auth.UserId (@_auth.DeviceId) on @_auth.Homeserver!
- Refresh token
- Remove
+ Refresh token
+ Remove
@if (_showRefreshDialog) {
- Log in
+ Log in
@if (_loginException is not null) {
@_loginException.RawContent
}
diff --git a/MatrixUtils.Web/Pages/Labs/Client/ClientComponents/ClientRoomList.razor b/MatrixUtils.Web/Pages/Labs/Client/ClientComponents/ClientRoomList.razor
index 8831dd1..56c8cfe 100644
--- a/MatrixUtils.Web/Pages/Labs/Client/ClientComponents/ClientRoomList.razor
+++ b/MatrixUtils.Web/Pages/Labs/Client/ClientComponents/ClientRoomList.razor
@@ -1,7 +1,7 @@
@using ClientContext = MatrixUtils.Web.Pages.Labs.Client.Index.ClientContext
@* user header and room list *@
@foreach (var room in Data.SyncWrapper.Rooms) {
-
+
@room.RoomName
diff --git a/MatrixUtils.Web/Pages/Labs/DMSpace/DMSpaceStages/DMSpaceStage1.razor b/MatrixUtils.Web/Pages/Labs/DMSpace/DMSpaceStages/DMSpaceStage1.razor
index a974a8f..360548d 100644
--- a/MatrixUtils.Web/Pages/Labs/DMSpace/DMSpaceStages/DMSpaceStage1.razor
+++ b/MatrixUtils.Web/Pages/Labs/DMSpace/DMSpaceStages/DMSpaceStage1.razor
@@ -28,8 +28,8 @@
- Disband
- Next
+ Disband
+ Next
}
else {
Discovering spaces, please wait...
diff --git a/MatrixUtils.Web/Pages/Labs/DMSpace/DMSpaceStages/DMSpaceStage2.razor b/MatrixUtils.Web/Pages/Labs/DMSpace/DMSpaceStages/DMSpaceStage2.razor
index 9f31647..25d1629 100644
--- a/MatrixUtils.Web/Pages/Labs/DMSpace/DMSpaceStages/DMSpaceStage2.razor
+++ b/MatrixUtils.Web/Pages/Labs/DMSpace/DMSpaceStages/DMSpaceStage2.razor
@@ -31,7 +31,7 @@ else {
}
-Next
+Next
@{
var _offset = 0;
@@ -41,7 +41,7 @@ else {
Found room assigned to multiple users:
Users:
@foreach (var userProfileResponse in usersList) {
-
+
Assign to
@@ -54,7 +54,7 @@ else {
@foreach (var userProfileResponse in roomMembers[DmToReassign]) {
-
+
Assign to
diff --git a/MatrixUtils.Web/Pages/Labs/DMSpace/DMSpaceStages/DMSpaceStage3.razor b/MatrixUtils.Web/Pages/Labs/DMSpace/DMSpaceStages/DMSpaceStage3.razor
index e5a8b22..2bed22e 100644
--- a/MatrixUtils.Web/Pages/Labs/DMSpace/DMSpaceStages/DMSpaceStage3.razor
+++ b/MatrixUtils.Web/Pages/Labs/DMSpace/DMSpaceStages/DMSpaceStage3.razor
@@ -59,7 +59,7 @@ else {
}
-Next
+Next
@code {
diff --git a/MatrixUtils.Web/Pages/LoginPage.razor b/MatrixUtils.Web/Pages/LoginPage.razor
index 88577a2..38ede74 100644
--- a/MatrixUtils.Web/Pages/LoginPage.razor
+++ b/MatrixUtils.Web/Pages/LoginPage.razor
@@ -22,8 +22,8 @@
-Add account to queue
-Log in
+Add account to queue
+Log in
@@ -44,7 +44,7 @@
-Add session
+Add session
@@ -101,7 +101,7 @@
}
-Log in
+Log in
@code {
diff --git a/MatrixUtils.Web/Pages/Rooms/Create2.razor b/MatrixUtils.Web/Pages/Rooms/Create2.razor
new file mode 100644
index 0000000..19f6fbc
--- /dev/null
+++ b/MatrixUtils.Web/Pages/Rooms/Create2.razor
@@ -0,0 +1,159 @@
+@page "/Rooms/Create2"
+@using System.Text.Json
+@using System.Reflection
+@using ArcaneLibs
+@using ArcaneLibs.Extensions
+@using Blazored.LocalStorage
+@using LibMatrix
+@using LibMatrix.EventTypes.Spec.State.RoomInfo
+@using LibMatrix.Helpers
+@using LibMatrix.Responses
+@using MatrixUtils.Web.Classes.RoomCreationTemplates
+@using MatrixUtils.Web.Pages.Rooms.RoomCreateComponents
+@inject ILogger logger
+@* @* ReSharper disable once RedundantUsingDirective - Must not remove this, Rider marks this as "unused" when it's not */ *@
+
+Room Manager - Create Room
+
+@if (Ready) {
+
+
+ @if (roomBuilder is RoomUpgradeBuilder roomUpgrade) {
+
+ }
+ else {
+ @* *@
+ @* | Preset: | *@
+ @* *@
+ @* @if (Presets is null) { *@
+ @* Presets is null! *@
+ @* } *@
+ @* else { *@
+ @* Support for presets is currently disabled! *@
+ @* $1$ #1# *@
+ @* $1$ @foreach (var createRoomRequest in Presets) { #1# *@
+ @* $1$ #1# *@
+ @* $1$ } #1# *@
+ @* $1$ #1# *@
+ @* } *@
+ @* | *@
+ @*
*@
+ }
+
+
+
+
+
+ @* Initial states, should remain at bottom *@
+
+ Create room
+
+
+
+ RoomBuilder state
+
+ Show null values
+
+ @roomBuilder.ToJson(ignoreNull: !ShowNullInState)
+
+
+
+}
+@if (_matrixException is not null) {
+
+
+ @_matrixException.Message
+
+
+}
+
+@code {
+
+#region State
+
+ [Parameter, SupplyParameterFromQuery(Name = "previousRoomId")]
+ public string? PreviousRoomId { get; set; }
+
+ private bool ShowNullInState { get; set; }
+
+ private bool Ready { get; set; }
+
+ private RoomBuilder roomBuilder { get; set; } = new();
+
+ private AuthenticatedHomeserverGeneric? Homeserver { get; set; }
+
+ private MatrixException? _matrixException { get; set; }
+
+#endregion
+
+#region Presets
+
+ private Dictionary? Presets { get; set; } = new();
+ // private string RoomPreset {
+ // get => Presets.ContainsValue(roomBuilder) ? Presets.First(x => x.Value == roomBuilder).Key : "Not a preset";
+ // set {
+ // roomBuilder = Presets[value];
+ // JsonChanged();
+ // StateHasChanged();
+ // }
+ // }
+
+#endregion
+
+ protected override async Task OnInitializedAsync() {
+ Homeserver = await sessionStore.GetCurrentHomeserver(navigateOnFailure: true);
+ if (Homeserver is null) return;
+ if (!string.IsNullOrWhiteSpace(PreviousRoomId)) {
+ roomBuilder = new RoomUpgradeBuilder(Homeserver.GetRoom(PreviousRoomId));
+ }
+
+ roomBuilder.ServerAcls.Allow = ["*"];
+ roomBuilder.ServerAcls.Deny = [];
+
+ // foreach (var x in Assembly.GetExecutingAssembly().GetTypes().Where(x => x.IsClass && !x.IsAbstract && x.GetInterfaces().Contains(typeof(IRoomCreationTemplate))).ToList()) {
+ // Console.WriteLine($"Found room creation template in class: {x.FullName}");
+ // var instance = (IRoomCreationTemplate)Activator.CreateInstance(x);
+ // Presets[instance.Name] = instance.CreateRoomRequest;
+ // }
+ //
+ // Presets = Presets.OrderBy(x => x.Key).ToDictionary(x => x.Key, x => x.Value);
+
+ // if (!Presets.ContainsKey("Default")) {
+ // Console.WriteLine($"No default room found in {Presets.Count} presets: {string.Join(", ", Presets.Keys)}");
+ // }
+ // else RoomPreset = "Default";
+
+ Ready = true;
+ StateHasChanged();
+ if (roomBuilder is RoomUpgradeBuilder roomUpgrade) {
+ await roomUpgrade.ImportAsync().ConfigureAwait(false);
+ StateHasChanged();
+ }
+ }
+
+ protected override bool ShouldRender() {
+ if (roomBuilder.Type == "")
+ roomBuilder.Type = null; // Reset to null if empty, so it doesn't get sent as an empty string
+ var result = base.ShouldRender();
+ logger.LogInformation("ShouldRender: " + result);
+ return result;
+ }
+
+ private async Task CreateRoom() {
+ Console.WriteLine("Create room");
+ Console.WriteLine(roomBuilder.ToJson());
+ roomBuilder.AdditionalCreationContent["gay.rory.created_using"] = "Rory&::MatrixUtils (https://mru.rory.gay)";
+ try {
+ var newRoom = await roomBuilder.Create(Homeserver);
+ }
+ catch (MatrixException e) {
+ _matrixException = e;
+ }
+ }
+
+}
diff --git a/MatrixUtils.Web/Pages/Rooms/PolicyList.razor b/MatrixUtils.Web/Pages/Rooms/PolicyList.razor
index 96879b8..cdb5894 100644
--- a/MatrixUtils.Web/Pages/Rooms/PolicyList.razor
+++ b/MatrixUtils.Web/Pages/Rooms/PolicyList.razor
@@ -8,190 +8,118 @@
@using System.Reflection
@using ArcaneLibs.Attributes
@using LibMatrix.EventTypes
-@using LibMatrix.EventTypes.Common
@using LibMatrix.EventTypes.Interop.Draupnir
@using LibMatrix.EventTypes.Spec.State.RoomInfo
-
-@using MatrixUtils.Web.Shared.PolicyEditorComponents
@using SpawnDev.BlazorJS.WebWorkers
+@using MatrixUtils.Web.Pages.Rooms.PolicyListComponents
@inject WebWorkerService WebWorkerService
+@inject ILogger logger
-Policy list editor - Editing @(RoomName ?? RoomId)
-@if (!string.IsNullOrWhiteSpace(DraupnirShortcode)) {
- Shortcode: @DraupnirShortcode
-}
-@if (!string.IsNullOrWhiteSpace(RoomAlias)) {
- Alias: @RoomAlias
-}
-
-@* *@
-Create new policy
-
-Create many new policies
-
-Refresh
-
-@if (Loading) {
- Loading...
-}
-else if (PolicyEventsByType is not { Count: > 0 }) {
- No policies yet
+@if (!IsInitialised) {
+ Connecting to homeserver...
}
else {
- var renderSw = Stopwatch.StartNew();
- var renderTotalSw = Stopwatch.StartNew();
- @foreach (var (type, value) in PolicyEventsByType) {
-
- @(GetValidPolicyEventsByType(type).Count) active,
- @(GetInvalidPolicyEventsByType(type).Count) invalid,
- @(GetRemovedPolicyEventsByType(type).Count) removed
- (@value.Count total)
- @(GetPolicyTypeName(type).ToLower())
-
- }
-
- Console.WriteLine($"Rendered header in {renderSw.GetElapsedAndRestart()}");
-
- var renderSw2 = Stopwatch.StartNew();
- IOrderedEnumerable policiesByType = KnownPolicyTypes.Where(t => GetPolicyEventsByType(t).Count > 0).OrderByDescending(t => GetPolicyEventsByType(t).Count);
- Console.WriteLine($"Ordered policy types by count in {renderSw2.GetElapsedAndRestart()}");
-
- foreach (var type in policiesByType) {
-
-
-
- @($"{GetPolicyTypeName(type)}: {GetPolicyEventsByType(type).Count} policies")
-
-
-
-
- @{
- var renderSw3 = Stopwatch.StartNew();
- var policies = GetValidPolicyEventsByType(type);
- var invalidPolicies = GetInvalidPolicyEventsByType(type);
- // enumerate all properties with friendly name
- var props = type.GetProperties(BindingFlags.Public | BindingFlags.Instance)
- .Where(x => (x.GetFriendlyNameOrNull() ?? x.GetJsonPropertyNameOrNull()) is not null)
- .Where(x => x.GetCustomAttribute() is null)
- .ToFrozenSet();
- var propNames = props.Select(x => x.GetFriendlyNameOrNull() ?? x.GetJsonPropertyName()!).ToFrozenSet();
-
- var proxySafeProps = type.GetProperties(BindingFlags.Public | BindingFlags.Instance)
- .Where(x => props.Any(y => y.Name == x.Name))
- .ToFrozenSet();
- Console.WriteLine($"{proxySafeProps?.Count} proxy safe props found in {policies.FirstOrDefault()?.TypedContent?.GetType()}");
- Console.WriteLine($"Filtered policies and got properties in {renderSw3.GetElapsedAndRestart()}");
- }
-
-
- @foreach (var name in propNames) {
- | @name |
- }
- Actions |
-
-
-
- @foreach (var policy in policies.OrderBy(x => x.RawContent?["entity"]?.GetValue())) {
-
- @{
- var typedContent = policy.TypedContent! as PolicyRuleEventContent;
- }
- @foreach (var prop in proxySafeProps ?? Enumerable.Empty()) {
- if (prop.Name == "Entity") {
- | @TruncateMxid(typedContent!.Entity) |
- }
- else {
- @prop.GetGetMethod()?.Invoke(typedContent, null) |
- }
- }
-
-
- @if (PowerLevels.UserHasStatePermission(Homeserver.WhoAmI.UserId, policy.Type)) {
- Edit
-
- Remove
- @if (policy.IsLegacyType) {
- Update policy type
- }
-
- @if (PolicyTypeIds[typeof(ServerPolicyRuleEventContent)].Contains(policy.Type)) {
- Make permanent
-
- @if (CurrentUserIsDraupnir) {
- Kick
- users @(ActiveKicks.TryGetValue(policy, out var kick) ? $"({kick})" : null)
-
- }
- }
- }
- else {
- No permission to modify
- }
-
- |
-
- }
-
-
-
-
-
- @("Invalid " + GetPolicyTypeName(type).ToLower())
-
-
-
-
-
- | State key |
- Json contents |
-
-
-
- @foreach (var policy in invalidPolicies) {
-
- | @policy.StateKey |
-
- @policy.RawContent.ToJson(true, false)
- |
-
- }
-
-
-
-
+
+ @if (Loading) {
+ Loading...
}
+ // else if (PolicyEventsByType is not { Count: > 0 }) {
+ @* No policies yet
*@
+ // }
+ else {
+ var renderSw = Stopwatch.StartNew();
+ var renderTotalSw = Stopwatch.StartNew();
+ @foreach (var value in PolicyCollections.Values.OrderByDescending(x => x.TotalCount)) {
+
+ @value.ActivePolicies.Count active,
+ @value.RemovedPolicies.Count removed
+ (@value.TotalCount total)
+ @value.Name.ToLower()
+
+ }
- Console.WriteLine($"Rendered policies in {renderSw.GetElapsedAndRestart()}");
- Console.WriteLine($"Rendered in {renderTotalSw.Elapsed}");
-}
+ // logger.LogInformation($"Rendered header in {renderSw.GetElapsedAndRestart()}");
-@if (CurrentlyEditingEvent is not null) {
-
-}
+ // var renderSw2 = Stopwatch.StartNew();
+ // IOrderedEnumerable policiesByType = KnownPolicyTypes.Where(t => GetPolicyEventsByType(t).Count > 0).OrderByDescending(t => GetPolicyEventsByType(t).Count);
+ // logger.LogInformation($"Ordered policy types by count in {renderSw2.GetElapsedAndRestart()}");
-@if (ServerPolicyToMakePermanent is not null) {
-
-
-
-}
+ foreach (var collection in PolicyCollections.Values.OrderByDescending(x => x.ActivePolicies.Count)) {
+
+ }
-@if (MassCreatePolicies) {
-
+ // foreach (var type in policiesByType) {
+ @* foreach (var type in (List) []) { *@
+ @* *@
+ @* *@
+ @* *@
+ @* @($"{GetPolicyTypeName(type)}: {GetPolicyEventsByType(type).Count} policies") *@
+ @* *@
+ @*
*@
+ @*
*@
+ @* *@
+ @* @{ *@
+ @* var renderSw3 = Stopwatch.StartNew(); *@
+ @* var policies = GetValidPolicyEventsByType(type); *@
+ @* var invalidPolicies = GetInvalidPolicyEventsByType(type); *@
+ @* // enumerate all properties with friendly name *@
+ @* var props = type.GetProperties(BindingFlags.Public | BindingFlags.Instance) *@
+ @* .Where(x => (x.GetFriendlyNameOrNull() ?? x.GetJsonPropertyNameOrNull()) is not null) *@
+ @* .Where(x => x.GetCustomAttribute() is null) *@
+ @* .ToFrozenSet(); *@
+ @* var propNames = props.Select(x => x.GetFriendlyNameOrNull() ?? x.GetJsonPropertyName()!).ToFrozenSet(); *@
+ @* *@
+ @* var proxySafeProps = type.GetProperties(BindingFlags.Public | BindingFlags.Instance) *@
+ @* .Where(x => props.Any(y => y.Name == x.Name)) *@
+ @* .ToFrozenSet(); *@
+ @* logger.LogInformation($"{proxySafeProps?.Count} proxy safe props found in {policies.FirstOrDefault()?.TypedContent?.GetType()}"); *@
+ @* logger.LogInformation($"Filtered policies and got properties in {renderSw3.GetElapsedAndRestart()}"); *@
+ @* } *@
+ @* *@
+ @* *@
+ @* @foreach (var name in propNames) { *@
+ @* | @name | *@
+ @* } *@
+ @* Actions | *@
+ @*
*@
+ @* *@
+ @* *@
+ @* @foreach (var policy in policies.OrderBy(x => x.RawContent?["entity"]?.GetValue())) { *@
+ @* *@
+ @* } *@
+ @* *@
+ @*
*@
+ @* *@
+ @* *@
+ @* *@
+ @* @("Invalid " + GetPolicyTypeName(type).ToLower()) *@
+ @* *@
+ @*
*@
+ @* *@
+ @* *@
+ @* *@
+ @* | State key | *@
+ @* Json contents | *@
+ @*
*@
+ @* *@
+ @* *@
+ @* @foreach (var policy in invalidPolicies) { *@
+ @* *@
+ @* | @policy.StateKey | *@
+ @* *@
+ @* @policy.RawContent.ToJson(true, false) *@
+ @* | *@
+ @*
*@
+ @* } *@
+ @* *@
+ @*
*@
+ @* *@
+ @* *@
+ // }
+
+ // logger.LogInformation($"Rendered policies in {renderSw.GetElapsedAndRestart()}");
+ logger.LogInformation($"Rendered in {renderTotalSw.Elapsed}");
+ }
}
@code {
@@ -202,6 +130,7 @@ else {
private const bool Debug = false;
#endif
+ private bool IsInitialised { get; set; } = false;
private bool Loading { get; set; } = true;
[Parameter]
@@ -209,14 +138,6 @@ else {
private Dictionary> PolicyEventsByType { get; set; } = new();
- private StateEventResponse? CurrentlyEditingEvent {
- get;
- set {
- field = value;
- StateHasChanged();
- }
- }
-
public StateEventResponse? ServerPolicyToMakePermanent {
get;
set {
@@ -225,22 +146,12 @@ else {
}
}
- private AuthenticatedHomeserverGeneric Homeserver { get; set; }
- private GenericRoom Room { get; set; }
- private RoomPowerLevelEventContent PowerLevels { get; set; }
+ private AuthenticatedHomeserverGeneric Homeserver { get; set; } = null!;
+ private GenericRoom Room { get; set; } = null!;
+ private RoomPowerLevelEventContent PowerLevels { get; set; } = null!;
public bool CurrentUserIsDraupnir { get; set; }
- public string? RoomName { get; set; }
- public string? RoomAlias { get; set; }
- public string? DraupnirShortcode { get; set; }
- public Dictionary ActiveKicks { get; set; } = [];
- public bool MassCreatePolicies {
- get;
- set {
- field = value;
- StateHasChanged();
- }
- }
+ public Dictionary ActiveKicks { get; set; } = [];
protected override async Task OnInitializedAsync() {
var sw = Stopwatch.StartNew();
@@ -248,64 +159,234 @@ else {
Homeserver = (await sessionStore.GetCurrentHomeserver(navigateOnFailure: true))!;
if (Homeserver is null) return;
Room = Homeserver.GetRoom(RoomId!);
+ IsInitialised = true;
+ StateHasChanged();
await Task.WhenAll(
Task.Run(async () => { PowerLevels = (await Room.GetPowerLevelsAsync())!; }),
- Task.Run(async () => { DraupnirShortcode = (await Room.GetStateOrNullAsync(MjolnirShortcodeEventContent.EventId))?.Shortcode; }),
- Task.Run(async () => { RoomAlias = (await Room.GetCanonicalAliasAsync())?.Alias; }),
- Task.Run(async () => { RoomName = await Room.GetNameOrFallbackAsync(); }),
Task.Run(async () => { CurrentUserIsDraupnir = (await Homeserver.GetAccountDataOrNullAsync