diff --git a/MatrixRoomUtils.Web/Shared/RoomListComponents/RoomListCategory.razor b/MatrixRoomUtils.Web/Shared/RoomListComponents/RoomListCategory.razor
index 709f2d7..b798d49 100644
--- a/MatrixRoomUtils.Web/Shared/RoomListComponents/RoomListCategory.razor
+++ b/MatrixRoomUtils.Web/Shared/RoomListComponents/RoomListCategory.razor
@@ -6,13 +6,14 @@
@foreach (var room in rooms) {
<div class="room-list-item">
<RoomListItem RoomInfo="@room" ShowOwnProfile="@(roomType == "Room")"></RoomListItem>
- @if (RoomVersionDangerLevel(room) != 0) {
- <MatrixRoomUtils.Web.Shared.SimpleComponents.LinkButton Color="@(RoomVersionDangerLevel(room) == 2 ? "#ff0000" : "#ff8800")" href="@($"/Rooms/Create?Import={room.Room.RoomId}")">Upgrade room</MatrixRoomUtils.Web.Shared.SimpleComponents.LinkButton>
- }
+ @* @if (RoomVersionDangerLevel(room) != 0 && *@
+ @* (room.StateEvents.FirstOrDefault(x=>x.Type == "m.room.power_levels")?.TypedContent is RoomPowerLevelEventData powerLevels && powerLevels.UserHasPermission(HomeServer.UserId, "m.room.tombstone"))) { *@
+ @* <MatrixRoomUtils.Web.Shared.SimpleComponents.LinkButton Color="@(RoomVersionDangerLevel(room) == 2 ? "#ff0000" : "#ff8800")" href="@($"/Rooms/Create?Import={room.Room.RoomId}")">Upgrade room</MatrixRoomUtils.Web.Shared.SimpleComponents.LinkButton> *@
+ @* } *@
<MatrixRoomUtils.Web.Shared.SimpleComponents.LinkButton href="@($"/Rooms/{room.Room.RoomId}/Timeline")">View timeline</MatrixRoomUtils.Web.Shared.SimpleComponents.LinkButton>
<MatrixRoomUtils.Web.Shared.SimpleComponents.LinkButton href="@($"/Rooms/{room.Room.RoomId}/State/View")">View state</MatrixRoomUtils.Web.Shared.SimpleComponents.LinkButton>
<MatrixRoomUtils.Web.Shared.SimpleComponents.LinkButton href="@($"/Rooms/{room.Room.RoomId}/State/Edit")">Edit state</MatrixRoomUtils.Web.Shared.SimpleComponents.LinkButton>
-
+
@if (roomType == "Space") {
<RoomListSpace Space="@room"></RoomListSpace>
}
@@ -25,10 +26,13 @@
[Parameter]
public KeyValuePair<string, List<RoomInfo>> Category { get; set; }
-
+
[Parameter]
public ProfileResponseEventData? GlobalProfile { get; set; }
+ [CascadingParameter]
+ public AuthenticatedHomeServer HomeServer { get; set; } = null!;
+
private string roomType => Category.Key;
private List<RoomInfo> rooms => Category.Value;
@@ -42,4 +46,4 @@
return 0;
}
-}
\ No newline at end of file
+}
diff --git a/MatrixRoomUtils.Web/Shared/RoomListComponents/RoomListSpace.razor b/MatrixRoomUtils.Web/Shared/RoomListComponents/RoomListSpace.razor
index 5153658..a113f0b 100644
--- a/MatrixRoomUtils.Web/Shared/RoomListComponents/RoomListSpace.razor
+++ b/MatrixRoomUtils.Web/Shared/RoomListComponents/RoomListSpace.razor
@@ -1,4 +1,4 @@
-<LinkButton href="@($"/Rooms/{Space.Room.RoomId}/Space")">Manage space</LinkButton>
+<MatrixRoomUtils.Web.Shared.SimpleComponents.LinkButton href="@($"/Rooms/{Space.Room.RoomId}/Space")">Manage space</MatrixRoomUtils.Web.Shared.SimpleComponents.LinkButton>
<br/>
<details @ontoggle="SpaceChildrenOpened">
@@ -17,6 +17,9 @@
public RoomInfo Space { get; set; }
[Parameter, CascadingParameter]
+ public List<RoomInfo> KnownRooms { get; set; } = new();
+
+ [Parameter, CascadingParameter]
public string? Breadcrumbs {
get => _breadcrumbs + Space.Room.RoomId;
set => _breadcrumbs = value;
@@ -30,9 +33,14 @@
var rooms = Space.Room.AsSpace.GetRoomsAsync();
await foreach (var room in rooms) {
if (Breadcrumbs.Contains(room.RoomId)) continue;
- Children.Add(new() {
- Room = room
- });
+ RoomInfo roomInfo = KnownRooms.FirstOrDefault(x => x.Room.RoomId == room.RoomId);
+ if (roomInfo is null) {
+ roomInfo = new() {
+ Room = room
+ };
+ KnownRooms.Add(roomInfo);
+ }
+ Children.Add(roomInfo);
}
await base.OnInitializedAsync();
}
@@ -46,4 +54,4 @@
Console.WriteLine($"[RoomList] Rendering children of {Space.Room.RoomId}");
}
-}
\ No newline at end of file
+}
diff --git a/MatrixRoomUtils.Web/Shared/RoomListItem.razor b/MatrixRoomUtils.Web/Shared/RoomListItem.razor
index b89fb18..e12f622 100644
--- a/MatrixRoomUtils.Web/Shared/RoomListItem.razor
+++ b/MatrixRoomUtils.Web/Shared/RoomListItem.razor
@@ -32,7 +32,7 @@
[Parameter]
public GenericRoom? Room { get; set; }
-
+
[Parameter]
public RoomInfo? RoomInfo { get; set; }
@@ -69,20 +69,32 @@
if (Room is null && RoomId is null && RoomInfo is null) {
throw new ArgumentNullException(nameof(RoomId));
}
-
+
// sweep from roominfo to id
if (RoomInfo is not null) Room = RoomInfo.Room;
if(Room is not null) RoomId = Room.RoomId;
-
+
//sweep from id to roominfo
if(RoomId is not null) Room ??= await hs.GetRoom(RoomId);
if(Room is not null) RoomInfo ??= new RoomInfo() {
Room = Room
};
- await CheckRoomVersion();
- await GetRoomInfo();
- await LoadOwnProfile();
+ try {
+ await CheckRoomVersion();
+ await GetRoomInfo();
+ await LoadOwnProfile();
+ }
+ catch (MatrixException e) {
+ if (e is not { ErrorCode: "M_FORBIDDEN" }) {
+ throw;
+ }
+ roomName = "Error: " + e.Message;
+ roomIcon = "/blobfox_outage.gif";
+ }
+ catch (Exception e) {
+ Console.WriteLine($"Failed to load room info for {RoomId}: {e.Message}");
+ }
_semaphoreSlim.Release();
}
@@ -104,24 +116,17 @@
}
private async Task CheckRoomVersion() {
- try {
- var ce = (await RoomInfo.GetStateEvent("m.room.create")).TypedContent as RoomCreateEventData;
- if (int.TryParse(ce.RoomVersion, out var rv)) {
- if (rv < 10)
- hasOldRoomVersion = true;
- }
- else // treat unstable room versions as dangerous
- hasDangerousRoomVersion = true;
-
- if (RoomConstants.DangerousRoomVersions.Contains(ce.RoomVersion)) {
- hasDangerousRoomVersion = true;
- roomName = "Dangerous room: " + roomName;
- }
+ var ce = (await RoomInfo.GetStateEvent("m.room.create")).TypedContent as RoomCreateEventData;
+ if (int.TryParse(ce.RoomVersion, out var rv)) {
+ if (rv < 10)
+ hasOldRoomVersion = true;
}
- catch (MatrixException e) {
- if (e is not { ErrorCode: "M_FORBIDDEN" }) {
- throw;
- }
+ else // treat unstable room versions as dangerous
+ hasDangerousRoomVersion = true;
+
+ if (RoomConstants.DangerousRoomVersions.Contains(ce.RoomVersion)) {
+ hasDangerousRoomVersion = true;
+ roomName = "Dangerous room: " + roomName;
}
}
@@ -132,7 +137,7 @@
var state = (await RoomInfo.GetStateEvent("m.room.avatar")).TypedContent as RoomAvatarEventData;
if (state?.Url is { } url) {
roomIcon = MediaResolver.ResolveMediaUri(hs.FullHomeServerDomain, url);
- Console.WriteLine($"Got avatar for room {RoomId}: {roomIcon} ({url})");
+ // Console.WriteLine($"Got avatar for room {RoomId}: {roomIcon} ({url})");
}
}
catch (MatrixException e) {
@@ -142,4 +147,4 @@
}
}
-}
\ No newline at end of file
+}
|