From 03313562d21d5db9bf6a14ebbeab80e06c883d3a Mon Sep 17 00:00:00 2001 From: Rory& Date: Wed, 24 Jan 2024 02:31:56 +0100 Subject: MRU->RMU, fixes, cleanup --- MatrixRoomUtils.Web/Pages/User/DMManager.razor | 62 ------ MatrixRoomUtils.Web/Pages/User/DMSpace.razor | 86 -------- .../Pages/User/DMSpaceStages/DMSpaceStage0.razor | 11 - .../Pages/User/DMSpaceStages/DMSpaceStage1.razor | 128 ----------- .../Pages/User/DMSpaceStages/DMSpaceStage2.razor | 242 --------------------- .../Pages/User/DMSpaceStages/DMSpaceStage3.razor | 191 ---------------- MatrixRoomUtils.Web/Pages/User/Profile.razor | 134 ------------ 7 files changed, 854 deletions(-) delete mode 100644 MatrixRoomUtils.Web/Pages/User/DMManager.razor delete mode 100644 MatrixRoomUtils.Web/Pages/User/DMSpace.razor delete mode 100644 MatrixRoomUtils.Web/Pages/User/DMSpaceStages/DMSpaceStage0.razor delete mode 100644 MatrixRoomUtils.Web/Pages/User/DMSpaceStages/DMSpaceStage1.razor delete mode 100644 MatrixRoomUtils.Web/Pages/User/DMSpaceStages/DMSpaceStage2.razor delete mode 100644 MatrixRoomUtils.Web/Pages/User/DMSpaceStages/DMSpaceStage3.razor delete mode 100644 MatrixRoomUtils.Web/Pages/User/Profile.razor (limited to 'MatrixRoomUtils.Web/Pages/User') diff --git a/MatrixRoomUtils.Web/Pages/User/DMManager.razor b/MatrixRoomUtils.Web/Pages/User/DMManager.razor deleted file mode 100644 index a327793..0000000 --- a/MatrixRoomUtils.Web/Pages/User/DMManager.razor +++ /dev/null @@ -1,62 +0,0 @@ -@page "/User/DirectMessages" -@using LibMatrix.EventTypes.Spec.State -@using LibMatrix.Responses -@using MatrixRoomUtils.Abstractions -

Direct Messages

-
- -@foreach (var (targetUser, rooms) in DMRooms) { -
- - @foreach (var room in rooms) { - - } -
-} - -@code { - private string? _status; - private AuthenticatedHomeserverGeneric? Homeserver { get; set; } - private Dictionary> DMRooms { get; set; } = new(); - - public string? Status { - get => _status; - set { - _status = value; - StateHasChanged(); - } - } - - protected override async Task OnInitializedAsync() { - Homeserver = await MRUStorage.GetCurrentSessionOrNavigate(); - if (Homeserver is null) return; - Status = "Loading global profile..."; - if (Homeserver.WhoAmI?.UserId is null) return; - - Status = "Loading DM list from account data..."; - var dms = await Homeserver.GetAccountDataAsync>>("m.direct"); - DMRooms.Clear(); - foreach (var (userId, rooms) in dms) { - var roomList = new List(); - DMRooms.Add(await Homeserver.GetProfileAsync(userId), roomList); - foreach (var room in rooms) { - var roomInfo = new RoomInfo() { Room = Homeserver.GetRoom(room) }; - roomList.Add(roomInfo); - roomInfo.StateEvents.Add(new() { - Type = RoomNameEventContent.EventId, - TypedContent = new RoomNameEventContent() { - Name = await Homeserver.GetRoom(room).GetNameOrFallbackAsync(4) - }, - RoomId = room, Sender = null, EventId = null - }); - } - StateHasChanged(); - } - - StateHasChanged(); - Status = null; - - await base.OnInitializedAsync(); - } - -} \ No newline at end of file diff --git a/MatrixRoomUtils.Web/Pages/User/DMSpace.razor b/MatrixRoomUtils.Web/Pages/User/DMSpace.razor deleted file mode 100644 index 21cc264..0000000 --- a/MatrixRoomUtils.Web/Pages/User/DMSpace.razor +++ /dev/null @@ -1,86 +0,0 @@ -@page "/User/DMSpace/Setup" -@using LibMatrix.Homeservers -@using LibMatrix -@using MatrixRoomUtils.LibDMSpace -@using MatrixRoomUtils.LibDMSpace.StateEvents -@using MatrixRoomUtils.Web.Pages.User.DMSpaceStages -

