about summary refs log tree commit diff
path: root/ModerationClient
diff options
context:
space:
mode:
Diffstat (limited to 'ModerationClient')
-rw-r--r--ModerationClient/ViewModels/ClientViewModel.cs50
1 files changed, 27 insertions, 23 deletions
diff --git a/ModerationClient/ViewModels/ClientViewModel.cs b/ModerationClient/ViewModels/ClientViewModel.cs

index cf96617..a2da5be 100644 --- a/ModerationClient/ViewModels/ClientViewModel.cs +++ b/ModerationClient/ViewModels/ClientViewModel.cs
@@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Collections.ObjectModel; using System.Collections.Specialized; using System.Diagnostics; +using System.Diagnostics.CodeAnalysis; using System.IO; using System.Linq; using System.Text.Json; @@ -41,10 +42,7 @@ public partial class ClientViewModel : ViewModelBase { private readonly ILogger<ClientViewModel> _logger; private readonly MatrixAuthenticationService _authService; private readonly CommandLineConfiguration _cfg; - private SpaceNode? _currentSpace; private readonly SpaceNode _allRoomsNode; - private string _status = "Loading..."; - private RoomNode? _currentRoom; public ObservableCollection<SpaceNode> DisplayedSpaces { get; } = []; public ObservableDictionary<string, RoomNode> AllRooms { get; } = new(); public SpaceNode DirectMessages { get; } @@ -52,19 +50,20 @@ public partial class ClientViewModel : ViewModelBase { public bool Paused { get; set; } = true; public string Status { - get => _status + " " + DateTime.Now; - set => SetProperty(ref _status, value); - } + get => field + " " + DateTime.Now; + set => SetProperty(ref field, value); + } = "Loading..."; + [field: AllowNull, MaybeNull] public SpaceNode CurrentSpace { - get => _currentSpace ?? _allRoomsNode; - set => SetProperty(ref _currentSpace, value); + get => field ?? _allRoomsNode; + set => SetProperty(ref field, value); } public RoomNode? CurrentRoom { - get => _currentRoom; + get; set { - if (SetProperty(ref _currentRoom, value)) OnPropertyChanged(nameof(CurrentRoomViewModel)); + if (SetProperty(ref field, value)) OnPropertyChanged(nameof(CurrentRoomViewModel)); } } @@ -118,12 +117,19 @@ public partial class ClientViewModel : ViewModelBase { // Program.Beep((short)250, 0); Status = $"Processing sync... {res.NextBatch}"; - foreach (var (key, value) in res.Rooms?.Leave ?? []) { - List<StateEventResponse> events = [..value.Timeline?.Events ?? [], ..value.State?.Events ?? []]; - var ownEvents = events.Where(x => x is { StateKey: "@emma:rory.gay", Type: RoomMemberEventContent.EventId }).ToList(); - foreach (var evt in ownEvents) { - var ct = evt.ContentAs<RoomMemberEventContent>()!; - Console.WriteLine($"Room {key,60} removed: {evt.Type} {evt.StateKey} by {evt.Sender,80}, membership: {ct.Membership,6}, reason: {ct.Reason}"); + if (res.Rooms?.Leave is { Count: > 0 }) { + var maxKeyLength = res.Rooms.Leave.Keys.Max(x => x.Length); + foreach (var (key, value) in res.Rooms?.Leave ?? []) { + List<StateEventResponse> events = [..value.Timeline?.Events ?? [], ..value.State?.Events ?? []]; + var ownEvents = events.Where(x => x is { StateKey: "@emma:rory.gay", Type: RoomMemberEventContent.EventId }).ToList(); + var maxSenderLength = ownEvents.Max(x => x.Sender!.Length); + foreach (var evt in ownEvents) { + var ct = evt.ContentAs<RoomMemberEventContent>()!; + var reasonString = string.IsNullOrWhiteSpace(ct.Reason) + ? "" + : $" (reason: {ct.Reason})"; + Console.WriteLine($"Room {key.PadLeft(maxKeyLength)} removed: {evt.StateKey} by {evt.Sender!.PadLeft(maxSenderLength)} at {DateTimeOffset.FromUnixTimeMilliseconds((long)evt.OriginServerTs!)}, membership: {ct.Membership,6}{reasonString}"); + } } } @@ -167,11 +173,9 @@ public partial class ClientViewModel : ViewModelBase { AllRooms.Add(room.Key, new RoomNode { Name = "", RoomID = room.Key }); } - if (room.Value.State?.Events is not null) { - var nameEvent = room.Value.State!.Events!.FirstOrDefault(x => x is { Type: "m.room.name", StateKey: "" }); - if (nameEvent is not null) - AllRooms[room.Key].Name = (nameEvent?.TypedContent as RoomNameEventContent)?.Name ?? ""; - } + var nameEvent = room.Value.State?.Events?.FirstOrDefault(x => x is { Type: "m.room.name", StateKey: "" }); + if (nameEvent != null) + AllRooms[room.Key].Name = (nameEvent?.TypedContent as RoomNameEventContent)?.Name ?? ""; if (string.IsNullOrWhiteSpace(AllRooms[room.Key].Name)) { AllRooms[room.Key].Name = "Loading..."; @@ -188,13 +192,13 @@ public partial class ClientViewModel : ViewModelBase { } if (room.Value.Timeline?.Events is not null) { - foreach (var evt in room.Value.Timeline!.Events!) { + foreach (var evt in room.Value.Timeline.Events) { AllRooms[room.Key].Timeline.Add(evt); } } if (room.Value.State?.Events is not null) { - foreach (var evt in room.Value.State!.Events!) { + foreach (var evt in room.Value.State.Events) { AllRooms[room.Key].State.Add(evt); } }