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);
}
}
|