DM Space Management

-
- - @switch (Stage) { - case -1: -

Initialising...

- break; - case 0: - - break; - case 1: - - break; - case 2: - - break; - case 3: - - break; - default: -

Stage is unknown value: @Stage!

- break; - } -
- -@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 AuthenticatedHomeserverGeneric? Homeserver { get; set; } - - public DMSpaceConfiguration? DmSpaceConfiguration { get; set; } - - [Parameter] - public DMSpace? DmSpace { get; set; } - - protected override async Task OnInitializedAsync() { - if (NavigationManager.Uri.Contains("?stage=")) { - NavigationManager.NavigateTo("/User/DMSpace", true); - } - DmSpace = this; - Homeserver ??= await MRUStorage.GetCurrentSessionOrNavigate(); - if (Homeserver is null) return; - try { - DmSpaceConfiguration = await Homeserver.GetAccountDataAsync("gay.rory.dm_space"); - var room = Homeserver.GetRoom(DmSpaceConfiguration.DMSpaceId); - await room.GetStateAsync(DMSpaceInfo.EventId); - Stage = 1; - } - catch (MatrixException e) { - if (e.ErrorCode == "M_NOT_FOUND") { - Stage = 0; - DmSpaceConfiguration = new(); - } - else throw; - } - catch (Exception e) { - throw; - } - finally { - StateHasChanged(); - } - await base.OnInitializedAsync(); - } - - protected override async Task OnParametersSetAsync() { - StateHasChanged(); - await base.OnParametersSetAsync(); - } - -} \ No newline at end of file diff --git a/MatrixRoomUtils.Web/Pages/User/DMSpaceStages/DMSpaceStage0.razor b/MatrixRoomUtils.Web/Pages/User/DMSpaceStages/DMSpaceStage0.razor deleted file mode 100644 index 49fd5b4..0000000 --- a/MatrixRoomUtils.Web/Pages/User/DMSpaceStages/DMSpaceStage0.razor +++ /dev/null @@ -1,11 +0,0 @@ - - Welcome to the DM Space tool! - -

This wizard will help you set up a DM space.

-

This is useful for eg. sharing DM rooms across multiple accounts.

-
-Get started - -@code { - -} \ No newline at end of file diff --git a/MatrixRoomUtils.Web/Pages/User/DMSpaceStages/DMSpaceStage1.razor b/MatrixRoomUtils.Web/Pages/User/DMSpaceStages/DMSpaceStage1.razor deleted file mode 100644 index 5958fc5..0000000 --- a/MatrixRoomUtils.Web/Pages/User/DMSpaceStages/DMSpaceStage1.razor +++ /dev/null @@ -1,128 +0,0 @@ -@using LibMatrix.Homeservers -@using LibMatrix.RoomTypes -@using LibMatrix -@using LibMatrix.Responses -@using MatrixRoomUtils.LibDMSpace -@using MatrixRoomUtils.LibDMSpace.StateEvents -@using Microsoft.Extensions.Primitives -@using ArcaneLibs.Extensions - - DM Space setup tool - stage 1: Configure space - -

You will need a space to use for DM rooms.

