From e9daf26bcf4eb8706b3467631d23bb37915f5076 Mon Sep 17 00:00:00 2001 From: xujie86 <167618598+xujie86@users.noreply.github.com> Date: Thu, 25 Sep 2025 06:11:03 +0800 Subject: [PATCH] Update MsgViewModel.cs --- v2rayN/ServiceLib/ViewModels/MsgViewModel.cs | 74 ++++++-------------- 1 file changed, 23 insertions(+), 51 deletions(-) diff --git a/v2rayN/ServiceLib/ViewModels/MsgViewModel.cs b/v2rayN/ServiceLib/ViewModels/MsgViewModel.cs index 8fc62dfe..b71c45d2 100644 --- a/v2rayN/ServiceLib/ViewModels/MsgViewModel.cs +++ b/v2rayN/ServiceLib/ViewModels/MsgViewModel.cs @@ -1,5 +1,6 @@ using System.Collections.Concurrent; using System.Reactive.Linq; +using System.Text; using System.Text.RegularExpressions; using ReactiveUI; using ReactiveUI.Fody.Helpers; @@ -13,11 +14,8 @@ public class MsgViewModel : MyReactiveObject private bool _lastMsgFilterNotAvailable; private bool _blLockShow = false; - [Reactive] - public string MsgFilter { get; set; } - - [Reactive] - public bool AutoRefresh { get; set; } + [Reactive] public string MsgFilter { get; set; } + [Reactive] public bool AutoRefresh { get; set; } public MsgViewModel(Func>? updateView) { @@ -26,63 +24,43 @@ public class MsgViewModel : MyReactiveObject MsgFilter = _config.MsgUIItem.MainMsgFilter ?? string.Empty; AutoRefresh = _config.MsgUIItem.AutoRefresh ?? true; - this.WhenAnyValue( - x => x.MsgFilter) - .Subscribe(c => DoMsgFilter()); - - this.WhenAnyValue( - x => x.AutoRefresh, - y => y == true) - .Subscribe(c => { _config.MsgUIItem.AutoRefresh = AutoRefresh; }); + this.WhenAnyValue(x => x.MsgFilter).Subscribe(c => DoMsgFilter()); + this.WhenAnyValue(x => x.AutoRefresh, y => y == true) + .Subscribe(c => { _config.MsgUIItem.AutoRefresh = AutoRefresh; }); AppEvents.SendMsgViewRequested - .AsObservable() - //.ObserveOn(RxApp.MainThreadScheduler) - .Subscribe(async content => await AppendQueueMsg(content)); + .AsObservable() + .Subscribe(async content => await AppendQueueMsg(content)); } private async Task AppendQueueMsg(string msg) { - //if (msg == Global.CommandClearMsg) - //{ - // ClearMsg(); - // return; - //} - if (AutoRefresh == false) - { - return; - } - _ = EnqueueQueueMsg(msg); - - if (_blLockShow) - { - return; - } - if (!_config.UiItem.ShowInTaskbar) - { - return; - } + if (!AutoRefresh) return; + await EnqueueQueueMsg(msg); + if (_blLockShow || !_config.UiItem.ShowInTaskbar) return; _blLockShow = true; await Task.Delay(500); - var txt = string.Join("", _queueMsg.ToArray()); - await _updateView?.Invoke(EViewAction.DispatcherShowMsg, txt); + + var sb = new StringBuilder(); + while (_queueMsg.TryDequeue(out var line)) + { + sb.Append(line); + } + if (sb.Length > 0) + await _updateView?.Invoke(EViewAction.DispatcherShowMsg, sb.ToString()); _blLockShow = false; } private async Task EnqueueQueueMsg(string msg) { - //filter msg if (MsgFilter.IsNotEmpty() && !_lastMsgFilterNotAvailable) { try { - if (!Regex.IsMatch(msg, MsgFilter)) - { - return; - } + if (!Regex.IsMatch(msg, MsgFilter)) return; } catch (Exception ex) { @@ -91,26 +69,20 @@ public class MsgViewModel : MyReactiveObject } } - //Enqueue if (_queueMsg.Count > _numMaxMsg) { for (int k = 0; k < _queueMsg.Count - _numMaxMsg; k++) - { _queueMsg.TryDequeue(out _); - } } + _queueMsg.Enqueue(msg); if (!msg.EndsWith(Environment.NewLine)) - { _queueMsg.Enqueue(Environment.NewLine); - } + await Task.CompletedTask; } - public void ClearMsg() - { - _queueMsg.Clear(); - } + public void ClearMsg() => _queueMsg.Clear(); private void DoMsgFilter() {