diff --git a/MatrixRoomUtils.Web/Pages/RoomManager/RoomManager.razor b/MatrixRoomUtils.Web/Pages/RoomManager/RoomManager.razor
index 5daa97c..9b0bb88 100644
--- a/MatrixRoomUtils.Web/Pages/RoomManager/RoomManager.razor
+++ b/MatrixRoomUtils.Web/Pages/RoomManager/RoomManager.razor
@@ -3,12 +3,10 @@
@inject NavigationManager NavigationManager
<h3>Room manager</h3>
<hr/>
-@if (Rooms.Count == 0)
-{
+@if (Rooms.Count == 0) {
<p>You are not in any rooms!</p>
}
-else
-{
+else {
<p>You are in @Rooms.Count rooms and @Spaces.Count spaces</p>
<p>
<a href="/RoomManagerCreateRoom">Create room</a>
@@ -16,8 +14,7 @@ else
<details open>
<summary>Space List</summary>
- @foreach (var room in Spaces)
- {
+ @foreach (var room in Spaces) {
<a style="color: unset; text-decoration: unset;" href="/RoomManager/Space/@room.RoomId.Replace('.', '~')">
<RoomListItem Room="@room" ShowOwnProfile="false"></RoomListItem>
</a>
@@ -25,8 +22,7 @@ else
</details>
<details open>
<summary>Room List</summary>
- @foreach (var room in Rooms)
- {
+ @foreach (var room in Rooms) {
<a style="color: unset; text-decoration: unset;" href="/RoomManager/Room/@room.RoomId.Replace('.', '~')">
<RoomListItem Room="@room" ShowOwnProfile="true"></RoomListItem>
</a>
@@ -41,15 +37,13 @@ else
public List<Room> Rooms { get; set; } = new();
public List<Room> Spaces { get; set; } = new();
- protected override async Task OnInitializedAsync()
- {
+ protected override async Task OnInitializedAsync() {
Console.WriteLine("Initializing room manager");
await LocalStorageWrapper.LoadFromLocalStorage(LocalStorage);
Console.WriteLine("Loaded from local storage");
await base.OnInitializedAsync();
Console.WriteLine("Initialized base");
- if (RuntimeCache.CurrentHomeServer == null)
- {
+ if (RuntimeCache.CurrentHomeServer == null) {
NavigationManager.NavigateTo("/Login");
return;
}
@@ -59,8 +53,7 @@ else
Console.WriteLine($"Got {_rooms.Count} rooms");
var semaphore = new SemaphoreSlim(10);
var tasks = new List<Task<Room?>>();
- foreach (var room in _rooms)
- {
+ foreach (var room in _rooms) {
tasks.Add(CheckIfSpace(room, semaphore));
}
await Task.WhenAll(tasks);
@@ -68,45 +61,36 @@ else
Console.WriteLine("Fetched joined rooms!");
}
- private async Task<Room?> CheckIfSpace(Room room, SemaphoreSlim semaphore)
- {
+ private async Task<Room?> CheckIfSpace(Room room, SemaphoreSlim semaphore) {
await semaphore.WaitAsync();
- // Console.WriteLine($"Checking if {room.RoomId} is a space");
- try
- {
+ // Console.WriteLine($"Checking if {room.RoomId} is a space");
+ try {
var state = await room.GetStateAsync<CreateEvent>("m.room.create");
- if (state != null)
- {
+ if (state != null) {
//Console.WriteLine(state.Value.ToJson());
- if (state.Type != null)
- {
- if (state.Type == "m.space")
- {
+ if (state.Type != null) {
+ if (state.Type == "m.space") {
Console.WriteLine($"Room {room.RoomId} is a space!");
Spaces.Add(room);
StateHasChanged();
return room;
}
- else
- {
+ else {
Console.WriteLine($"Encountered unknown room type {state.Type}");
}
}
- else
- {
+ else {
Rooms.Add(room);
//this is fine, apprently...
// Console.WriteLine($"Room {room.RoomId} has no Content.type in m.room.create!");
}
}
}
- catch (Exception e)
- {
+ catch (Exception e) {
Console.WriteLine(e);
return null;
}
- finally
- {
+ finally {
semaphore.Release();
}
return null;
diff --git a/MatrixRoomUtils.Web/Pages/RoomManager/RoomManagerCreateRoom.razor b/MatrixRoomUtils.Web/Pages/RoomManager/RoomManagerCreateRoom.razor
index d561eb0..5cfda77 100644
--- a/MatrixRoomUtils.Web/Pages/RoomManager/RoomManagerCreateRoom.razor
+++ b/MatrixRoomUtils.Web/Pages/RoomManager/RoomManagerCreateRoom.razor
@@ -1,12 +1,13 @@
@page "/RoomManagerCreateRoom"
-@using System.Text.Json
@using MatrixRoomUtils.Core.Extensions
@using MatrixRoomUtils.Core.Responses
-@using MatrixRoomUtils.Web.Shared.SimpleComponents
-@using System.Reflection
-@using System.Runtime.Intrinsics.X86
+@using System.Text.Json
@using System.Text.Json.Serialization
+@using System.Reflection
@using MatrixRoomUtils.Web.Classes.RoomCreationTemplates
+@* ReSharper disable once RedundantUsingDirective - Must not remove this, Rider marks this as "unused" when it's not *@
+@using MatrixRoomUtils.Web.Shared.SimpleComponents
+
<h3>Room Manager - Create Room</h3>
@* <pre Contenteditable="true" @onkeypress="@JsonChanged" ="JsonString">@JsonString</pre> *@
@@ -20,15 +21,13 @@
<td style="padding-bottom: 16px;">Preset:</td>
<td style="padding-bottom: 16px;">
<InputSelect @bind-Value="@RoomPreset">
- @foreach (var createRoomRequest in Presets)
- {
+ @foreach (var createRoomRequest in Presets) {
<option value="@createRoomRequest.Key">@createRoomRequest.Key</option>
}
</InputSelect>
</td>
</tr>
- @if (creationEvent != null)
- {
+ @if (creationEvent != null) {
<tr>
<td>Room name:</td>
<td>
@@ -89,8 +88,7 @@
<td>Permissions:</td>
<details>
<summary>@creationEvent.PowerLevelContentOverride.Users.Count members</summary>
- @foreach (var user in creationEvent.PowerLevelContentOverride.Events.Keys)
- {
+ @foreach (var user in creationEvent.PowerLevelContentOverride.Events.Keys) {
var _event = user;
<tr>
<td><FancyTextBox Formatter="@GetPermissionFriendlyName" Value="@_event" ValueChanged="val => { creationEvent.PowerLevelContentOverride.Events.ChangeKey(_event, val); }"></FancyTextBox>:</td>
@@ -99,8 +97,7 @@
</td>
</tr>
}
- @foreach (var user in creationEvent.PowerLevelContentOverride.Users.Keys)
- {
+ @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>
@@ -131,8 +128,7 @@
<details>
<summary>@creationEvent.InitialState.Count(x => x.Type == "m.room.member") members</summary>
<button @onclick="() => { RuntimeCache.LoginSessions.Select(x => x.Value.LoginResponse.UserId).ToList().ForEach(InviteMember); }">Invite all logged in accounts</button>
- @foreach (var member in creationEvent.InitialState.Where(x => x.Type == "m.room.member" && x.StateKey != RuntimeCache.CurrentHomeServer.UserId))
- {
+ @foreach (var member in creationEvent.InitialState.Where(x => x.Type == "m.room.member" && x.StateKey != RuntimeCache.CurrentHomeServer.UserId)) {
<UserListItem UserId="@member.StateKey"></UserListItem>
}
</details>
@@ -154,13 +150,11 @@
<summary>@creationEvent.InitialState.Count(x => !ImplementedStates.Contains(x.Type)) custom states</summary>
<table>
- @foreach (var initialState in creationEvent.InitialState.Where(x => !ImplementedStates.Contains(x.Type)))
- {
+ @foreach (var initialState in creationEvent.InitialState.Where(x => !ImplementedStates.Contains(x.Type))) {
<tr>
<td style="vertical-align: top;">
@(initialState.Type):
- @if (!string.IsNullOrEmpty(initialState.StateKey))
- {
+ @if (!string.IsNullOrEmpty(initialState.StateKey)) {
<br/>
<span>(@initialState.StateKey)</span>
}
@@ -176,8 +170,7 @@
<details>
<summary>@creationEvent.InitialState.Count initial states</summary>
<table>
- @foreach (var initialState in creationEvent.InitialState)
- {
+ @foreach (var initialState in creationEvent.InitialState) {
var _state = initialState;
<tr>
<td style="vertical-align: top;">
@@ -214,25 +207,21 @@
@code {
- private string RoomPreset
- {
- get
- {
- if (Presets.ContainsValue(creationEvent))
- {
+ private string RoomPreset {
+ get {
+ if (Presets.ContainsValue(creationEvent)) {
return Presets.First(x => x.Value == creationEvent).Key;
}
return "Not a preset";
}
- set
- {
+ set {
creationEvent = Presets[value];
JsonChanged();
OverwriteWrappedPropertiesFromEvent();
creationEvent.PowerLevelContentOverride.Events = creationEvent.PowerLevelContentOverride.Events.OrderByDescending(x => x.Value).ThenBy(x => x.Key).ToDictionary(x => x.Key, x => x.Value);
creationEvent.PowerLevelContentOverride.Users = creationEvent.PowerLevelContentOverride.Users.OrderByDescending(x => x.Value).ThenBy(x => x.Key).ToDictionary(x => x.Key, x => x.Value);
guestAccessEvent = creationEvent["m.room.guest_access"].As<GuestAccessContent>().Content;
-
+
Console.WriteLine($"Creation event uncasted: {creationEvent["m.room.guest_access"].ToJson()}");
Console.WriteLine($"Creation event casted: {creationEvent["m.room.guest_access"].As<GuestAccessContent>().ToJson()}");
creationEvent["m.room.guest_access"].As<GuestAccessContent>().Content.IsGuestAccessEnabled = true;
@@ -251,21 +240,18 @@
private Dictionary<string, CreateRoomRequest> Presets { get; set; } = new();
- protected override async Task OnInitializedAsync()
- {
+ protected override async Task OnInitializedAsync() {
await LocalStorageWrapper.LoadFromLocalStorage(LocalStorage);
//creationEvent = Presets["Default room"] =
- foreach (var x in Assembly.GetExecutingAssembly().GetTypes().Where(x => x.IsClass && !x.IsAbstract && x.GetInterfaces().Contains(typeof(IRoomCreationTemplate))).ToList())
- {
+ 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"))
- {
+ if (!Presets.ContainsKey("Default")) {
Console.WriteLine($"No default room found in {Presets.Count} presets: {string.Join(", ", Presets.Keys)}");
}
else RoomPreset = "Default";
@@ -273,30 +259,23 @@
await base.OnInitializedAsync();
}
- private void JsonChanged()
- {
- Console.WriteLine(creationEvent.ToJson());
- }
-
+ private void JsonChanged() => Console.WriteLine(creationEvent.ToJson());
//wrappers
private List<string> ServerACLAllowRules { get; set; } = new();
private List<string> ServerACLDenyRules { get; set; } = new();
- private void OverwriteWrappedPropertiesFromEvent()
- {
+ private void OverwriteWrappedPropertiesFromEvent() {
Console.WriteLine("Overwriting wrapped properties from event");
ServerACLAllowRules = creationEvent.ServerACLs.Allow;
ServerACLDenyRules = creationEvent.ServerACLs.Deny;
}
- private async Task OverwriteWrappedProperties()
- {
+ private async Task OverwriteWrappedProperties() {
Console.WriteLine("Overwriting wrapped properties");
Console.WriteLine($"Allow: {ServerACLAllowRules.Count}: {string.Join(", ", ServerACLAllowRules)}");
Console.WriteLine($"Deny: {ServerACLDenyRules.Count}: {string.Join(", ", ServerACLDenyRules)}");
- creationEvent.ServerACLs = new()
- {
+ creationEvent.ServerACLs = new ServerACL {
Allow = ServerACLAllowRules,
Deny = ServerACLDenyRules,
AllowIpLiterals = creationEvent.ServerACLs.AllowIpLiterals
@@ -305,16 +284,14 @@
StateHasChanged();
}
- private async Task RoomIconFilePicked(InputFileChangeEventArgs obj)
- {
+ private async Task RoomIconFilePicked(InputFileChangeEventArgs obj) {
var res = await RuntimeCache.CurrentHomeServer.UploadFile(obj.File.Name, obj.File.OpenReadStream(), obj.File.ContentType);
Console.WriteLine(res);
creationEvent.RoomIcon = res;
StateHasChanged();
}
- private async Task CreateRoom()
- {
+ private async Task CreateRoom() {
Console.WriteLine("Create room");
Console.WriteLine(creationEvent.ToJson());
creationEvent.CreationContent.Add("rory.gay.created_using", "Rory&::MatrixRoomUtils (https://mru.rory.gay)");
@@ -323,22 +300,18 @@
// NavigationManager.NavigateTo($"/RoomManager/{id.RoomId.Replace('.','~')}");
}
- private void InviteMember(string mxid)
- {
+ private void InviteMember(string mxid) {
if (!creationEvent.InitialState.Any(x => x.Type == "m.room.member" && x.StateKey == mxid) && RuntimeCache.CurrentHomeServer.UserId != mxid)
- creationEvent.InitialState.Add(new()
- {
+ creationEvent.InitialState.Add(new StateEvent {
Type = "m.room.member",
StateKey = mxid,
- Content = new
- {
+ Content = new {
membership = "invite",
reason = "Automatically invited at room creation time."
}
});
}
-
private string GetStateFriendlyName(string key) => key switch {
"m.room.history_visibility" => "History visibility",
"m.room.guest_access" => "Guest access",
@@ -363,19 +336,14 @@
_ => key
};
- public class GuestAccessContent
- {
+ public class GuestAccessContent {
[JsonPropertyName("guest_access")]
public string GuestAccess { get; set; }
- public bool IsGuestAccessEnabled
- {
+ public bool IsGuestAccessEnabled {
get => GuestAccess == "can_join";
set => GuestAccess = value ? "can_join" : "forbidden";
}
}
-
-
}
-
diff --git a/MatrixRoomUtils.Web/Pages/RoomManager/RoomManagerSpace.razor b/MatrixRoomUtils.Web/Pages/RoomManager/RoomManagerSpace.razor
index 1e7e065..c5e1569 100644
--- a/MatrixRoomUtils.Web/Pages/RoomManager/RoomManagerSpace.razor
+++ b/MatrixRoomUtils.Web/Pages/RoomManager/RoomManagerSpace.razor
@@ -4,8 +4,7 @@
<h3>Room manager - Viewing Space</h3>
<button onclick="@JoinAllRooms">Join all rooms</button>
-@foreach (var room in Rooms)
-{
+@foreach (var room in Rooms) {
<RoomListItem Room="room" ShowOwnProfile="true"></RoomListItem>
}
@@ -13,8 +12,7 @@
<br/>
<details style="background: #0002;">
<summary style="background: #fff1;">State list</summary>
- @foreach (var stateEvent in States.OrderBy(x => x.StateKey).ThenBy(x => x.Type))
- {
+ @foreach (var stateEvent in States.OrderBy(x => x.StateKey).ThenBy(x => x.Type)) {
<p>@stateEvent.StateKey/@stateEvent.Type:</p>
<pre>@stateEvent.Content.ToJson()</pre>
}
@@ -24,61 +22,52 @@
[Parameter]
public string RoomId { get; set; } = "invalid!!!!!!";
-
+
private Room? Room { get; set; }
-
+
private StateEventResponse<object>[] States { get; set; } = Array.Empty<StateEventResponse<object>>();
- private List<Room> Rooms { get; set; } = new();
- private List<string> ServersInSpace { get; set; } = new();
-
- protected override async Task OnInitializedAsync()
- {
+ private List<Room> Rooms { get; } = new();
+ private List<string> ServersInSpace { get; } = new();
+
+ protected override async Task OnInitializedAsync() {
await LocalStorageWrapper.LoadFromLocalStorage(LocalStorage);
Room = await RuntimeCache.CurrentHomeServer.GetRoom(RoomId.Replace('~', '.'));
var state = await Room.GetStateAsync("");
- if (state != null)
- {
- // Console.WriteLine(state.Value.ToJson());
+ if (state != null) {
+ // Console.WriteLine(state.Value.ToJson());
States = state.Value.Deserialize<StateEventResponse<object>[]>()!;
-
- foreach (var stateEvent in States)
- {
- if (stateEvent.Type == "m.space.child")
- {
- // if (stateEvent.Content.ToJson().Length < 5) return;
+
+ 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 RuntimeCache.CurrentHomeServer.GetRoom(roomId);
- if (room != null)
- {
+ if (room != null) {
Rooms.Add(room);
}
}
- else if (stateEvent.Type == "m.room.member")
- {
+ else if (stateEvent.Type == "m.room.member") {
var serverName = stateEvent.StateKey.Split(':').Last();
- if (!ServersInSpace.Contains(serverName))
- {
+ 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();
}
-
- private async Task JoinAllRooms()
- {
- foreach (var room in Rooms)
- {
+
+ private async Task JoinAllRooms() {
+ foreach (var room in Rooms) {
room.JoinAsync(ServersInSpace.ToArray());
}
}
diff --git a/MatrixRoomUtils.Web/Pages/RoomManager/RoomManagerTimeline.razor b/MatrixRoomUtils.Web/Pages/RoomManager/RoomManagerTimeline.razor
index a8a7fc2..2db7cab 100644
--- a/MatrixRoomUtils.Web/Pages/RoomManager/RoomManagerTimeline.razor
+++ b/MatrixRoomUtils.Web/Pages/RoomManager/RoomManagerTimeline.razor
@@ -1,12 +1,10 @@
@page "/RoomManager/Timeline/{RoomId}"
@using MatrixRoomUtils.Web.Shared.TimelineComponents
-@using MatrixRoomUtils.Core.Extensions
<h3>RoomManagerTimeline</h3>
<hr/>
<p>Loaded @Events.Count events...</p>
-@foreach (var evt in Events)
-{
+@foreach (var evt in Events) {
<div type="@evt.Type" key="@evt.StateKey" itemid="@evt.EventId">
<DynamicComponent Type="@ComponentType(evt)" Parameters="@(new Dictionary<string, object> { { "Event", evt }, { "Events", Events } })"></DynamicComponent>
</div>
@@ -17,18 +15,16 @@
[Parameter]
public string RoomId { get; set; } = "invalid!!!!!!";
- private List<MessagesResponse> Messages { get; set; } = new();
- private List<StateEventResponse> Events { get; set; } = new();
+ private List<MessagesResponse> Messages { get; } = new();
+ private List<StateEventResponse> Events { get; } = new();
- protected override async Task OnInitializedAsync()
- {
+ protected override async Task OnInitializedAsync() {
await LocalStorageWrapper.LoadFromLocalStorage(LocalStorage);
RoomId = RoomId.Replace('~', '.');
Console.WriteLine("RoomId: " + RoomId);
var room = await RuntimeCache.CurrentHomeServer.GetRoom(RoomId);
MessagesResponse? msgs = null;
- do
- {
+ do {
msgs = await room.GetMessagesAsync(limit: 250, from: msgs?.End, dir: "b");
Messages.Add(msgs);
Console.WriteLine($"Got {msgs.Chunk.Count} messages");
@@ -37,13 +33,11 @@
StateHasChanged();
} while (msgs.End != null);
-
await base.OnInitializedAsync();
}
private StateEventResponse GetProfileEventBefore(StateEventResponse Event) => Events.TakeWhile(x => x != Event).Last(e => e.Type == "m.room.member" && e.StateKey == Event.Sender);
-
private Type ComponentType(StateEventResponse Event) => Event.Type switch {
"m.room.message" => typeof(TimelineMessageItem),
"m.room.member" => typeof(TimelineMemberItem),
|