-@if (DmSpace is not null) { -

- Selected space: - - @foreach (var (id, name) in spaces) { - - } - -

-

- - Create sub-spaces per user -

-} -else { - Error: DmSpaceConfiguration is null! -} - -
-Next - -@if (!string.IsNullOrWhiteSpace(Status)) { -

@Status

-} - -@code { - - private string? Status { - get => _status; - set { - _status = value; - StateHasChanged(); - } - } - - private Dictionary spaces = new() { { "", "New space" } }; - private string? _status; - - [CascadingParameter] - public DMSpace? DmSpace { get; set; } - - public DMSpaceInfo? DmSpaceInfo { get; set; } = new(); - - protected override async Task OnInitializedAsync() { - await base.OnInitializedAsync(); - } - - SemaphoreSlim _semaphoreSlim = new(1, 1); - protected override async Task OnParametersSetAsync() { - if (DmSpace is null) - return; - await _semaphoreSlim.WaitAsync(); - DmSpace.DmSpaceConfiguration ??= new(); - if (spaces.Count == 1) { - Status = "Looking for spaces..."; - var userRoomsEnum = DmSpace.Homeserver.GetJoinedRoomsByType("m.space"); - List 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.name); - - Status = "Done!"; - } - _semaphoreSlim.Release(); - await base.OnParametersSetAsync(); - } - - private async Task Execute() { - if (string.IsNullOrWhiteSpace(DmSpace.DmSpaceConfiguration.DMSpaceId)) { - var crr = CreateRoomRequest.CreatePrivate(DmSpace.Homeserver, "Direct Messages"); - crr.CreationContentBaseType.Type = "m.space"; - DmSpace.DmSpaceConfiguration.DMSpaceId = (await DmSpace.Homeserver.CreateRoom(crr)).RoomId; - } - await DmSpace.Homeserver!.SetAccountDataAsync(DMSpaceConfiguration.EventId, DmSpace.DmSpaceConfiguration); - var space = DmSpace.Homeserver.GetRoom(DmSpace.DmSpaceConfiguration.DMSpaceId); - await space.SendStateEventAsync(DMSpaceInfo.EventId, DmSpaceInfo); - - NavigationManager.NavigateTo("/User/DMSpace/Setup?stage=2"); - } - - public async Task<(string id, string name)?> GetFeasibleSpaces(GenericRoom room) { - try { - var pls = await room.GetPowerLevelsAsync(); - if (!pls.UserHasStatePermission(DmSpace.Homeserver.WhoAmI.UserId, "m.space.child")) { - Console.WriteLine($"No permission to send m.space.child in {room.RoomId}..."); - return null; - } - var roomName = await room.GetNameAsync(); - Status = $"Found viable space: {roomName}"; - if (string.IsNullOrWhiteSpace(DmSpace.DmSpaceConfiguration.DMSpaceId)) { - try { - var dsi = await DmSpace.Homeserver.GetRoom(room.RoomId).GetStateOrNullAsync(DMSpaceInfo.EventId) ?? new DMSpaceInfo(); - if (await room.GetStateOrNullAsync(DMSpaceInfo.EventId) is not null && dsi is not null) { - DmSpace.DmSpaceConfiguration.DMSpaceId = room.RoomId; - DmSpaceInfo = dsi; - } - } - catch (MatrixException e) { - if (e.ErrorCode == "M_NOT_FOUND") Console.WriteLine($"{room.RoomId} is not a DM space."); - else throw; - } - } - return (room.RoomId, roomName); - } - 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; - } - -} \ No newline at end of file diff --git a/MatrixRoomUtils.Web/Pages/User/DMSpaceStages/DMSpaceStage2.razor b/MatrixRoomUtils.Web/Pages/User/DMSpaceStages/DMSpaceStage2.razor deleted file mode 100644 index 60c68ac..0000000 --- a/MatrixRoomUtils.Web/Pages/User/DMSpaceStages/DMSpaceStage2.razor +++ /dev/null @@ -1,242 +0,0 @@ -@using LibMatrix.Homeservers -@using LibMatrix.RoomTypes -@using LibMatrix -@using LibMatrix.EventTypes.Spec.State -@using LibMatrix.Responses -@using MatrixRoomUtils.LibDMSpace -@using MatrixRoomUtils.LibDMSpace.StateEvents -@using ArcaneLibs.Extensions -@using System.Text.Json.Serialization -@using MatrixRoomUtils.Abstractions - - DM Space setup tool - stage 2: Fix DM room attribution - -

