From d53c24c57f84a5c30c0822cbbe48a8b8260153af Mon Sep 17 00:00:00 2001 From: BlossomiShymae <87099578+BlossomiShymae@users.noreply.github.com> Date: Mon, 19 Aug 2024 05:15:14 -0500 Subject: [PATCH] Update event viewer to have colored text --- Needlework.Net/ViewModels/EventViewModel.cs | 22 ++++++++++++ .../ViewModels/WebsocketViewModel.cs | 35 +++++++++---------- Needlework.Net/Views/WebsocketView.axaml | 21 ++++++++++- 3 files changed, 59 insertions(+), 19 deletions(-) create mode 100644 Needlework.Net/ViewModels/EventViewModel.cs diff --git a/Needlework.Net/ViewModels/EventViewModel.cs b/Needlework.Net/ViewModels/EventViewModel.cs new file mode 100644 index 0000000..0b59415 --- /dev/null +++ b/Needlework.Net/ViewModels/EventViewModel.cs @@ -0,0 +1,22 @@ +using BlossomiShymae.GrrrLCU; +using CommunityToolkit.Mvvm.ComponentModel; +using System; + +namespace Needlework.Net.ViewModels +{ + public class EventViewModel : ObservableObject + { + public string Time { get; } + public string Type { get; } + public string Uri { get; } + + public string Key => $"{Time} {Type} {Uri}"; + + public EventViewModel(EventData eventData) + { + Time = $"{DateTime.Now:HH:mm:ss.fff}"; + Type = eventData?.EventType.ToUpper() ?? string.Empty; + Uri = eventData?.Uri ?? string.Empty; + } + } +} diff --git a/Needlework.Net/ViewModels/WebsocketViewModel.cs b/Needlework.Net/ViewModels/WebsocketViewModel.cs index 5717bf4..f3f3478 100644 --- a/Needlework.Net/ViewModels/WebsocketViewModel.cs +++ b/Needlework.Net/ViewModels/WebsocketViewModel.cs @@ -16,20 +16,20 @@ namespace Needlework.Net.ViewModels { public partial class WebsocketViewModel : PageBase { - public ObservableCollection EventLog { get; } = []; + public ObservableCollection EventLog { get; } = []; public SemaphoreSlim EventLogLock { get; } = new(1, 1); [NotifyPropertyChangedFor(nameof(FilteredEventLog))] [ObservableProperty] private string _search = string.Empty; [ObservableProperty] private bool _isAttach = true; [ObservableProperty] private bool _isTail = false; - [ObservableProperty] private string? _selectedEventLog = null; + [ObservableProperty] private EventViewModel? _selectedEventLog = null; private Dictionary _events = []; public WebsocketClient? Client { get; set; } - public IReadOnlyList FilteredEventLog => string.IsNullOrWhiteSpace(Search) ? EventLog : [.. EventLog.Where(x => x.Contains(Search, StringComparison.InvariantCultureIgnoreCase))]; + public IReadOnlyList FilteredEventLog => string.IsNullOrWhiteSpace(Search) ? EventLog : [.. EventLog.Where(x => x.Key.Contains(Search, StringComparison.InvariantCultureIgnoreCase))]; public WebsocketViewModel() : base("Event Viewer", "plug", -100) { @@ -59,17 +59,10 @@ namespace Needlework.Net.ViewModels } } - [RelayCommand] - private void Clear() - { - _events.Clear(); - EventLog.Clear(); - } - - partial void OnSelectedEventLogChanged(string? value) + partial void OnSelectedEventLogChanged(EventViewModel? value) { if (value == null) return; - if (_events.TryGetValue(value, out var message)) + if (_events.TryGetValue(value.Key, out var message)) { var text = JsonSerializer.Serialize(message, App.JsonSerializerOptions); if (text.Length >= App.MaxCharacters) WeakReferenceMessenger.Default.Send(new OopsiesDialogRequestedMessage(text)); @@ -77,6 +70,13 @@ namespace Needlework.Net.ViewModels } } + [RelayCommand] + private void Clear() + { + _events.Clear(); + EventLog.Clear(); + } + private void OnReconnection(ReconnectionInfo info) { Trace.WriteLine($"-- Reconnection --\nType{info.Type}"); @@ -96,8 +96,7 @@ namespace Needlework.Net.ViewModels { if (!IsAttach) return; - var line = $"{DateTime.Now:HH:mm:ss.fff} {message.Data?.EventType.ToUpper()} {message.Data?.Uri}"; - Trace.WriteLine($"Message: {line}"); + var line = new EventViewModel(message.Data!); await EventLogLock.WaitAsync(); try @@ -105,16 +104,16 @@ namespace Needlework.Net.ViewModels if (EventLog.Count < 1000) { EventLog.Add(line); - _events[line] = message; + _events[line.Key] = message; } else { - var key = EventLog[0]; + var _event = EventLog[0]; EventLog.RemoveAt(0); - _events.Remove(key); + _events.Remove(_event.Key); EventLog.Add(line); - _events[line] = message; + _events[line.Key] = message; } } finally diff --git a/Needlework.Net/Views/WebsocketView.axaml b/Needlework.Net/Views/WebsocketView.axaml index 7edd819..631b275 100644 --- a/Needlework.Net/Views/WebsocketView.axaml +++ b/Needlework.Net/Views/WebsocketView.axaml @@ -42,7 +42,26 @@ Name="EventViewer" Margin="0 8 0 0" ItemsSource="{Binding FilteredEventLog}" - SelectedItem="{Binding SelectedEventLog}"/> + SelectedItem="{Binding SelectedEventLog}" + ScrollViewer.HorizontalScrollBarVisibility="Auto"> + + + + + + + + + +