diff --git a/MatrixUtils.Web/Pages/Index.razor b/MatrixUtils.Web/Pages/Index.razor
index 8847467..b9d3233 100644
--- a/MatrixUtils.Web/Pages/Index.razor
+++ b/MatrixUtils.Web/Pages/Index.razor
@@ -25,8 +25,9 @@ Small collection of tools to do not-so-everyday things.
var auth = session.UserAuth;
<tr class="user-entry">
<td>
- @if (!string.IsNullOrWhiteSpace(@session.UserInfo.AvatarUrl)) {
- <MxcAvatar Homeserver="session.Homeserver" MxcUri="@session.UserInfo.AvatarUrl" Circular="true" Size="4" SizeUnit="em"/>
+ @if (!string.IsNullOrWhiteSpace(@session.UserInfo?.AvatarUrl)) {
+ // Console.WriteLine($"Rendering {session.UserInfo.AvatarUrl} with homeserver {session.Homeserver}");
+ <MxcAvatar Homeserver="@session.Homeserver" MxcUri="@session.UserInfo.AvatarUrl" Circular="true" Size="4" SizeUnit="em"/>
}
else {
<img class="avatar" src="@_identiconGenerator.GenerateAsDataUri(session.Homeserver.WhoAmI.UserId)"/>
diff --git a/MatrixUtils.Web/Pages/Labs/Client/ClientComponents/ClientRoomList.razor b/MatrixUtils.Web/Pages/Labs/Client/ClientComponents/ClientRoomList.razor
index b370080..8831dd1 100644
--- a/MatrixUtils.Web/Pages/Labs/Client/ClientComponents/ClientRoomList.razor
+++ b/MatrixUtils.Web/Pages/Labs/Client/ClientComponents/ClientRoomList.razor
@@ -10,6 +10,6 @@
@code {
[Parameter]
- public ClientContext Data { get; set; } = null!;
+ public ClientContext Data { get; set; }
}
\ No newline at end of file
diff --git a/MatrixUtils.Web/Pages/Labs/Client/ClientComponents/ClientStatusList.razor b/MatrixUtils.Web/Pages/Labs/Client/ClientComponents/ClientStatusList.razor
index c680c13..60f850d 100644
--- a/MatrixUtils.Web/Pages/Labs/Client/ClientComponents/ClientStatusList.razor
+++ b/MatrixUtils.Web/Pages/Labs/Client/ClientComponents/ClientStatusList.razor
@@ -10,7 +10,7 @@
@code {
[Parameter]
- public ObservableCollection<ClientContext> Data { get; set; } = null!;
+ public ObservableCollection<ClientContext> Data { get; set; }
protected override void OnInitialized() {
Data.CollectionChanged += (_, e) => {
diff --git a/MatrixUtils.Web/Pages/Labs/Client/ClientComponents/MatrixClient.razor b/MatrixUtils.Web/Pages/Labs/Client/ClientComponents/MatrixClient.razor
index 67dcae5..6a930b1 100644
--- a/MatrixUtils.Web/Pages/Labs/Client/ClientComponents/MatrixClient.razor
+++ b/MatrixUtils.Web/Pages/Labs/Client/ClientComponents/MatrixClient.razor
@@ -25,6 +25,6 @@
@code {
[Parameter]
- public Index.ClientContext Data { get; set; } = null!;
+ public Index.ClientContext Data { get; set; }
}
\ No newline at end of file
diff --git a/MatrixUtils.Web/Pages/Labs/Rooms2/Index2Components/MainTabComponents/MainTabSpaceItem.razor b/MatrixUtils.Web/Pages/Labs/Rooms2/Index2Components/MainTabComponents/MainTabSpaceItem.razor
index 596d63d..ba994d1 100644
--- a/MatrixUtils.Web/Pages/Labs/Rooms2/Index2Components/MainTabComponents/MainTabSpaceItem.razor
+++ b/MatrixUtils.Web/Pages/Labs/Rooms2/Index2Components/MainTabComponents/MainTabSpaceItem.razor
@@ -1,14 +1,14 @@
@using MatrixUtils.Abstractions
-<div class="spaceListItem" style="@(SelectedSpace == Space ? "background-color: #FFFFFF33;" : "")" onclick="@SelectSpace">
+<div class="spaceListItem" style="@(SelectedSpace == Space ? "background-color: #FFFFFF33;" : "")" @onclick="@SelectSpace">
<div class="spaceListItemContainer">
@if (IsSpaceOpened()) {
- <span onclick="@ToggleSpace">▼ </span>
+ <span @onclick="@ToggleSpace">▼ </span>
}
else {
- <span onclick="@ToggleSpace">▶ </span>
+ <span @onclick="@ToggleSpace">▶ </span>
}
- <MxcImage Circular="true" Height="32" Width="32" MxcUri="@Space.RoomIcon"></MxcImage>
+ <MxcImage Homeserver="@Homeserver" Circular="true" Height="32" Width="32" Uri="@Space.RoomIcon"></MxcImage>
<span class="spaceNameEllipsis">@Space.RoomName</span>
</div>
@if (IsSpaceOpened()) {
@@ -30,6 +30,9 @@
[Parameter]
public List<RoomInfo> OpenedSpaces { get; set; }
+ [Parameter]
+ public AuthenticatedHomeserverGeneric Homeserver { get; set; }
+
protected override Task OnInitializedAsync() {
Space.PropertyChanged += (sender, args) => { StateHasChanged(); };
return base.OnInitializedAsync();
diff --git a/MatrixUtils.Web/Pages/Labs/Rooms2/Index2Components/RoomsIndex2ByRoomTypeTab.razor b/MatrixUtils.Web/Pages/Labs/Rooms2/Index2Components/RoomsIndex2ByRoomTypeTab.razor
index f4cf849..79f931b 100644
--- a/MatrixUtils.Web/Pages/Labs/Rooms2/Index2Components/RoomsIndex2ByRoomTypeTab.razor
+++ b/MatrixUtils.Web/Pages/Labs/Rooms2/Index2Components/RoomsIndex2ByRoomTypeTab.razor
@@ -22,7 +22,7 @@
@code {
[CascadingParameter]
- public Index2.RoomListViewData Data { get; set; } = null!;
+ public Index2.RoomListViewData Data { get; set; }
protected override async Task OnInitializedAsync() {
Data.Rooms.CollectionChanged += (sender, args) => {
diff --git a/MatrixUtils.Web/Pages/Labs/Rooms2/Index2Components/RoomsIndex2DMsTab.razor b/MatrixUtils.Web/Pages/Labs/Rooms2/Index2Components/RoomsIndex2DMsTab.razor
index f4cf849..79f931b 100644
--- a/MatrixUtils.Web/Pages/Labs/Rooms2/Index2Components/RoomsIndex2DMsTab.razor
+++ b/MatrixUtils.Web/Pages/Labs/Rooms2/Index2Components/RoomsIndex2DMsTab.razor
@@ -22,7 +22,7 @@
@code {
[CascadingParameter]
- public Index2.RoomListViewData Data { get; set; } = null!;
+ public Index2.RoomListViewData Data { get; set; }
protected override async Task OnInitializedAsync() {
Data.Rooms.CollectionChanged += (sender, args) => {
diff --git a/MatrixUtils.Web/Pages/Labs/Rooms2/Index2Components/RoomsIndex2MainTab.razor b/MatrixUtils.Web/Pages/Labs/Rooms2/Index2Components/RoomsIndex2MainTab.razor
index 6bf542f..99b031a 100644
--- a/MatrixUtils.Web/Pages/Labs/Rooms2/Index2Components/RoomsIndex2MainTab.razor
+++ b/MatrixUtils.Web/Pages/Labs/Rooms2/Index2Components/RoomsIndex2MainTab.razor
@@ -47,7 +47,7 @@
@code {
[CascadingParameter]
- public Index2.RoomListViewData Data { get; set; } = null!;
+ public Index2.RoomListViewData Data { get; set; }
protected override async Task OnInitializedAsync() {
Data.Rooms.CollectionChanged += (sender, args) => {
diff --git a/MatrixUtils.Web/Pages/Labs/Rooms2/Index2Components/RoomsIndex2SyncContainer.razor b/MatrixUtils.Web/Pages/Labs/Rooms2/Index2Components/RoomsIndex2SyncContainer.razor
index ae57521..33c310a 100644
--- a/MatrixUtils.Web/Pages/Labs/Rooms2/Index2Components/RoomsIndex2SyncContainer.razor
+++ b/MatrixUtils.Web/Pages/Labs/Rooms2/Index2Components/RoomsIndex2SyncContainer.razor
@@ -16,7 +16,7 @@
@code {
[Parameter]
- public Index2.RoomListViewData Data { get; set; } = null!;
+ public Index2.RoomListViewData Data { get; set; }
private SyncHelper syncHelper;
@@ -113,7 +113,7 @@
statusd.Status = $"{roomId} already known with {room.StateEvents?.Count ?? 0} state events";
}
else {
- statusd.Status = $"Eencountered new room {roomId}!";
+ statusd.Status = $"Encountered new room {roomId}!";
room = new RoomInfo(Data.Homeserver!.GetRoom(roomId), roomData.State?.Events);
Data.Rooms.Add(room);
}
diff --git a/MatrixUtils.Web/Pages/Rooms/Index.razor b/MatrixUtils.Web/Pages/Rooms/Index.razor
index 5dd8189..45219c7 100644
--- a/MatrixUtils.Web/Pages/Rooms/Index.razor
+++ b/MatrixUtils.Web/Pages/Rooms/Index.razor
@@ -13,9 +13,7 @@
<p>@Status2</p>
<LinkButton href="/Rooms/Create">Create new room</LinkButton>
-<CascadingValue TValue="AuthenticatedHomeserverGeneric" Value="Homeserver">
- <RoomList Rooms="Rooms" GlobalProfile="@GlobalProfile" @bind-StillFetching="RenderContents"></RoomList>
-</CascadingValue>
+<RoomList Rooms="Rooms" GlobalProfile="@GlobalProfile" @bind-StillFetching="RenderContents" Homeserver="@Homeserver"></RoomList>
@code {
@@ -122,7 +120,7 @@
try {
while (queue.Count == 0) {
Console.WriteLine("Queue is empty, waiting...");
- await Task.Delay(isInitialSync ? 100 : 2500);
+ await Task.Delay(isInitialSync ? 1000 : 2500);
}
Console.WriteLine($"Queue no longer empty after {renderTimeSw.Elapsed}!");
@@ -131,15 +129,15 @@
isInitialSync = false;
while (maxUpdates-- > 0 && queue.TryDequeue(out var queueEntry)) {
var (roomId, roomData) = queueEntry;
- Console.WriteLine($"Dequeued room {roomId}");
+ // Console.WriteLine($"Dequeued room {roomId}");
RoomInfo room;
if (Rooms.Any(x => x.Room.RoomId == roomId)) {
room = Rooms.First(x => x.Room.RoomId == roomId);
- Console.WriteLine($"QueueWorker: {roomId} already known with {room.StateEvents?.Count ?? 0} state events");
+ // Console.WriteLine($"QueueWorker: {roomId} already known with {room.StateEvents?.Count ?? 0} state events");
}
else {
- Console.WriteLine($"QueueWorker: encountered new room {roomId}!");
+ // Console.WriteLine($"QueueWorker: encountered new room {roomId}!");
room = new RoomInfo(Homeserver.GetRoom(roomId), roomData.State?.Events);
Rooms.Add(room);
}
@@ -155,6 +153,11 @@
Console.WriteLine($"QueueWorker: could not merge state for {room.Room.RoomId} as new data contains no state events!");
}
+ if (maxUpdates % 100 == 0) {
+ Console.WriteLine($"QueueWorker: {queue.Count} entries left in queue, {maxUpdates} maxUpdates left, RenderContents: {RenderContents}");
+ StateHasChanged();
+ await Task.Yield();
+ }
// await Task.Delay(100);
}
@@ -225,9 +228,10 @@
Rooms.Remove(Rooms.First(x => x.Room.RoomId == leftRoom.Key));
Status = $"Got {Rooms.Count} rooms so far! {queue.Count} entries in processing queue... " +
- $"{sync?.Rooms?.Join?.Count ?? 0} new updates!";
+ $"{sync.Rooms?.Join?.Count ?? 0} new updates!";
- Status2 = $"Next batch: {sync.NextBatch}";
+ Status2 = $"Next batch: {sync?.NextBatch}";
+ await Task.Yield();
}
}
diff --git a/MatrixUtils.Web/Pages/Rooms/PolicyList.razor b/MatrixUtils.Web/Pages/Rooms/PolicyList.razor
index 94113dd..3d78f4a 100644
--- a/MatrixUtils.Web/Pages/Rooms/PolicyList.razor
+++ b/MatrixUtils.Web/Pages/Rooms/PolicyList.razor
@@ -171,7 +171,7 @@ else {
private bool Loading { get; set; } = true;
[Parameter]
- public string RoomId { get; set; } = null!;
+ public string RoomId { get; set; }
private bool _enableAvatars;
private StateEventResponse? _currentlyEditingEvent;
diff --git a/MatrixUtils.Web/Pages/Rooms/PolicyList2.razor b/MatrixUtils.Web/Pages/Rooms/PolicyList2.razor
index 50f304a..664551a 100644
--- a/MatrixUtils.Web/Pages/Rooms/PolicyList2.razor
+++ b/MatrixUtils.Web/Pages/Rooms/PolicyList2.razor
@@ -141,7 +141,7 @@ else {
private bool Loading { get; set; } = true;
[Parameter]
- public string RoomId { get; set; } = null!;
+ public string RoomId { get; set; }
private bool _enableAvatars;
private StateEventResponse? _currentlyEditingEvent;
diff --git a/MatrixUtils.Web/Pages/StreamTest.razor b/MatrixUtils.Web/Pages/StreamTest.razor
index 4cec354..aae1f17 100644
--- a/MatrixUtils.Web/Pages/StreamTest.razor
+++ b/MatrixUtils.Web/Pages/StreamTest.razor
@@ -5,7 +5,7 @@
<PageTitle>StreamText</PageTitle>
@if (Homeserver is not null) {
- <p>Got homeserver @Homeserver.BaseUrl</p>
+ <p>Got homeserver @Homeserver.ServerName</p>
@* <img src="@ResolvedUri" @ref="imgElement"/> *@
@* <StreamedImage Stream="@Stream"/> *@
diff --git a/MatrixUtils.Web/Pages/Tools/Moderation/InviteCounter.razor b/MatrixUtils.Web/Pages/Tools/Moderation/InviteCounter.razor
index ea47237..cb1328c 100644
--- a/MatrixUtils.Web/Pages/Tools/Moderation/InviteCounter.razor
+++ b/MatrixUtils.Web/Pages/Tools/Moderation/InviteCounter.razor
@@ -1,6 +1,8 @@
@page "/Tools/Moderation/InviteCounter"
@using System.Collections.ObjectModel
+@using ArcaneLibs.Extensions
@using LibMatrix.EventTypes.Spec.State.RoomInfo
+@using LibMatrix.Filters
<h3>Invite counter</h3>
<hr/>
@@ -13,7 +15,7 @@
<details>
<summary>Results</summary>
- @foreach (var (userId, events) in invites.OrderByDescending(x=>x.Value).ToList()) {
+ @foreach (var (userId, events) in invites.OrderByDescending(x => x.Value).ToList()) {
<p>@userId: @events</p>
}
</details>
@@ -27,16 +29,15 @@
private ObservableCollection<string> log { get; set; } = new();
private Dictionary<string, int> invites { get; set; } = new();
private AuthenticatedHomeserverGeneric hs { get; set; }
-
+
[Parameter, SupplyParameterFromQuery(Name = "room")]
public string roomId { get; set; }
-
protected override async Task OnInitializedAsync() {
log.CollectionChanged += (sender, args) => StateHasChanged();
hs = await RmuStorage.GetCurrentSessionOrNavigate();
if (hs is null) return;
-
+
StateHasChanged();
Console.WriteLine("Rerendered!");
await base.OnInitializedAsync();
@@ -44,22 +45,21 @@
private async Task<string> Execute() {
var room = hs.GetRoom(roomId);
- var events = room.GetManyMessagesAsync(limit: int.MaxValue);
+ var filter = new SyncFilter.EventFilter() { Types = [RoomMemberEventContent.EventId] };
+ var events = room.GetManyMessagesAsync(limit: int.MaxValue, filter: filter.ToJson(ignoreNull: true, indent: false));
await foreach (var resp in events) {
var all = resp.State.Concat(resp.Chunk);
foreach (var evt in all) {
- if(evt.Type != RoomMemberEventContent.EventId) continue;
+ if (evt.Type != RoomMemberEventContent.EventId) continue;
var content = evt.TypedContent as RoomMemberEventContent;
- if(content.Membership != "invite") continue;
- if(!invites.ContainsKey(evt.Sender)) invites[evt.Sender] = 0;
- invites[evt.Sender]++;
+ if (content?.Membership != "invite") continue;
+ invites.TryAdd(evt.Sender!, 0);
+ invites[evt.Sender!]++;
}
log.Add($"{resp.State.Count} state, {resp.Chunk.Count} timeline");
}
-
-
-
+
StateHasChanged();
return "";
diff --git a/MatrixUtils.Web/Pages/Tools/Moderation/MembershipHistory.razor b/MatrixUtils.Web/Pages/Tools/Moderation/MembershipHistory.razor
index 6b5b5e4..2549c12 100644
--- a/MatrixUtils.Web/Pages/Tools/Moderation/MembershipHistory.razor
+++ b/MatrixUtils.Web/Pages/Tools/Moderation/MembershipHistory.razor
@@ -2,8 +2,10 @@
@using System.Collections.Frozen
@using System.Collections.ObjectModel
@using System.Diagnostics
+@using ArcaneLibs.Extensions
@using LibMatrix
@using LibMatrix.EventTypes.Spec.State.RoomInfo
+@using LibMatrix.Filters
@{
var sw = Stopwatch.StartNew();
Console.WriteLine("Start render");
@@ -397,7 +399,7 @@
private ObservableCollection<string> Log { get; set; } = new();
private List<StateEventResponse> Memberships { get; set; } = [];
- private AuthenticatedHomeserverGeneric Homeserver { get; set; } = null!;
+ private AuthenticatedHomeserverGeneric Homeserver { get; set; }
[Parameter, SupplyParameterFromQuery(Name = "room")]
public string RoomId { get; set; } = "";
@@ -417,7 +419,8 @@
private async Task Execute() {
Memberships.Clear();
var room = Homeserver.GetRoom(RoomId);
- var events = room.GetManyMessagesAsync(limit: int.MaxValue, chunkSize: 5000);
+ var filter = new SyncFilter.EventFilter() { Types = [RoomMemberEventContent.EventId] };
+ var events = room.GetManyMessagesAsync(limit: int.MaxValue, filter: filter.ToJson(ignoreNull: true, indent: false));
await foreach (var resp in events) {
var all = resp.State.Concat(resp.Chunk);
Memberships.AddRange(all.Where(x => x.Type == RoomMemberEventContent.EventId));
diff --git a/MatrixUtils.Web/Pages/Tools/Moderation/UserTrace.razor b/MatrixUtils.Web/Pages/Tools/Moderation/UserTrace.razor
index 0d622cc..73818c6 100644
--- a/MatrixUtils.Web/Pages/Tools/Moderation/UserTrace.razor
+++ b/MatrixUtils.Web/Pages/Tools/Moderation/UserTrace.razor
@@ -181,6 +181,9 @@
{ Membership: "leave", Reason: not null } => state.Sender == state.StateKey ? $"Left at {time} with reason {membership.Reason}" : $"Kicked by {state.Sender} at {time} for {membership.Reason}",
{ Membership: "ban", Reason: null } => $"Banned by {state.Sender} at {time}",
{ Membership: "ban", Reason: not null } => $"Banned by {state.Sender} at {time} for {membership.Reason}",
+ { Membership: "knock", Reason: null } => $"Knocked at {time}",
+ { Membership: "knock", Reason: not null } => $"Knocked at {time} for {membership.Reason}",
+ _ => $"Unknown membership {membership.Membership}, sent at {time} by {state.Sender} for {membership.Reason}"
};
}
diff --git a/MatrixUtils.Web/Pages/User/Profile.razor b/MatrixUtils.Web/Pages/User/Profile.razor
index d0af2c8..b6ac1d4 100644
--- a/MatrixUtils.Web/Pages/User/Profile.razor
+++ b/MatrixUtils.Web/Pages/User/Profile.razor
@@ -10,7 +10,7 @@
<h4>Profile</h4>
<hr/>
<div>
- <MxcAvatar MxcUri="@NewProfile.AvatarUrl" Circular="true" Size="96"/>
+ <MxcAvatar Homeserver="@Homeserver" MxcUri="@NewProfile.AvatarUrl" Circular="true" Size="96"/>
<div style="display: inline-block; vertical-align: middle;">
<span>Display name: </span><FancyTextBox @bind-Value="@NewProfile.DisplayName"></FancyTextBox><br/>
<span>Avatar URL: </span><FancyTextBox @bind-Value="@NewProfile.AvatarUrl"></FancyTextBox>
@@ -39,7 +39,7 @@
</summary>
@if (room.OwnMembership is not null) {
@* <img src="@Homeserver.ResolveMediaUri(room.OwnMembership.AvatarUrl)" style="width: 96px; height: 96px; border-radius: 50%; object-fit: cover;"/> *@
- <MxcAvatar MxcUri="@room.OwnMembership.AvatarUrl" Circular="true" Size="96"/>
+ <MxcAvatar Homeserver="@Homeserver" MxcUri="@room.OwnMembership.AvatarUrl" Circular="true" Size="96"/>
<div style="display: inline-block; vertical-align: middle;">
<span>Display name: </span><FancyTextBox BackgroundColor="@(room.OwnMembership.DisplayName == OldProfile.DisplayName ? "" : "#ffff0033")" @bind-Value="@room.OwnMembership.DisplayName"></FancyTextBox><br/>
<span>Avatar URL: </span><FancyTextBox BackgroundColor="@(room.OwnMembership.AvatarUrl == OldProfile.AvatarUrl ? "" : "#ffff0033")" @bind-Value="@room.OwnMembership.AvatarUrl"></FancyTextBox>
|