This is just to make sure that your DMs are attributed to the right person!

- -@if (!string.IsNullOrWhiteSpace(Status)) { -

@Status

-} - -@if (DmSpace is not null) { - @foreach (var (userId, room) in dmRooms.OrderBy(x => x.Key.Id)) { - - @foreach (var roomInfo in room) { - - Reassign - - } - } -} -else { - Error: DmSpaceConfiguration is null! -} - -
-Next - -@{ - var _offset = 0; -} -@foreach (var (room, usersList) in duplicateDmRooms) { - -

Found room assigned to multiple users:

-

Users:

- @foreach (var userProfileResponse in usersList) { - - Assign to - - -
- } -
-} - -@if (DmToReassign is not null) { - - - @foreach (var userProfileResponse in roomMembers[DmToReassign]) { - - Assign to - - -
- } -
-} - -@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? DmSpace { get; set; } - - private Dictionary> dmRooms { get; set; } = new(); - private Dictionary> duplicateDmRooms { get; set; } = new(); - private Dictionary> roomMembers { get; set; } = new(); - - protected override async Task OnInitializedAsync() { - await base.OnInitializedAsync(); - } - - SemaphoreSlim _semaphore = new(1, 1); - - protected override async Task OnParametersSetAsync() { - if (DmSpace is null) - return; - await _semaphore.WaitAsync(); - DmToReassign = null; - var hs = DmSpace.Homeserver; - Status = "Loading DM list from account data..."; - var dms = await DmSpace.Homeserver.GetAccountDataAsync>>("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 DmSpace.Homeserver.SetAccountDataAsync("m.direct", dms); - dmRooms.Clear(); - - Status = "DM list optimised, fetching info..."; - var results = dms.Select(async x => { - var (userId, rooms) = x; - UserProfileWithId userProfile; - try { - var profile = await DmSpace.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(); - 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) { - dmRooms.Add(res.userProfile, res.roomList); - // Status = $"Listed {dmRooms.Count} users"; - } - _semaphore.Release(); - var duplicateDmRoomIds = new Dictionary>(); - foreach (var (user, rooms) in 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(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 GetRoomInfo(GenericRoom room) { - var roomInfo = new RoomInfo() { - Room = room - }; - roomMembers[roomInfo] = new(); - 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[roomInfo].Add(new() { DisplayName = memberEvent.DisplayName, AvatarUrl = memberEvent.AvatarUrl, Id = member.StateKey }); - - if (string.IsNullOrWhiteSpace(roomInfo.RoomName) || roomInfo.RoomName == room.RoomId) { - List displayNames = new List(); - foreach (var member in roomMembers[roomInfo]) - 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> GetRoomInfoForRooms(List 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 = DmSpace.Homeserver; - Status = "Loading DM list from account data..."; - var dms = await DmSpace.Homeserver.GetAccountDataAsync>>("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 DmSpace.Homeserver.SetAccountDataAsync("m.direct", dms); - - duplicateDmRooms.RemoveAll((x, y) => x.Room.RoomId == roomId); - StateHasChanged(); - if (duplicateDmRooms.Count == 0) await OnParametersSetAsync(); - } - - private class UserProfileWithId : UserProfileResponse { - [JsonIgnore] - public string Id { get; set; } - } - -} \ No newline at end of file diff --git a/MatrixRoomUtils.Web/Pages/User/DMSpaceStages/DMSpaceStage3.razor b/MatrixRoomUtils.Web/Pages/User/DMSpaceStages/DMSpaceStage3.razor deleted file mode 100644 index 42573e6..0000000 --- a/MatrixRoomUtils.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 MatrixRoomUtils.LibDMSpace -@using MatrixRoomUtils.LibDMSpace.StateEvents -@using ArcaneLibs.Extensions -@using System.Text.Json.Serialization -@using MatrixRoomUtils.Abstractions - - - DM Space setup tool - stage 3: Preview space layout - -

