about summary refs log tree commit diff
path: root/MatrixUtils.Web/Pages/User
diff options
context:
space:
mode:
authorRory& <root@rory.gay>2024-05-14 17:49:09 +0200
committerRory& <root@rory.gay>2024-05-14 17:49:09 +0200
commit41c5a84dacfd036b8d8f01f72226ac5a519995e3 (patch)
treea4bfc76541692cbbb0fc18f34463cf31a57440f5 /MatrixUtils.Web/Pages/User
parentImprove the heatmap layout (diff)
downloadMatrixUtils-41c5a84dacfd036b8d8f01f72226ac5a519995e3.tar.xz
Organise tools somewhat, set proper icons for nav menu
Diffstat (limited to 'MatrixUtils.Web/Pages/User')
-rw-r--r--MatrixUtils.Web/Pages/User/DMSpace.razor104
-rw-r--r--MatrixUtils.Web/Pages/User/DMSpaceStages/DMSpaceStage0.razor11
-rw-r--r--MatrixUtils.Web/Pages/User/DMSpaceStages/DMSpaceStage1.razor151
-rw-r--r--MatrixUtils.Web/Pages/User/DMSpaceStages/DMSpaceStage2.razor240
-rw-r--r--MatrixUtils.Web/Pages/User/DMSpaceStages/DMSpaceStage3.razor191
5 files changed, 0 insertions, 697 deletions
diff --git a/MatrixUtils.Web/Pages/User/DMSpace.razor b/MatrixUtils.Web/Pages/User/DMSpace.razor
deleted file mode 100644
index e3dba30..0000000
--- a/MatrixUtils.Web/Pages/User/DMSpace.razor
+++ /dev/null
@@ -1,104 +0,0 @@
-@page "/User/DMSpace/Setup"
-@using LibMatrix
-@using LibMatrix.Responses
-@using MatrixUtils.Abstractions
-@using MatrixUtils.LibDMSpace
-@using MatrixUtils.LibDMSpace.StateEvents
-@using MatrixUtils.Web.Pages.User.DMSpaceStages
-@using System.Text.Json.Serialization
-<h3>DM Space Management</h3>
-<hr/>
-<CascadingValue Value="@SetupData">
-    @switch (Stage) {
-        case -1:
-            <p>Initialising...</p>
-            break;
-        case 0:
-            <DMSpaceStage0/>
-            break;
-        case 1:
-            <DMSpaceStage1/>
-            break;
-        case 2:
-            <DMSpaceStage2/>
-            break;
-        case 3:
-            <DMSpaceStage3/>
-            break;
-        default:
-            <p>Stage is unknown value: @Stage!</p>
-            break;
-    }
-</CascadingValue>
-
-@code {
-    private int _stage = -1;
-
-    [Parameter, SupplyParameterFromQuery(Name = "stage")]
-    public int Stage {
-        get => _stage;
-        set {
-            _stage = value;
-            Console.WriteLine($"Stage is now {value}");
-            StateHasChanged();
-        }
-    }
-
-
-    public DMSpace? DMSpaceRootPage { get; set; }
-
-    protected override async Task OnInitializedAsync() {
-        if (NavigationManager.Uri.Contains("?stage=")) {
-            NavigationManager.NavigateTo("/User/DMSpace/Setup", true);
-        }
-        DMSpaceRootPage = this;
-        SetupData.Homeserver ??= await RMUStorage.GetCurrentSessionOrNavigate();
-        if (SetupData.Homeserver is null) return;
-        try {
-            SetupData.DmSpaceConfiguration = await SetupData.Homeserver.GetAccountDataAsync<DMSpaceConfiguration>("gay.rory.dm_space");
-            var room = SetupData.Homeserver.GetRoom(SetupData.DmSpaceConfiguration.DMSpaceId);
-            await room.GetStateAsync<DMSpaceInfo>(DMSpaceInfo.EventId);
-            Stage = 1;
-        }
-        catch (MatrixException e) {
-            if (e.ErrorCode is "M_NOT_FOUND" or "M_FORBIDDEN") {
-                Stage = 0;
-                SetupData.DmSpaceConfiguration = new();
-            }
-            else throw;
-        }
-        finally {
-            StateHasChanged();
-        }
-        await base.OnInitializedAsync();
-    }
-
-    protected override async Task OnParametersSetAsync() {
-        StateHasChanged();
-        await base.OnParametersSetAsync();
-    }
-
-    public DMSpaceSetupData SetupData { get; set; } = new();
-
-    public class DMSpaceSetupData {
-        
-        public AuthenticatedHomeserverGeneric? Homeserver { get; set; }
-
-        public DMSpaceConfiguration? DmSpaceConfiguration { get; set; }
-        
-        public DMSpaceInfo? DmSpaceInfo { get; set; } = new();
-        
-        public Dictionary<string, RoomInfo>? Spaces;
-        
-        public Dictionary<UserProfileWithId, List<RoomInfo>>? DMRooms;
-        
-        public RoomInfo? DMSpaceRoomInfo { get; set; }
-
-        
-        public class UserProfileWithId : UserProfileResponse {
-            [JsonIgnore]
-            public string Id { get; set; }
-        }
-    }
-
-}
\ No newline at end of file
diff --git a/MatrixUtils.Web/Pages/User/DMSpaceStages/DMSpaceStage0.razor b/MatrixUtils.Web/Pages/User/DMSpaceStages/DMSpaceStage0.razor
deleted file mode 100644
index 5f6508c..0000000
--- a/MatrixUtils.Web/Pages/User/DMSpaceStages/DMSpaceStage0.razor
+++ /dev/null
@@ -1,11 +0,0 @@
-<b>
-    <u>Welcome to the DM Space tool!</u>
-</b>
-<p>This wizard will help you set up a DM space.</p>
-<p>This is useful for eg. sharing DM rooms across multiple accounts.</p>
-<br/>
-<LinkButton href="/User/DMSpace/Setup?stage=1">Get started</LinkButton>
-
-@code {
-
-}
\ No newline at end of file
diff --git a/MatrixUtils.Web/Pages/User/DMSpaceStages/DMSpaceStage1.razor b/MatrixUtils.Web/Pages/User/DMSpaceStages/DMSpaceStage1.razor
deleted file mode 100644
index 2176467..0000000
--- a/MatrixUtils.Web/Pages/User/DMSpaceStages/DMSpaceStage1.razor
+++ /dev/null
@@ -1,151 +0,0 @@
-@using LibMatrix.Homeservers
-@using LibMatrix.RoomTypes
-@using LibMatrix
-@using LibMatrix.Responses
-@using MatrixUtils.LibDMSpace
-@using MatrixUtils.LibDMSpace.StateEvents
-@using Microsoft.Extensions.Primitives
-@using ArcaneLibs.Extensions
-@using LibMatrix.EventTypes.Spec.State
-@using MatrixUtils.Abstractions
-<b>
-    <u>DM Space setup tool - stage 1: Configure space</u>
-</b>
-<p>You will need a space to use for DM rooms.</p>
-@if (SetupData is not null) {
-    if (SetupData.Spaces is not null) {
-        <p>
-            Selected space:
-            <InputSelect @bind-Value="SetupData.DmSpaceConfiguration.DMSpaceId">
-                <option value="">New space</option>
-                @foreach (var (id, roomInfo) in SetupData.Spaces) {
-                    <option value="@id">@roomInfo.RoomName</option>
-                }
-            </InputSelect>
-        </p>
-        <p>
-            <InputCheckbox @bind-Value="SetupData.DmSpaceInfo.LayerByUser"></InputCheckbox>
-            Create sub-spaces per user
-        </p>
-        
-        <br/>
-        <LinkButton OnClick="@Disband" Color="#FF0000">Disband</LinkButton>
-        <LinkButton OnClick="@Execute">Next</LinkButton>
-    }
-    else {
-        <p>Discovering spaces, please wait...</p>
-    }
-}
-else {
-    <b>Error: Setup data is null!</b>
-}
-
-
-@if (!string.IsNullOrWhiteSpace(Status)) {
-    <p>@Status</p>
-}
-
-@code {
-
-    private string? Status {
-        get => _status;
-        set {
-            _status = value;
-            StateHasChanged();
-        }
-    }
-
-    private string? _status;
-
-    [CascadingParameter]
-    public DMSpace.DMSpaceSetupData SetupData { get; set; }
-
-    SemaphoreSlim _semaphoreSlim = new(1, 1);
-
-    protected override async Task OnInitializedAsync() {
-        if (SetupData is null)
-            return;
-
-        await _semaphoreSlim.WaitAsync();
-
-        Dictionary<string, RoomInfo> spaces = [];
-        SetupData.DmSpaceConfiguration ??= new();
-
-        Status = "Looking for spaces...";
-        var userRoomsEnum = SetupData.Homeserver!.GetJoinedRoomsByType("m.space");
-
-        List<GenericRoom> userRooms = new();
-        await foreach (var room in userRoomsEnum) {
-            userRooms.Add(room);
-        }
-
-        var roomChecks = userRooms.Select(GetFeasibleSpaces).ToAsyncEnumerable();
-        await foreach (var room in roomChecks)
-            if (room.HasValue)
-                spaces.TryAdd(room.Value.id, room.Value.roomInfo);
-
-        SetupData.Spaces = spaces;
-
-        Status = "Done!";
-        _semaphoreSlim.Release();
-        await base.OnParametersSetAsync();
-    }
-
-    private async Task Execute() {
-        if (string.IsNullOrWhiteSpace(SetupData!.DmSpaceConfiguration!.DMSpaceId)) {
-            var createRoomRequest = CreateRoomRequest.CreatePrivate(SetupData.Homeserver!, "Direct Messages");
-            createRoomRequest.CreationContentBaseType.Type = "m.space";
-            SetupData.DmSpaceConfiguration.DMSpaceId = (await SetupData.Homeserver!.CreateRoom(createRoomRequest)).RoomId;
-        }
-
-        await SetupData.Homeserver!.SetAccountDataAsync(DMSpaceConfiguration.EventId, SetupData.DmSpaceConfiguration);
-        var space = SetupData.Homeserver.GetRoom(SetupData.DmSpaceConfiguration.DMSpaceId);
-        await space.SendStateEventAsync(DMSpaceInfo.EventId, SetupData.DmSpaceInfo);
-        SetupData.DMSpaceRoomInfo = new RoomInfo(space);
-        await SetupData.DMSpaceRoomInfo.FetchAllStateAsync();
-
-        NavigationManager.NavigateTo("/User/DMSpace/Setup?stage=2");
-    }
-
-    public async Task<(string id, RoomInfo roomInfo)?> GetFeasibleSpaces(GenericRoom room) {
-        try {
-            var ri = new RoomInfo(room);
-            
-            await foreach(var evt in room.GetFullStateAsync())
-                ri.StateEvents.Add(evt);
-
-            var powerLevels = (await ri.GetStateEvent(RoomPowerLevelEventContent.EventId)).TypedContent as RoomPowerLevelEventContent;
-            if (!powerLevels.UserHasStatePermission(SetupData.Homeserver.WhoAmI.UserId, SpaceChildEventContent.EventId)) {
-                Console.WriteLine($"No permission to send m.space.child in {room.RoomId}...");
-                return null;
-            }
-            
-            Status = $"Found viable space: {ri.RoomName}";
-            if (!string.IsNullOrWhiteSpace(SetupData.DmSpaceConfiguration!.DMSpaceId)) {
-                if (await room.GetStateOrNullAsync<DMSpaceInfo>(DMSpaceInfo.EventId) is { } dsi) {
-                    SetupData.DmSpaceConfiguration.DMSpaceId = room.RoomId;
-                    SetupData.DmSpaceInfo = dsi;
-                    Console.WriteLine(dsi.ToJson(ignoreNull: true));
-                }
-            }
-
-            if (ri.RoomName == room.RoomId)
-                ri.RoomName = await room.GetNameOrFallbackAsync();
-
-            return (room.RoomId, ri);
-        }
-        catch (MatrixException e) {
-            if (e.ErrorCode == "M_NOT_FOUND") Console.WriteLine($"m.room.power_levels does not exist in {room.RoomId}!!!");
-            else throw;
-        }
-
-        return null;
-    }
-
-    private async Task Disband() {
-        var space = new DMSpaceRoom(SetupData.Homeserver, SetupData.DmSpaceConfiguration.DMSpaceId);
-        await space.DisbandDMSpace();
-        NavigationManager.NavigateTo(NavigationManager.Uri, forceLoad: true);
-    }
-
-}
\ No newline at end of file
diff --git a/MatrixUtils.Web/Pages/User/DMSpaceStages/DMSpaceStage2.razor b/MatrixUtils.Web/Pages/User/DMSpaceStages/DMSpaceStage2.razor
deleted file mode 100644
index a70e9c5..0000000
--- a/MatrixUtils.Web/Pages/User/DMSpaceStages/DMSpaceStage2.razor
+++ /dev/null
@@ -1,240 +0,0 @@
-@using LibMatrix.Homeservers
-@using LibMatrix.RoomTypes
-@using LibMatrix
-@using LibMatrix.EventTypes.Spec.State
-@using LibMatrix.Responses
-@using MatrixUtils.LibDMSpace
-@using MatrixUtils.LibDMSpace.StateEvents
-@using ArcaneLibs.Extensions
-@using System.Text.Json.Serialization
-@using MatrixUtils.Abstractions
-<b>
-    <u>DM Space setup tool - stage 2: Fix DM room attribution</u>
-</b>
-<p>This is just to make sure that your DMs are attributed to the right person!</p>
-
-@if (!string.IsNullOrWhiteSpace(Status)) {
-    <p>@Status</p>
-}
-
-@if (SetupData is not null) {
-    if (SetupData.DMRooms is { Count: > 0 }) {
-        @foreach (var (userId, room) in SetupData.DMRooms.OrderBy(x => x.Key.Id)) {
-            <InlineUserItem User="@userId"></InlineUserItem>
-            @foreach (var roomInfo in room) {
-                <RoomListItem RoomInfo="@roomInfo">
-                    <LinkButton Round="true" OnClick="@(async () => DmToReassign = roomInfo)">Reassign</LinkButton>
-                </RoomListItem>
-            }
-        }
-    }
-    else {
-        <p>DM room list is loading, please wait...</p>
-    }
-}
-else {
-    <b>Error: DMSpaceRootPage is null!</b>
-}
-
-<br/>
-<LinkButton OnClick="@Execute">Next</LinkButton>
-
-@{
-    var _offset = 0;
-}
-@foreach (var (room, usersList) in duplicateDmRooms) {
-    <ModalWindow Title="Duplicate room found" X="_offset += 30" Y="_offset">
-        <p>Found room assigned to multiple users: <RoomListItem RoomInfo="@room"></RoomListItem></p>
-        <p>Users:</p>
-        @foreach (var userProfileResponse in usersList) {
-            <LinkButton OnClick="@(() => SetRoomAssignment(room.Room.RoomId, userProfileResponse.Id))">
-                <span>Assign to </span>
-                <InlineUserItem User="userProfileResponse"></InlineUserItem>
-            </LinkButton>
-            <br/>
-        }
-    </ModalWindow>
-}
-
-@if (DmToReassign is not null) {
-    <ModalWindow Title="Re-assign DM" OnCloseClicked="@(() => DmToReassign = null)">
-        <RoomListItem RoomInfo="@DmToReassign"></RoomListItem>
-        @foreach (var userProfileResponse in roomMembers[DmToReassign]) {
-            <LinkButton OnClick="@(() => SetRoomAssignment(DmToReassign.Room.RoomId, userProfileResponse.Id))">
-                <span>Assign to </span>
-                <InlineUserItem User="userProfileResponse"></InlineUserItem>
-            </LinkButton>
-            <br/>
-        }
-    </ModalWindow>
-}
-
-@code {
-
-    private string newMxid { get; set; } = "";
-
-    private RoomInfo? DmToReassign {
-        get => _dmToReassign;
-        set {
-            _dmToReassign = value;
-            StateHasChanged();
-        }
-    }
-
-    private string? Status {
-        get => _status;
-        set {
-            _status = value;
-            StateHasChanged();
-        }
-    }
-
-    private string? _status;
-    private RoomInfo? _dmToReassign;
-
-    [CascadingParameter]
-    public DMSpace.DMSpaceSetupData SetupData { get; set; }
-
-    private Dictionary<RoomInfo, List<DMSpace.DMSpaceSetupData.UserProfileWithId>> duplicateDmRooms { get; set; } = new();
-    private Dictionary<RoomInfo, List<DMSpace.DMSpaceSetupData.UserProfileWithId>> roomMembers { get; set; } = new();
-
-    SemaphoreSlim _semaphore = new(1, 1);
-
-    protected override async Task OnInitializedAsync() {
-        if (SetupData is null)
-            return;
-        await _semaphore.WaitAsync();
-        DmToReassign = null;
-        var hs = SetupData.Homeserver;
-        Status = "Loading DM list from account data...";
-        var dms = await SetupData.Homeserver.GetAccountDataAsync<Dictionary<string, List<string>>>("m.direct");
-        Status = "Optimising DM list from account data...";
-        var joinedRooms = (await hs.GetJoinedRooms()).Select(x => x.RoomId).ToList();
-        foreach (var (user, rooms) in dms) {
-            for (var i = rooms.Count - 1; i >= 0; i--) {
-                var roomId = rooms[i];
-                if (!joinedRooms.Contains(roomId))
-                    rooms.RemoveAt(i);
-            }
-
-            dms[user] = rooms.Distinct().ToList();
-        }
-
-        dms.RemoveAll((x, y) => y is { Count: 0 });
-        await SetupData.Homeserver.SetAccountDataAsync("m.direct", dms);
-
-        Status = "DM list optimised, fetching info...";
-
-        SetupData.DMRooms = new Dictionary<DMSpace.DMSpaceSetupData.UserProfileWithId, List<RoomInfo>>();
-
-        var results = dms.Select(async x => {
-            var (userId, rooms) = x;
-            DMSpace.DMSpaceSetupData.UserProfileWithId userProfile;
-            try {
-                var profile = await SetupData.Homeserver.GetProfileAsync(userId);
-                userProfile = new() {
-                    AvatarUrl = profile.AvatarUrl,
-                    Id = userId,
-                    DisplayName = profile.DisplayName
-                };
-            }
-            catch {
-                userProfile = new() {
-                    AvatarUrl = "mxc://feline.support/uUxBwaboPkMGtbZcAGZaIzpK",
-                    DisplayName = userId,
-                    Id = userId
-                };
-            }
-
-            var roomList = new List<RoomInfo>();
-            var tasks = rooms.Select(x => GetRoomInfo(hs.GetRoom(x))).ToAsyncEnumerable();
-            await foreach (var result in tasks)
-                roomList.Add(result);
-            return (userProfile, roomList);
-            // StateHasChanged();
-        }).ToAsyncEnumerable();
-        await foreach (var res in results) {
-            SetupData.DMRooms.Add(res.userProfile, res.roomList);
-            // Status = $"Listed {dmRooms.Count} users";
-        }
-
-        _semaphore.Release();
-        var duplicateDmRoomIds = new Dictionary<string, List<DMSpace.DMSpaceSetupData.UserProfileWithId>>();
-        foreach (var (user, rooms) in SetupData.DMRooms) {
-            foreach (var roomInfo in rooms) {
-                if (!duplicateDmRoomIds.ContainsKey(roomInfo.Room.RoomId))
-                    duplicateDmRoomIds.Add(roomInfo.Room.RoomId, new());
-                duplicateDmRoomIds[roomInfo.Room.RoomId].Add(user);
-            }
-        }
-
-        duplicateDmRoomIds.RemoveAll((x, y) => y.Count == 1);
-        foreach (var (roomId, users) in duplicateDmRoomIds) {
-            duplicateDmRooms.Add(SetupData.DMRooms.First(x => x.Value.Any(x => x.Room.RoomId == roomId)).Value.First(x => x.Room.RoomId == roomId), users);
-        }
-
-        // StateHasChanged();
-        Status = null;
-        await base.OnParametersSetAsync();
-    }
-
-    private async Task Execute() {
-        NavigationManager.NavigateTo("/User/DMSpace/Setup?stage=3");
-    }
-
-    private async Task<RoomInfo> GetRoomInfo(GenericRoom room) {
-        var roomInfo = new RoomInfo(room);
-        await roomInfo.FetchAllStateAsync();
-        roomMembers[roomInfo] = new();
-        // roomInfo.CreationEventContent = await room.GetCreateEventAsync();
-        
-        if(roomInfo.RoomName == room.RoomId)
-            try {
-                roomInfo.RoomName = await room.GetNameOrFallbackAsync();
-            }
-            catch { }
-
-        var membersEnum = room.GetMembersEnumerableAsync(true);
-        await foreach (var member in membersEnum)
-            if (member.TypedContent is RoomMemberEventContent memberEvent)
-                roomMembers[roomInfo].Add(new() { DisplayName = memberEvent.DisplayName, AvatarUrl = memberEvent.AvatarUrl, Id = member.StateKey });
-        
-        try {
-            string? roomIcon = (await room.GetAvatarUrlAsync())?.Url;
-            if (room is not null)
-                roomInfo.RoomIcon = roomIcon;
-        }
-        catch { }
-
-        return roomInfo;
-    }
-
-    private async Task<List<RoomInfo>> GetRoomInfoForRooms(List<GenericRoom> rooms) {
-        var tasks = rooms.Select(GetRoomInfo).ToList();
-        await Task.WhenAll(tasks);
-        return tasks.Select(x => x.Result).ToList();
-    }
-
-    private async Task SetRoomAssignment(string roomId, string userId) {
-        var hs = SetupData.Homeserver;
-        Status = "Loading DM list from account data...";
-        var dms = await SetupData.Homeserver.GetAccountDataAsync<Dictionary<string, List<string>>>("m.direct");
-        Status = "Updating DM list from account data...";
-
-        foreach (var (user, rooms) in dms) {
-            rooms.RemoveAll(x => x == roomId);
-            dms[user] = rooms.Distinct().ToList();
-        }
-
-        if (!dms.ContainsKey(userId))
-            dms.Add(userId, new());
-        dms[userId].Add(roomId);
-        dms.RemoveAll((x, y) => y is { Count: 0 });
-        await SetupData.Homeserver.SetAccountDataAsync("m.direct", dms);
-
-        duplicateDmRooms.RemoveAll((x, y) => x.Room.RoomId == roomId);
-        StateHasChanged();
-        if (duplicateDmRooms.Count == 0) await OnParametersSetAsync();
-    }
-
-}
diff --git a/MatrixUtils.Web/Pages/User/DMSpaceStages/DMSpaceStage3.razor b/MatrixUtils.Web/Pages/User/DMSpaceStages/DMSpaceStage3.razor
deleted file mode 100644
index 865e956..0000000
--- a/MatrixUtils.Web/Pages/User/DMSpaceStages/DMSpaceStage3.razor
+++ /dev/null
@@ -1,191 +0,0 @@
-@using LibMatrix.Homeservers
-@using LibMatrix.RoomTypes
-@using LibMatrix
-@using LibMatrix.EventTypes.Spec.State
-@using LibMatrix.Responses
-@using MatrixUtils.LibDMSpace
-@using MatrixUtils.LibDMSpace.StateEvents
-@using ArcaneLibs.Extensions
-@using System.Text.Json.Serialization
-@using MatrixUtils.Abstractions
-
-<b>
-    <u>DM Space setup tool - stage 3: Preview space layout</u>
-</b>
-<p>This gives you a preview of how your settings would impact layout!</p>
-
-@if (!string.IsNullOrWhiteSpace(Status)) {
-    <p>@Status</p>
-}
-
-@if (SetupData is not null) {
-    @if (SetupData.DMSpaceRoomInfo is not null) {
-        <p>
-            <InputCheckbox @bind-Value="SetupData.DmSpaceInfo.LayerByUser"></InputCheckbox>
-            Create sub-spaces per user
-        </p>
-        @if (!SetupData.DmSpaceInfo.LayerByUser) {
-            <RoomListItem RoomInfo="@SetupData.DMSpaceRoomInfo"></RoomListItem>
-            @foreach (var (userId, room) in SetupData.DMRooms.OrderBy(x => x.Key.DisplayName)) {
-                @foreach (var roomInfo in room) {
-                    <div style="margin-left: 32px;">
-                        <RoomListItem RoomInfo="@roomInfo"></RoomListItem>
-                    </div>
-                }
-            }
-        }
-        else {
-            <RoomListItem RoomInfo="@SetupData.DMSpaceRoomInfo"></RoomListItem>
-            @foreach (var (user, room) in SetupData.DMRooms.OrderBy(x => x.Key.DisplayName)) {
-                <div style="margin-left: 32px;">
-                    @{
-                        RoomInfo fakeRoom = new(SetupData.DMSpaceRoomInfo.Room) {
-                            RoomName = user.DisplayName ?? user.Id,
-                            RoomIcon = user.AvatarUrl
-                        };
-                    }
-                    <RoomListItem RoomInfo="@fakeRoom"></RoomListItem>
-                </div>
-                @foreach (var roomInfo in room) {
-                    <div style="margin-left: 64px;">
-                        <RoomListItem RoomInfo="@roomInfo"></RoomListItem>
-                    </div>
-                }
-            }
-        }
-    }
-    else {
-        <b>Error: SetupData.DMSpaceRoomInfo is null!</b>
-    }
-}
-else {
-    <b>Error: DMSpaceRootPageConfiguration is null!</b>
-}
-
-<br/>
-<LinkButton OnClick="@Execute">Next</LinkButton>
-
-@code {
-
-    private string? Status {
-        get => _status;
-        set {
-            _status = value;
-            StateHasChanged();
-        }
-    }
-
-    private string? _status;
-
-    [CascadingParameter]
-    public DMSpace.DMSpaceSetupData SetupData { get; set; }
-
-    SemaphoreSlim _semaphore = new(1, 1);
-
-    protected override async Task OnInitializedAsync() {
-        if (SetupData is null)
-            return;
-        await _semaphore.WaitAsync();
-        var hs = SetupData.Homeserver;
-        // var dmSpaceRoom = new DMSpaceRoom(hs, SetupData.DmSpaceConfiguration.DMSpaceId);
-        // SetupData.
-        // dmSpaceRoomInfo = new() {
-        // RoomName = await dmSpaceRoom.GetNameAsync(),
-        // CreationEventContent = await dmSpaceRoom.GetCreateEventAsync(),
-        // RoomIcon = "mxc://feline.support/uUxBwaboPkMGtbZcAGZaIzpK",
-        // Room = dmSpaceRoom
-        // };
-        // dmSpaceInfo = await dmSpaceRoom.GetDMSpaceInfo();
-        // Status = "Loading DM list from account data...";
-        // var dms = await SetupData.Homeserver.GetAccountDataAsync<Dictionary<string, List<string>>>("m.direct");
-
-        Status = "DM list optimised, fetching info...";
-        // var results = dms.Select(async x => {
-        //     var (userId, rooms) = x;
-        //     UserProfileWithId userProfile;
-        //     try {
-        //         var profile = await SetupData.Homeserver.GetProfileAsync(userId);
-        //         userProfile = new() {
-        //             AvatarUrl = profile.AvatarUrl,
-        //             Id = userId,
-        //             DisplayName = profile.DisplayName
-        //         };
-        //     }
-        //     catch {
-        //         userProfile = new() {
-        //             AvatarUrl = "mxc://feline.support/uUxBwaboPkMGtbZcAGZaIzpK",
-        //             DisplayName = userId,
-        //             Id = userId
-        //         };
-        //     }
-        //     var roomList = new List<RoomInfo>();
-        //     var tasks = rooms.Select(x => GetRoomInfo(hs.GetRoom(x))).ToAsyncEnumerable();
-        //     await foreach (var result in tasks)
-        //         roomList.Add(result);
-        //     return (userProfile, roomList);
-        // }).ToAsyncEnumerable();
-        // await foreach (var res in results) {
-        //     dmRooms.Add(new RoomInfo() {
-        //         Room = dmSpaceRoom,
-        //         RoomIcon = res.userProfile.AvatarUrl,
-        //         RoomName = res.userProfile.DisplayName,
-        //         CreationEventContent = await dmSpaceRoom.GetCreateEventAsync()
-        //     }, res.roomList);
-        // }
-        await SetupData.DMSpaceRoomInfo!.FetchAllStateAsync();
-        _semaphore.Release();
-        Status = null;
-        await base.OnParametersSetAsync();
-    }
-
-    private async Task Execute() {
-        var hs = SetupData.Homeserver;
-        var dmSpaceRoom = new DMSpaceRoom(hs, SetupData.DmSpaceConfiguration!.DMSpaceId!);
-        await dmSpaceRoom.ImportNativeDMs();
-        NavigationManager.NavigateTo("/User/DMSpace/Setup?stage=3");
-    }
-
-    private async Task<RoomInfo> GetRoomInfo(GenericRoom room) {
-        var roomInfo = new RoomInfo(room);
-        var roomMembers = new List<UserProfileWithId>();
-        roomInfo.CreationEventContent = await room.GetCreateEventAsync();
-        try {
-            roomInfo.RoomName = await room.GetNameAsync();
-        }
-        catch { }
-
-        var membersEnum = room.GetMembersEnumerableAsync(true);
-        await foreach (var member in membersEnum)
-            if (member.TypedContent is RoomMemberEventContent memberEvent)
-                roomMembers.Add(new() { DisplayName = memberEvent.DisplayName, AvatarUrl = memberEvent.AvatarUrl, Id = member.StateKey });
-
-        if (string.IsNullOrWhiteSpace(roomInfo.RoomName) || roomInfo.RoomName == room.RoomId) {
-            List<string> displayNames = new List<string>();
-            foreach (var member in roomMembers)
-                if (!string.IsNullOrWhiteSpace(member.DisplayName))
-                    displayNames.Add(member.DisplayName);
-            roomInfo.RoomName = string.Join(", ", displayNames);
-        }
-
-        try {
-            string? roomIcon = (await room.GetAvatarUrlAsync())?.Url;
-            if (room is not null)
-                roomInfo.RoomIcon = roomIcon;
-        }
-        catch { }
-
-        return roomInfo;
-    }
-
-    private async Task<List<RoomInfo>> GetRoomInfoForRooms(List<GenericRoom> rooms) {
-        var tasks = rooms.Select(GetRoomInfo).ToList();
-        await Task.WhenAll(tasks);
-        return tasks.Select(x => x.Result).ToList();
-    }
-
-    private class UserProfileWithId : UserProfileResponse {
-        [JsonIgnore]
-        public string Id { get; set; }
-    }
-
-}
\ No newline at end of file