diff --git a/MatrixUtils.Web/Pages/Rooms/Create.razor b/MatrixUtils.Web/Pages/Rooms/Create.razor
index 021ad18..051d5af 100644
--- a/MatrixUtils.Web/Pages/Rooms/Create.razor
+++ b/MatrixUtils.Web/Pages/Rooms/Create.razor
@@ -12,10 +12,10 @@
@* <pre Contenteditable="true" @onkeypress="@JsonChanged" content="JsonString">@JsonString</pre> *@
<style>
- table.table-top-first-tr tr td:first-child {
- vertical-align: top;
- }
- </style>
+ table.table-top-first-tr tr td:first-child {
+ vertical-align: top;
+ }
+</style>
<table class="table-top-first-tr">
<tr style="padding-bottom: 16px;">
<td>Preset:</td>
@@ -41,7 +41,10 @@
}
else {
<FancyTextBox @bind-Value="@creationEvent.Name"></FancyTextBox>
- <p>(#<FancyTextBox @bind-Value="@creationEvent.RoomAliasName"></FancyTextBox>:@Homeserver.WhoAmI.UserId.Split(':').Last())</p>
+ <p>(#
+ <FancyTextBox @bind-Value="@creationEvent.RoomAliasName"></FancyTextBox>
+ :@Homeserver.WhoAmI.UserId.Split(':').Last())
+ </p>
}
</td>
</tr>
@@ -89,7 +92,8 @@
<td>
@* <img src="@Homeserver.ResolveMediaUri(roomAvatarEvent.Url)" style="width: 128px; height: 128px; border-radius: 50%;"/> *@
<div style="display: inline-block; vertical-align: middle;">
- <FancyTextBox @bind-Value="@roomAvatarEvent.Url"></FancyTextBox><br/>
+ <FancyTextBox @bind-Value="@roomAvatarEvent.Url"></FancyTextBox>
+ <br/>
<InputFile OnChange="RoomIconFilePicked"></InputFile>
</div>
</td>
@@ -105,19 +109,27 @@
<FancyTextBox Formatter="@GetPermissionFriendlyName"
Value="@_event"
ValueChanged="val => { creationEvent.PowerLevelContentOverride.Events.ChangeKey(_event, val); }">
- </FancyTextBox>:
+ </FancyTextBox>
+ :
</td>
<td>
- <input type="number" value="@creationEvent.PowerLevelContentOverride.Events[_event]" @oninput="val => { creationEvent.PowerLevelContentOverride.Events[_event] = int.Parse(val.Value.ToString()); }" @onfocusout="() => { creationEvent.PowerLevelContentOverride.Events = creationEvent.PowerLevelContentOverride.Events.OrderByDescending(x => x.Value).ThenBy(x => x.Key).ToDictionary(x => x.Key, x => x.Value); }"/>
+ <input type="number" value="@creationEvent.PowerLevelContentOverride.Events[_event]"
+ @oninput="val => { creationEvent.PowerLevelContentOverride.Events[_event] = int.Parse(val.Value.ToString()); }"
+ @onfocusout="() => { creationEvent.PowerLevelContentOverride.Events = creationEvent.PowerLevelContentOverride.Events.OrderByDescending(x => x.Value).ThenBy(x => x.Key).ToDictionary(x => x.Key, x => x.Value); }"/>
</td>
</tr>
}
@foreach (var user in creationEvent.PowerLevelContentOverride.Users.Keys) {
var _user = user;
<tr>
- <td><FancyTextBox Value="@_user" ValueChanged="val => { creationEvent.PowerLevelContentOverride.Users.ChangeKey(_user, val); creationEvent.PowerLevelContentOverride.Users = creationEvent.PowerLevelContentOverride.Users.OrderByDescending(x => x.Value).ThenBy(x => x.Key).ToDictionary(x => x.Key, x => x.Value); }"></FancyTextBox>:</td>
<td>
- <input type="number" value="@creationEvent.PowerLevelContentOverride.Users[_user]" @oninput="val => { creationEvent.PowerLevelContentOverride.Users[_user] = int.Parse(val.Value.ToString()); }"/>
+ <FancyTextBox Value="@_user"
+ ValueChanged="val => { creationEvent.PowerLevelContentOverride.Users.ChangeKey(_user, val); creationEvent.PowerLevelContentOverride.Users = creationEvent.PowerLevelContentOverride.Users.OrderByDescending(x => x.Value).ThenBy(x => x.Key).ToDictionary(x => x.Key, x => x.Value); }"></FancyTextBox>
+ :
+ </td>
+ <td>
+ <input type="number" value="@creationEvent.PowerLevelContentOverride.Users[_user]"
+ @oninput="val => { creationEvent.PowerLevelContentOverride.Users[_user] = int.Parse(val.Value.ToString()); }"/>
</td>
</tr>
}
@@ -266,6 +278,7 @@
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")) {
@@ -299,7 +312,7 @@
private void InviteMember(string mxid) {
if (!creationEvent.InitialState.Any(x => x.Type == "m.room.member" && x.StateKey == mxid) && Homeserver.UserId != mxid)
- creationEvent.InitialState.Add(new StateEvent {
+ creationEvent.InitialState.Add(new MatrixEvent {
Type = "m.room.member",
StateKey = mxid,
TypedContent = new RoomMemberEventContent {
@@ -316,7 +329,7 @@
"m.room.server_acl" => "Server ACL",
"m.room.avatar" => "Avatar",
_ => key
- };
+ };
private string GetPermissionFriendlyName(string key) => key switch {
"m.reaction" => "Send reaction",
@@ -331,6 +344,6 @@
"m.room.pinned_events" => "Pin events",
"m.room.server_acl" => "Change server ACLs",
_ => key
- };
+ };
}
diff --git a/MatrixUtils.Web/Pages/Rooms/PolicyList.razor b/MatrixUtils.Web/Pages/Rooms/PolicyList.razor
index 92c6ca5..f2ab186 100644
--- a/MatrixUtils.Web/Pages/Rooms/PolicyList.razor
+++ b/MatrixUtils.Web/Pages/Rooms/PolicyList.razor
@@ -172,9 +172,9 @@ else {
}
}
- private Dictionary<Type, List<StateEventResponse>> PolicyEventsByType { get; set; } = new();
+ private Dictionary<Type, List<MatrixEventResponse>> PolicyEventsByType { get; set; } = new();
- public StateEventResponse? ServerPolicyToMakePermanent {
+ public MatrixEventResponse? ServerPolicyToMakePermanent {
get;
set {
field = value;
@@ -187,9 +187,9 @@ else {
private RoomPowerLevelEventContent PowerLevels { get; set; } = null!;
public bool CurrentUserIsDraupnir { get; set; }
- public Dictionary<StateEventResponse, int> ActiveKicks { get; set; } = [];
+ public Dictionary<MatrixEventResponse, int> ActiveKicks { get; set; } = [];
- private static FrozenSet<Type> KnownPolicyTypes = StateEvent.KnownStateEventTypes.Where(x => x.IsAssignableTo(typeof(PolicyRuleEventContent))).ToFrozenSet();
+ private static FrozenSet<Type> KnownPolicyTypes = MatrixEvent.KnownEventTypes.Where(x => x.IsAssignableTo(typeof(PolicyRuleEventContent))).ToFrozenSet();
// event types, unnamed
// private static Dictionary<string, Type> PolicyTypes = KnownPolicyTypes
@@ -274,14 +274,14 @@ else {
if (evt.RawContent is null or { Count: 0 } || string.IsNullOrWhiteSpace(evt.RawContent?["recommendation"]?.GetValue<string>())) {
collection.ActivePolicies.Remove(key);
if (!collection.RemovedPolicies.TryAdd(key, policyInfo)) {
- if (StateEvent.Equals(collection.RemovedPolicies[key].Policy, evt)) continue;
+ if (MatrixEvent.Equals(collection.RemovedPolicies[key].Policy, evt)) continue;
collection.RemovedPolicies[key] = policyInfo;
}
}
else {
collection.RemovedPolicies.Remove(key);
if (!collection.ActivePolicies.TryAdd(key, policyInfo)) {
- if (StateEvent.Equals(collection.ActivePolicies[key].Policy, evt)) continue;
+ if (MatrixEvent.Equals(collection.ActivePolicies[key].Policy, evt)) continue;
collection.ActivePolicies[key] = policyInfo;
}
}
@@ -328,7 +328,7 @@ else {
// foreach (var (policyInfo, policyContent) in allPolicies) {
// foreach (var (otherPolicyInfo, otherPolicyContent) in allPolicies) {
// if (policyInfo.Policy == otherPolicyInfo.Policy) continue; // same event
- // if (StateEvent.TypeKeyPairMatches(policyInfo.Policy, otherPolicyInfo.Policy)) {
+ // if (MatrixEvent.TypeKeyPairMatches(policyInfo.Policy, otherPolicyInfo.Policy)) {
// logger.LogWarning("Sanity check failed: Found same type and state key for two different policies: {Policy1} and {Policy2}", policyInfo.Policy.RawContent.ToJson(), otherPolicyInfo.Policy.RawContent.ToJson());
// continue; // same type and state key
// }
@@ -343,7 +343,7 @@ else {
int scanningPolicyCount = 0;
var aggregatedPolicies = PolicyCollections.Values
- .Aggregate(new List<StateEventResponse>(), (acc, val) => {
+ .Aggregate(new List<MatrixEventResponse>(), (acc, val) => {
acc.AddRange(val.ActivePolicies.Select(x => x.Value.Policy));
return acc;
});
@@ -387,8 +387,8 @@ else {
// Console.WriteLine($"Main: got {modifiedPolicyInfos.Count} modified policies from worker, time: {scanSw.Elapsed}");
foreach (var modifiedPolicyInfo in modifiedPolicyInfos) {
var original = allPolicyInfos.First(p => p.Policy.EventId == modifiedPolicyInfo.Policy.EventId);
- original.DuplicatedBy = aggregatedPolicies.Where(x => modifiedPolicyInfo.DuplicatedBy.Any(y => StateEvent.Equals(x, y))).ToList();
- original.MadeRedundantBy = aggregatedPolicies.Where(x => modifiedPolicyInfo.MadeRedundantBy.Any(y => StateEvent.Equals(x, y))).ToList();
+ original.DuplicatedBy = aggregatedPolicies.Where(x => modifiedPolicyInfo.DuplicatedBy.Any(y => MatrixEvent.Equals(x, y))).ToList();
+ original.MadeRedundantBy = aggregatedPolicies.Where(x => modifiedPolicyInfo.MadeRedundantBy.Any(y => MatrixEvent.Equals(x, y))).ToList();
modifiedPolicyInfo.DuplicatedBy = modifiedPolicyInfo.MadeRedundantBy = []; // Early dereference
if (original.DuplicatedBy.Count > 0) {
if (!DuplicateBans.Value.ActivePolicies.ContainsKey((original.Policy.Type, original.Policy.StateKey!)))
@@ -476,24 +476,24 @@ else {
[return: WorkerTransfer]
private static async Task<List<PolicyCollection.PolicyInfo>> CheckDuplicatePoliciesAsync(SpawnDev.BlazorJS.JSObjects.String policiesJson, int start, int end) {
- var policies = JsonSerializer.Deserialize<List<StateEventResponse>>(policiesJson.ValueOf());
+ var policies = JsonSerializer.Deserialize<List<MatrixEventResponse>>(policiesJson.ValueOf());
Console.WriteLine($"Got request to check duplicate policies in range {start} to {end} (length: {end - start}), {policiesJson.ValueOf().Length} bytes of JSON ({policies!.Count} policies)");
return await CheckDuplicatePoliciesAsync(policies!, start .. end);
}
[return: WorkerTransfer]
private static async Task<List<PolicyCollection.PolicyInfo>> CheckDuplicatePoliciesAsync(string policiesJson, int start, int end) {
- var policies = JsonSerializer.Deserialize<List<StateEventResponse>>(policiesJson);
+ var policies = JsonSerializer.Deserialize<List<MatrixEventResponse>>(policiesJson);
Console.WriteLine($"Got request to check duplicate policies in range {start} to {end} (length: {end - start}), {policiesJson.Length} bytes of JSON ({policies!.Count} policies)");
return await CheckDuplicatePoliciesAsync(policies!, start .. end);
}
[return: WorkerTransfer]
- private static Task<List<PolicyCollection.PolicyInfo>> CheckDuplicatePoliciesAsync(List<StateEventResponse> policies, int start, int end)
+ private static Task<List<PolicyCollection.PolicyInfo>> CheckDuplicatePoliciesAsync(List<MatrixEventResponse> policies, int start, int end)
=> CheckDuplicatePoliciesAsync(policies, start .. end);
[return: WorkerTransfer]
- private static async Task<List<PolicyCollection.PolicyInfo>> CheckDuplicatePoliciesAsync(List<StateEventResponse> policies, Range range) {
+ private static async Task<List<PolicyCollection.PolicyInfo>> CheckDuplicatePoliciesAsync(List<MatrixEventResponse> policies, Range range) {
var sw = Stopwatch.StartNew();
var jsConsole = App.Host.Services.GetService<JsConsoleService>()!;
Console.WriteLine($"Processing policies in range {range} ({range.GetOffsetAndLength(policies.Count).Length}) with {policies.Count} total policies");
@@ -504,12 +504,12 @@ else {
var modifiedPolicies = new List<PolicyCollection.PolicyInfo>();
foreach (var (policyEvent, policyContent) in toCheck) {
- List<StateEventResponse> duplicatedBy = [];
- List<StateEventResponse> madeRedundantBy = [];
+ List<MatrixEventResponse> duplicatedBy = [];
+ List<MatrixEventResponse> madeRedundantBy = [];
foreach (var (otherPolicyEvent, otherPolicyContent) in allPolicies) {
if (policyEvent == otherPolicyEvent) continue; // same event
- if (StateEvent.TypeKeyPairMatches(policyEvent, otherPolicyEvent)) {
+ if (MatrixEvent.TypeKeyPairMatches(policyEvent, otherPolicyEvent)) {
// logger.LogWarning("Sanity check failed: Found same type and state key for two different policies: {Policy1} and {Policy2}", policyInfo.Policy.RawContent.ToJson(), otherPolicyInfo.Policy.RawContent.ToJson());
Console.WriteLine($"Sanity check failed: Found same type and state key for two different policies: {policyEvent.RawContent.ToJson()} and {otherPolicyEvent.RawContent.ToJson()}");
continue; // same type and state key
@@ -561,7 +561,7 @@ else {
foreach (var type in KnownPolicyTypes) {
if (!PolicyEventsByType.ContainsKey(type))
PolicyEventsByType.Add(type, new List
- <StateEventResponse>(16000));
+ <MatrixEventResponse>(16000));
}
int count = 0;
@@ -573,9 +573,9 @@ else {
e1 = _spsw.Elapsed;
var targetPolicies = PolicyEventsByType[state.MappedType];
e2 = _spsw.Elapsed;
- if (!firstLoad && targetPolicies.FirstOrDefault(x => StateEvent.TypeKeyPairMatches(x, state)) is { } evt) {
+ if (!firstLoad && targetPolicies.FirstOrDefault(x => MatrixEvent.TypeKeyPairMatches(x, state)) is { } evt) {
e3 = _spsw.Elapsed;
- if (StateEvent.Equals(evt, state)) {
+ if (MatrixEvent.Equals(evt, state)) {
if (count % 100 == 0) {
await Task.Delay(10);
await Task.Yield();
@@ -613,15 +613,15 @@ else {
logger.LogInformation("LoadStatesAsync: yield finished in {SwElapsed}", sw.Elapsed);
}
- private List<StateEventResponse> GetPolicyEventsByType(Type type) => PolicyEventsByType.ContainsKey(type) ? PolicyEventsByType[type] : [];
+ private List<MatrixEventResponse> GetPolicyEventsByType(Type type) => PolicyEventsByType.ContainsKey(type) ? PolicyEventsByType[type] : [];
- // private List<StateEventResponse> GetValidPolicyEventsByType(Type type) => GetPolicyEventsByType(type)
+ // private List<MatrixEventResponse> GetValidPolicyEventsByType(Type type) => GetPolicyEventsByType(type)
// .Where(x => !string.IsNullOrWhiteSpace(x.RawContent?["recommendation"]?.GetValue<string>())).ToList();
//
- // private List<StateEventResponse> GetInvalidPolicyEventsByType(Type type) => GetPolicyEventsByType(type)
+ // private List<MatrixEventResponse> GetInvalidPolicyEventsByType(Type type) => GetPolicyEventsByType(type)
// .Where(x => x.RawContent is { Count: > 0 } && string.IsNullOrWhiteSpace(x.RawContent?["recommendation"]?.GetValue<string>())).ToList();
//
- // private List<StateEventResponse> GetRemovedPolicyEventsByType(Type type) => GetPolicyEventsByType(type)
+ // private List<MatrixEventResponse> GetRemovedPolicyEventsByType(Type type) => GetPolicyEventsByType(type)
// .Where(x => x.RawContent is null or { Count: 0 }).ToList();
private string? GetPolicyTypeNameOrNull(Type type) => type.GetFriendlyNamePluralOrNull()
@@ -637,14 +637,14 @@ else {
public required Dictionary<(string Type, string StateKey), PolicyInfo> ActivePolicies { get; set; }
- // public Dictionary<(string Type, string StateKey), StateEventResponse> InvalidPolicies { get; set; }
+ // public Dictionary<(string Type, string StateKey), MatrixEventResponse> InvalidPolicies { get; set; }
public required Dictionary<(string Type, string StateKey), PolicyInfo> RemovedPolicies { get; set; }
public required FrozenDictionary<string, PropertyInfo> PropertiesToDisplay { get; set; }
public class PolicyInfo {
- public required StateEventResponse Policy { get; init; }
- public required List<StateEventResponse> MadeRedundantBy { get; set; }
- public required List<StateEventResponse> DuplicatedBy { get; set; }
+ public required MatrixEventResponse Policy { get; init; }
+ public required List<MatrixEventResponse> MadeRedundantBy { get; set; }
+ public required List<MatrixEventResponse> DuplicatedBy { get; set; }
}
public enum SpecialViewType {
diff --git a/MatrixUtils.Web/Pages/Rooms/PolicyList.razor.cs b/MatrixUtils.Web/Pages/Rooms/PolicyList.razor.cs
index 0106c6e..6f45041 100644
--- a/MatrixUtils.Web/Pages/Rooms/PolicyList.razor.cs
+++ b/MatrixUtils.Web/Pages/Rooms/PolicyList.razor.cs
@@ -8,12 +8,11 @@ using SpawnDev.BlazorJS.WebWorkers;
namespace MatrixUtils.Web.Pages.Rooms;
public partial class PolicyList {
-
#region Draupnir interop
private SemaphoreSlim ss = new(16, 16);
- private async Task DraupnirKickMatching(StateEventResponse policy) {
+ private async Task DraupnirKickMatching(MatrixEventResponse policy) {
try {
var content = policy.TypedContent! as PolicyRuleEventContent;
if (content is null) return;
@@ -94,7 +93,7 @@ public partial class PolicyList {
#region Nasty, nasty internals, please ignore!
private static class NastyInternalsPleaseIgnore {
- public static async Task ExecuteKickWithWasmWorkers(WebWorkerService workerService, AuthenticatedHomeserverGeneric hs, StateEventResponse evt, List<string> roomIds) {
+ public static async Task ExecuteKickWithWasmWorkers(WebWorkerService workerService, AuthenticatedHomeserverGeneric hs, MatrixEventResponse evt, List<string> roomIds) {
try {
// var tasks = roomIds.Select(roomId => workerService.TaskPool.Invoke(ExecuteKickInternal, hs.WellKnownUris.Client, hs.AccessToken, roomId, content.Entity)).ToList();
var tasks = roomIds.Select(roomId => workerService.TaskPool.Invoke(ExecuteKickInternal2, hs.WellKnownUris, hs.AccessToken, roomId, evt)).ToList();
@@ -131,7 +130,7 @@ public partial class PolicyList {
}
}
- private async static Task ExecuteKickInternal2(HomeserverResolverService.WellKnownUris wellKnownUris, string accessToken, string roomId, StateEventResponse policy) {
+ private async static Task ExecuteKickInternal2(HomeserverResolverService.WellKnownUris wellKnownUris, string accessToken, string roomId, MatrixEventResponse policy) {
Console.WriteLine($"Checking {roomId}...");
Console.WriteLine(policy.EventId);
}
@@ -140,5 +139,4 @@ public partial class PolicyList {
#endregion
#endregion
-
}
\ No newline at end of file
diff --git a/MatrixUtils.Web/Pages/Rooms/PolicyList2.razor b/MatrixUtils.Web/Pages/Rooms/PolicyList2.razor
index 5d5bb5d..ac918a8 100644
--- a/MatrixUtils.Web/Pages/Rooms/PolicyList2.razor
+++ b/MatrixUtils.Web/Pages/Rooms/PolicyList2.razor
@@ -15,7 +15,11 @@
<h3>Policy list editor - Editing @RoomId</h3>
<hr/>
@* <InputCheckbox @bind-Value="EnableAvatars"></InputCheckbox><label>Enable avatars (WILL EXPOSE YOUR IP TO TARGET HOMESERVERS!)</label> *@
-<LinkButton OnClickAsync="@(() => { CurrentlyEditingEvent = new() { Type = "", RawContent = new() }; return Task.CompletedTask; })">Create new policy</LinkButton>
+<LinkButton OnClickAsync="@(() => {
+ CurrentlyEditingEvent = new() { Type = "", RawContent = new() };
+ return Task.CompletedTask;
+ })">Create new policy
+</LinkButton>
@if (Loading) {
<p>Loading...</p>
@@ -71,14 +75,22 @@ else {
}
<div style="display: ruby;">
@if (PowerLevels.UserHasStatePermission(Homeserver.WhoAmI.UserId, policy.Type)) {
- <LinkButton OnClickAsync="@(() => { CurrentlyEditingEvent = policy; return Task.CompletedTask; })">Edit</LinkButton>
+ <LinkButton OnClickAsync="@(() => {
+ CurrentlyEditingEvent = policy;
+ return Task.CompletedTask;
+ })">Edit
+ </LinkButton>
<LinkButton OnClickAsync="@(() => RemovePolicyAsync(policy))">Remove</LinkButton>
@if (policy.IsLegacyType) {
<LinkButton OnClickAsync="@(() => RemovePolicyAsync(policy))">Update policy type</LinkButton>
}
@if (PolicyTypeIds[typeof(ServerPolicyRuleEventContent)].Contains(policy.EventId)) {
- <LinkButton OnClickAsync="@(() => { ServerPolicyToMakePermanent = policy; return Task.CompletedTask; })">Make permanent (wildcard)</LinkButton>
+ <LinkButton OnClickAsync="@(() => {
+ ServerPolicyToMakePermanent = policy;
+ return Task.CompletedTask;
+ })">Make permanent (wildcard)
+ </LinkButton>
@if (CurrentUserIsDraupnir) {
<LinkButton OnClickAsync="@(() => UpgradePolicyAsync(policy))">Kick matching users</LinkButton>
}
@@ -144,12 +156,12 @@ else {
public string RoomId { get; set; }
private bool _enableAvatars;
- private StateEventResponse? _currentlyEditingEvent;
- private StateEventResponse? _serverPolicyToMakePermanent;
+ private MatrixEventResponse? _currentlyEditingEvent;
+ private MatrixEventResponse? _serverPolicyToMakePermanent;
- private Dictionary<Type, List<StateEventResponse>> PolicyEventsByType { get; set; } = new();
+ private Dictionary<Type, List<MatrixEventResponse>> PolicyEventsByType { get; set; } = new();
- private StateEventResponse? CurrentlyEditingEvent {
+ private MatrixEventResponse? CurrentlyEditingEvent {
get => _currentlyEditingEvent;
set {
_currentlyEditingEvent = value;
@@ -157,7 +169,7 @@ else {
}
}
- private StateEventResponse? ServerPolicyToMakePermanent {
+ private MatrixEventResponse? ServerPolicyToMakePermanent {
get => _serverPolicyToMakePermanent;
set {
_serverPolicyToMakePermanent = value;
@@ -197,12 +209,12 @@ else {
StateHasChanged();
}
- private List<StateEventResponse> GetPolicyEventsByType(Type type) => PolicyEventsByType.ContainsKey(type) ? PolicyEventsByType[type] : [];
+ private List<MatrixEventResponse> GetPolicyEventsByType(Type type) => PolicyEventsByType.ContainsKey(type) ? PolicyEventsByType[type] : [];
- private List<StateEventResponse> GetValidPolicyEventsByType(Type type) => GetPolicyEventsByType(type)
+ private List<MatrixEventResponse> GetValidPolicyEventsByType(Type type) => GetPolicyEventsByType(type)
.Where(x => !string.IsNullOrWhiteSpace(x.RawContent?["recommendation"]?.GetValue<string>())).ToList();
- private List<StateEventResponse> GetInvalidPolicyEventsByType(Type type) => GetPolicyEventsByType(type)
+ private List<MatrixEventResponse> GetInvalidPolicyEventsByType(Type type) => GetPolicyEventsByType(type)
.Where(x => string.IsNullOrWhiteSpace(x.RawContent?["recommendation"]?.GetValue<string>())).ToList();
private string? GetPolicyTypeNameOrNull(Type type) => type.GetFriendlyNamePluralOrNull()
@@ -211,24 +223,24 @@ else {
private string GetPolicyTypeName(Type type) => GetPolicyTypeNameOrNull(type) ?? type.Name;
- private async Task RemovePolicyAsync(StateEventResponse policyEvent) {
+ private async Task RemovePolicyAsync(MatrixEventResponse policyEvent) {
await Room.SendStateEventAsync(policyEvent.Type, policyEvent.StateKey.UrlEncode(), new { });
PolicyEventsByType[policyEvent.MappedType].Remove(policyEvent);
await LoadStatesAsync();
}
- private async Task UpdatePolicyAsync(StateEventResponse policyEvent) {
+ private async Task UpdatePolicyAsync(MatrixEventResponse policyEvent) {
await Room.SendStateEventAsync(policyEvent.Type, policyEvent.StateKey.UrlEncode(), policyEvent.RawContent);
CurrentlyEditingEvent = null;
await LoadStatesAsync();
}
- private async Task UpgradePolicyAsync(StateEventResponse policyEvent) {
+ private async Task UpgradePolicyAsync(MatrixEventResponse policyEvent) {
policyEvent.RawContent["upgraded_from_type"] = policyEvent.Type;
await LoadStatesAsync();
}
- private static FrozenSet<Type> KnownPolicyTypes = StateEvent.KnownStateEventTypes.Where(x => x.IsAssignableTo(typeof(PolicyRuleEventContent))).ToFrozenSet();
+ private static FrozenSet<Type> KnownPolicyTypes = MatrixEvent.KnownEventTypes.Where(x => x.IsAssignableTo(typeof(PolicyRuleEventContent))).ToFrozenSet();
// event types, unnamed
private static Dictionary<string, Type> PolicyTypes = KnownPolicyTypes
diff --git a/MatrixUtils.Web/Pages/Rooms/PolicyListComponents/PolicyListEditorHeader.razor b/MatrixUtils.Web/Pages/Rooms/PolicyListComponents/PolicyListEditorHeader.razor
index 8585561..b57beae 100644
--- a/MatrixUtils.Web/Pages/Rooms/PolicyListComponents/PolicyListEditorHeader.razor
+++ b/MatrixUtils.Web/Pages/Rooms/PolicyListComponents/PolicyListEditorHeader.razor
@@ -55,7 +55,7 @@
private string? RoomAlias { get; set; }
private string? DraupnirShortcode { get; set; }
- private StateEventResponse? CurrentlyEditingEvent {
+ private MatrixEventResponse? CurrentlyEditingEvent {
get;
set {
field = value;
@@ -81,7 +81,7 @@
StateHasChanged();
}
- private async Task UpdatePolicyAsync(StateEventResponse evt) {
+ private async Task UpdatePolicyAsync(MatrixEventResponse evt) {
Console.WriteLine("UpdatePolicyAsync in PolicyListEditorHeader not yet implemented!");
}
diff --git a/MatrixUtils.Web/Pages/Rooms/PolicyListComponents/PolicyListRowComponent.razor b/MatrixUtils.Web/Pages/Rooms/PolicyListComponents/PolicyListRowComponent.razor
index cd432c9..3ded78f 100644
--- a/MatrixUtils.Web/Pages/Rooms/PolicyListComponents/PolicyListRowComponent.razor
+++ b/MatrixUtils.Web/Pages/Rooms/PolicyListComponents/PolicyListRowComponent.razor
@@ -99,7 +99,7 @@
[Parameter]
public required Action PolicyCollectionStateHasChanged { get; set; }
- private StateEventResponse Policy => PolicyInfo.Policy;
+ private MatrixEventResponse Policy => PolicyInfo.Policy;
private bool IsEditing {
get;
@@ -152,8 +152,8 @@
if (PolicyInfo.DuplicatedBy.Count > 0) {
foreach (var evt in PolicyInfo.DuplicatedBy) {
var matchingEntry = PolicyCollection.ActivePolicies
- .FirstOrDefault(x => StateEvent.Equals(x.Value.Policy, evt)).Value;
- var removals = matchingEntry.DuplicatedBy.RemoveAll(x => StateEvent.Equals(x, Policy));
+ .FirstOrDefault(x => MatrixEvent.Equals(x.Value.Policy, evt)).Value;
+ var removals = matchingEntry.DuplicatedBy.RemoveAll(x => MatrixEvent.Equals(x, Policy));
Console.WriteLine($"Removed {removals} duplicates from {evt.EventId}, matching entry: {matchingEntry.ToJson()}");
if (PolicyCollection.ViewType == PolicyList.PolicyCollection.SpecialViewType.Duplicates && matchingEntry.DuplicatedBy.Count == 0) {
PolicyCollection.ActivePolicies.Remove((matchingEntry.Policy.Type, matchingEntry.Policy.StateKey));
@@ -169,8 +169,8 @@
if (PolicyInfo.MadeRedundantBy.Count > 0) {
foreach (var evt in PolicyInfo.MadeRedundantBy) {
var matchingEntry = PolicyCollection.ActivePolicies
- .FirstOrDefault(x => StateEvent.Equals(x.Value.Policy, evt)).Value;
- var removals = matchingEntry.MadeRedundantBy.RemoveAll(x => StateEvent.Equals(x, Policy));
+ .FirstOrDefault(x => MatrixEvent.Equals(x.Value.Policy, evt)).Value;
+ var removals = matchingEntry.MadeRedundantBy.RemoveAll(x => MatrixEvent.Equals(x, Policy));
Console.WriteLine($"Removed {removals} redundants from {evt.EventId}, matching entry: {matchingEntry.ToJson()}");
}
@@ -186,7 +186,7 @@
// await LoadStatesAsync();
}
- private async Task UpdatePolicyAsync(StateEventResponse evt) {
+ private async Task UpdatePolicyAsync(MatrixEventResponse evt) {
await Room.SendStateEventAsync(Policy.Type, Policy.StateKey, Policy.RawContent);
// CurrentlyEditingEvent = null;
// await LoadStatesAsync();
diff --git a/MatrixUtils.Web/Pages/Rooms/PolicyLists.razor b/MatrixUtils.Web/Pages/Rooms/PolicyLists.razor
index 52c5f30..a84ef8c 100644
--- a/MatrixUtils.Web/Pages/Rooms/PolicyLists.razor
+++ b/MatrixUtils.Web/Pages/Rooms/PolicyLists.razor
@@ -188,7 +188,7 @@
Server
}
- public static async Task<RoomInfo> FromRoom(GenericRoom room, List<StateEventResponse>? state = null, bool legacy = false) {
+ public static async Task<RoomInfo> FromRoom(GenericRoom room, List<MatrixEventResponse>? state = null, bool legacy = false) {
state ??= await room.GetFullStateAsListAsync();
return new RoomInfo() {
Room = room,
diff --git a/MatrixUtils.Web/Pages/Rooms/RoomCreateComponents/RoomCreateInitialStateOptions.razor b/MatrixUtils.Web/Pages/Rooms/RoomCreateComponents/RoomCreateInitialStateOptions.razor
index 99facbf..2b1d90a 100644
--- a/MatrixUtils.Web/Pages/Rooms/RoomCreateComponents/RoomCreateInitialStateOptions.razor
+++ b/MatrixUtils.Web/Pages/Rooms/RoomCreateComponents/RoomCreateInitialStateOptions.razor
@@ -5,7 +5,7 @@
<tr>
<td style="vertical-align: top;">Initial room state:</td>
<td>
- @foreach (var (displayName, events) in new Dictionary<string, List<StateEvent>>() {
+ @foreach (var (displayName, events) in new Dictionary<string, List<MatrixEvent>>() {
{ "Important room state (before final access rules)", roomBuilder.ImportantState },
{ "Additional room state (after final access rules)", roomBuilder.InitialState },
}) {
@@ -47,10 +47,10 @@
@* if (string.IsNullOrWhiteSpace(json)) *@
@* events.Remove(initialState); *@
@* else *@
- @* events.Replace(initialState, JsonSerializer.Deserialize<StateEvent>(json)); *@
+ @* events.Replace(initialState, JsonSerializer.Deserialize<MatrixEvent>(json)); *@
@* StateHasChanged(); *@
@* })"></FancyTextBox> *@
- <FancyTextBoxLazyJson T="StateEvent" Value="@initialState" ValueChanged="@(evt => { events.Replace(initialState, evt); })"></FancyTextBoxLazyJson>
+ <FancyTextBoxLazyJson T="MatrixEvent" Value="@initialState" ValueChanged="@(evt => { events.Replace(initialState, evt); })"></FancyTextBoxLazyJson>
<br/>
</div>
}
@@ -71,7 +71,7 @@
[Parameter]
public AuthenticatedHomeserverGeneric Homeserver { get; set; }
- private RenderFragment GetRemoveButton(List<StateEvent> events, StateEvent initialState) {
+ private RenderFragment GetRemoveButton(List<MatrixEvent> events, MatrixEvent initialState) {
return @<span>
<LinkButton InlineText="true" OnClick="@(() => {
events.Remove(initialState);
diff --git a/MatrixUtils.Web/Pages/Rooms/Space.razor b/MatrixUtils.Web/Pages/Rooms/Space.razor
index fc9c9bf..93df5a9 100644
--- a/MatrixUtils.Web/Pages/Rooms/Space.razor
+++ b/MatrixUtils.Web/Pages/Rooms/Space.razor
@@ -30,7 +30,7 @@
private GenericRoom? Room { get; set; }
- private StateEventResponse[] States { get; set; } = Array.Empty<StateEventResponse>();
+ private MatrixEventResponse[] States { get; set; } = Array.Empty<MatrixEventResponse>();
private List<RoomInfo> Rooms { get; } = new();
private List<string> ServersInSpace { get; } = new();
private string? NewRoomId { get; set; }
@@ -61,6 +61,7 @@
}
});
}
+
break;
}
case "m.room.member": {
@@ -68,44 +69,46 @@
if (!ServersInSpace.Contains(serverName)) {
ServersInSpace.Add(serverName);
}
+
break;
}
}
}
+
await base.OnInitializedAsync();
- // var state = await Room.GetStateAsync("");
- // if (state is not null) {
- // // Console.WriteLine(state.Value.ToJson());
- // States = state.Value.Deserialize<StateEventResponse[]>()!;
- //
- // foreach (var stateEvent in States) {
- // if (stateEvent.Type == "m.space.child") {
- // // if (stateEvent.Content.ToJson().Length < 5) return;
- // var roomId = stateEvent.StateKey;
- // var room = 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);
- // }
- // }
- // }
+ // var state = await Room.GetStateAsync("");
+ // if (state is not null) {
+ // // Console.WriteLine(state.Value.ToJson());
+ // States = state.Value.Deserialize<MatrixEventResponse[]>()!;
+ //
+ // foreach (var stateEvent in States) {
+ // if (stateEvent.Type == "m.space.child") {
+ // // if (stateEvent.Content.ToJson().Length < 5) return;
+ // var roomId = stateEvent.StateKey;
+ // var room = 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!");
- // }
+ // 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();
+ // await base.OnInitializedAsync();
}
private async Task JoinAllRooms() {
@@ -124,13 +127,14 @@
var joined = false;
while (!joined) {
var ce = await room.GetCreateEventAsync();
- if(ce is null) continue;
+ if (ce is null) continue;
if (ce.Type == "m.space") {
- var children = room.AsSpace().GetChildrenAsync(false);
- await foreach (var child in children) {
- JoinRecursive(child.RoomId);
- }
+ var children = room.AsSpace().GetChildrenAsync(false);
+ await foreach (var child in children) {
+ JoinRecursive(child.RoomId);
+ }
}
+
joined = true;
await Task.Delay(1000);
}
@@ -138,7 +142,6 @@
catch (Exception e) {
Console.WriteLine(e);
}
-
}
private async Task AddNewRoom() {
diff --git a/MatrixUtils.Web/Pages/Rooms/StateEditor.razor b/MatrixUtils.Web/Pages/Rooms/StateEditor.razor
index 51cb265..47146bc 100644
--- a/MatrixUtils.Web/Pages/Rooms/StateEditor.razor
+++ b/MatrixUtils.Web/Pages/Rooms/StateEditor.razor
@@ -37,8 +37,8 @@
[Parameter]
public string? RoomId { get; set; }
- public List<StateEventResponse> FilteredEvents { get; set; } = new();
- public List<StateEventResponse> Events { get; set; } = new();
+ public List<MatrixEventResponse> FilteredEvents { get; set; } = new();
+ public List<MatrixEventResponse> Events { get; set; } = new();
public string status = "";
protected override async Task OnInitializedAsync() {
@@ -58,7 +58,7 @@
var StateLoaded = 0;
var response = (hs.GetRoom(RoomId)).GetFullStateAsync();
await foreach (var _ev in response) {
- // var e = new StateEventResponse {
+ // var e = new MatrixEventResponse {
// Type = _ev.Type,
// StateKey = _ev.StateKey,
// OriginServerTs = _ev.OriginServerTs,
@@ -68,6 +68,7 @@
if (string.IsNullOrEmpty(_ev.StateKey)) {
FilteredEvents.Add(_ev);
}
+
StateLoaded++;
if (!((DateTime.Now - _lastUpdate).TotalMilliseconds > 100)) continue;
@@ -103,11 +104,12 @@
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 string Sender { get; set; }
+ // public string EventId { get; set; }
+ // public string UserId { get; set; }
+ // public string ReplacesState { get; set; }
}
public bool ShowMembershipEvents {
diff --git a/MatrixUtils.Web/Pages/Rooms/StateViewer.razor b/MatrixUtils.Web/Pages/Rooms/StateViewer.razor
index c8b87d3..16b1d3d 100644
--- a/MatrixUtils.Web/Pages/Rooms/StateViewer.razor
+++ b/MatrixUtils.Web/Pages/Rooms/StateViewer.razor
@@ -12,20 +12,20 @@
<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>
+ <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>
@@ -34,20 +34,20 @@
<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>
+ <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>
@@ -64,8 +64,8 @@
[Parameter]
public string? RoomId { get; set; }
- public List<StateEventResponse> FilteredEvents { get; set; } = new();
- public List<StateEventResponse> Events { get; set; } = new();
+ public List<MatrixEventResponse> FilteredEvents { get; set; } = new();
+ public List<MatrixEventResponse> Events { get; set; } = new();
public string status = "";
protected override async Task OnInitializedAsync() {
@@ -88,6 +88,7 @@
if (string.IsNullOrEmpty(_ev.StateKey)) {
FilteredEvents.Add(_ev);
}
+
StateLoaded++;
if (!((DateTime.Now - _lastUpdate).TotalMilliseconds > 100)) continue;
diff --git a/MatrixUtils.Web/Pages/Rooms/Timeline.razor b/MatrixUtils.Web/Pages/Rooms/Timeline.razor
index 2af819b..f9137b0 100644
--- a/MatrixUtils.Web/Pages/Rooms/Timeline.razor
+++ b/MatrixUtils.Web/Pages/Rooms/Timeline.razor
@@ -22,7 +22,7 @@
public string RoomId { get; set; }
private List<TimelineEventItem> Events { get; } = new();
- private List<StateEventResponse> RawEvents { get; } = new();
+ private List<MatrixEventResponse> RawEvents { get; } = new();
private AuthenticatedHomeserverGeneric? Homeserver { get; set; }
@@ -44,9 +44,9 @@
await base.OnInitializedAsync();
}
- // private StateEventResponse GetProfileEventBefore(StateEventResponse Event) => Events.TakeWhile(x => x != Event).Last(e => e.Type == RoomMemberEventContent.EventId && e.StateKey == Event.Sender);
+ // private MatrixEventResponse GetProfileEventBefore(MatrixEventResponse Event) => Events.TakeWhile(x => x != Event).Last(e => e.Type == RoomMemberEventContent.EventId && e.StateKey == Event.Sender);
- private Type ComponentType(StateEvent Event) => Event.Type switch {
+ private Type ComponentType(MatrixEvent Event) => Event.Type switch {
RoomCanonicalAliasEventContent.EventId => typeof(TimelineCanonicalAliasItem),
RoomHistoryVisibilityEventContent.EventId => typeof(TimelineHistoryVisibilityItem),
RoomTopicEventContent.EventId => typeof(TimelineRoomTopicItem),
@@ -57,9 +57,9 @@
// RoomMessageReactionEventContent.EventId => typeof(ComponentBase),
_ => typeof(TimelineUnknownItem)
};
-
+
private class TimelineEventItem : ComponentBase {
- public StateEventResponse Event { get; set; }
+ public MatrixEventResponse Event { get; set; }
public Type Type { get; set; }
}
|