This gives you a preview of how your settings would impact layout!

- -@if (!string.IsNullOrWhiteSpace(Status)) { -

@Status

-} - -@if (DmSpace is not null) { - @if (dmSpaceInfo is not null && dmSpaceRoomInfo is not null) { -

- - Create sub-spaces per user -

- @if (!dmSpaceInfo.LayerByUser) { - - @foreach (var (userId, room) in dmRooms.OrderBy(x => x.Key.RoomName)) { - @foreach (var roomInfo in room) { -
- -
- } - } - } - else { - - @foreach (var (userId, room) in dmRooms.OrderBy(x => x.Key.RoomName)) { -
- -
- @foreach (var roomInfo in room) { -
- -
- } - } - } - } - else { - Error: dmSpaceInfo is null! - } -} -else { - Error: DmSpaceConfiguration is null! -} - -
-Next - -@code { - - private string? Status { - get => _status; - set { - _status = value; - StateHasChanged(); - } - } - - private string? _status; - - [CascadingParameter] - public DMSpace? DmSpace { get; set; } - - private Dictionary> dmRooms { get; set; } = new(); - private DMSpaceInfo? dmSpaceInfo { get; set; } - private RoomInfo? dmSpaceRoomInfo { get; set; } - - protected override async Task OnInitializedAsync() { - await base.OnInitializedAsync(); - } - - SemaphoreSlim _semaphore = new(1, 1); - - protected override async Task OnParametersSetAsync() { - if (DmSpace is null) - return; - await _semaphore.WaitAsync(); - var hs = DmSpace.Homeserver; - var dmSpaceRoom = new DMSpaceRoom(hs, DmSpace.DmSpaceConfiguration.DMSpaceId); - 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 DmSpace.Homeserver.GetAccountDataAsync>>("m.direct"); - dmRooms.Clear(); - - Status = "DM list optimised, fetching info..."; - var results = dms.Select(async x => { - var (userId, rooms) = x; - UserProfileWithId userProfile; - try { - var profile = await DmSpace.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(); - 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); - } - _semaphore.Release(); - Status = null; - await base.OnParametersSetAsync(); - } - - private async Task Execute() { - var hs = DmSpace.Homeserver; - var dmSpaceRoom = new DMSpaceRoom(hs, DmSpace.DmSpaceConfiguration.DMSpaceId); - NavigationManager.NavigateTo("/User/DMSpace/Setup?stage=3"); - } - - private async Task GetRoomInfo(GenericRoom room) { - var roomInfo = new RoomInfo() { - Room = room - }; - var roomMembers = new List(); - 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 displayNames = new List(); - 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> GetRoomInfoForRooms(List 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 diff --git a/MatrixRoomUtils.Web/Pages/User/Profile.razor b/MatrixRoomUtils.Web/Pages/User/Profile.razor deleted file mode 100644 index 73d7c6e..0000000 --- a/MatrixRoomUtils.Web/Pages/User/Profile.razor +++ /dev/null @@ -1,134 +0,0 @@ -@page "/User/Profile" -@using LibMatrix.Homeservers -@using LibMatrix.EventTypes.Spec.State -@using ArcaneLibs.Extensions -@using LibMatrix.Responses -

Manage Profile - @Homeserver?.WhoAmI?.UserId

-
- -@if (NewProfile is not null) { -

Profile

-
-
- -
- Display name:
- Avatar URL: -
- Update profile - Update profile (restore room overrides) -
-
- @if (!string.IsNullOrWhiteSpace(Status)) { -

@Status

- } - -
- - @*
*@ -

Room profiles

- - @foreach (var (roomId, roomProfile) in RoomProfiles.OrderBy(x => RoomNames.TryGetValue(x.Key, out var _name) ? _name : x.Key)) { -
- @(RoomNames.TryGetValue(roomId, out var name) ? name : roomId) - -
- Display name:
- Avatar URL: -
- Update profile -
-
- @if (!string.IsNullOrWhiteSpace(Status)) { -

@Status

- } -
-
- } - //
-} - -@code { - private string? _status = null; - - private AuthenticatedHomeserverGeneric? Homeserver { get; set; } - private UserProfileResponse? NewProfile { get; set; } - private UserProfileResponse? OldProfile { get; set; } - - private string? Status { - get => _status; - set { - _status = value; - StateHasChanged(); - } - } - - private Dictionary RoomProfiles { get; set; } = new(); - private Dictionary RoomNames { get; set; } = new(); - - protected override async Task OnInitializedAsync() { - Homeserver = await MRUStorage.GetCurrentSessionOrNavigate(); - if (Homeserver is null) return; - Status = "Loading global profile..."; - if (Homeserver.WhoAmI?.UserId is null) return; - NewProfile = (await Homeserver.GetProfileAsync(Homeserver.WhoAmI.UserId)); //.DeepClone(); - OldProfile = (await Homeserver.GetProfileAsync(Homeserver.WhoAmI.UserId)); //.DeepClone(); - Status = "Loading room profiles..."; - var roomProfiles = Homeserver.GetRoomProfilesAsync(); - await foreach (var (roomId, roomProfile) in roomProfiles) { - // Status = $"Got profile for {roomId}..."; - RoomProfiles[roomId] = roomProfile; //.DeepClone(); - } - - StateHasChanged(); - Status = "Room profiles loaded, loading room names..."; - - var roomNameTasks = RoomProfiles.Keys.Select(x => Homeserver.GetRoom(x)).Select(async x => { - var name = await x.GetNameOrFallbackAsync(); - return new KeyValuePair(x.RoomId, name); - }).ToAsyncEnumerable(); - - await foreach (var (roomId, roomName) in roomNameTasks) { - // Status = $"Got room name for {roomId}: {roomName}"; - RoomNames[roomId] = roomName; - } - - StateHasChanged(); - Status = null; - - await base.OnInitializedAsync(); - } - - private async Task AvatarChanged(InputFileChangeEventArgs arg) { - var res = await Homeserver.UploadFile(arg.File.Name, arg.File.OpenReadStream(Int64.MaxValue), arg.File.ContentType); - Console.WriteLine(res); - NewProfile.AvatarUrl = res; - StateHasChanged(); - } - - private async Task UpdateProfile(bool restoreRoomProfiles = false) { - Status = "Busy processing global profile update, please do not leave this page..."; - StateHasChanged(); - await Homeserver.UpdateProfileAsync(NewProfile, restoreRoomProfiles); - Status = null; - StateHasChanged(); - await OnInitializedAsync(); - } - - private async Task RoomAvatarChanged(InputFileChangeEventArgs arg, string roomId) { - var res = await Homeserver.UploadFile(arg.File.Name, arg.File.OpenReadStream(Int64.MaxValue), arg.File.ContentType); - Console.WriteLine(res); - RoomProfiles[roomId].AvatarUrl = res; - StateHasChanged(); - } - - private async Task UpdateRoomProfile(string roomId) { - Status = "Busy processing room profile update, please do not leave this page..."; - StateHasChanged(); - var room = Homeserver.GetRoom(roomId); - await room.SendStateEventAsync("m.room.member", Homeserver.WhoAmI.UserId, RoomProfiles[roomId]); - Status = null; - StateHasChanged(); - } - -} \ No newline at end of file -- cgit 1.5.1