Skip to content

Commit 65e168a

Browse files
committed
refactor: enhance clear command logic and state management
- Introduce _isClearing flag to manage state during clear operations - Ensure proper disposal and reinitialization of logger when clearing - Simplify OnIsStartedChanged method for better readability
1 parent 71ff78b commit 65e168a

File tree

1 file changed

+39
-44
lines changed

1 file changed

+39
-44
lines changed

source/RevitDevTool/ViewModel/TraceLogViewModel.cs

Lines changed: 39 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,13 @@
55
using Serilog.Events;
66
using System.Windows.Forms.Integration;
77
using Autodesk.Revit.UI.Events;
8-
using RevitDevTool.Models.Trace ;
8+
using RevitDevTool.Models.Trace;
99
using RevitDevTool.Theme;
10-
using RevitDevTool.View.Settings ;
11-
using ricaun.Revit.UI ;
10+
using RevitDevTool.View.Settings;
11+
using ricaun.Revit.UI;
1212
using Serilog.Sinks.RichTextBoxForms;
1313
using Wpf.Ui.Appearance;
14-
using FontStyle = System.Drawing.FontStyle ;
14+
using FontStyle = System.Drawing.FontStyle;
1515

1616
namespace RevitDevTool.ViewModel;
1717

@@ -27,21 +27,22 @@ internal partial class TraceLogViewModel : ObservableObject, IDisposable
2727
private SerilogTraceListener? _traceListener;
2828
private TraceGeometry.TraceGeometryListener? _geometryListener;
2929
private ConsoleRedirector? _consoleRedirector;
30-
30+
3131
private ApplicationTheme _currentTheme;
32-
32+
3333
public WindowsFormsHost LogTextBox { get; }
3434

35-
[ObservableProperty]
36-
[NotifyCanExecuteChangedFor(nameof(OpenSettingsCommand))]
35+
[ObservableProperty]
36+
[NotifyCanExecuteChangedFor(nameof(OpenSettingsCommand))]
3737
private bool _isSettingOpened;
38-
39-
[ObservableProperty]
38+
39+
[ObservableProperty]
4040
private bool _isStarted = true;
41-
41+
4242
private bool _isSubcribe;
43-
44-
[ObservableProperty]
43+
private bool _isClearing;
44+
45+
[ObservableProperty]
4546
private LogEventLevel _logLevel = LogEventLevel.Debug;
4647

4748
partial void OnLogLevelChanged(LogEventLevel value)
@@ -51,10 +52,8 @@ partial void OnLogLevelChanged(LogEventLevel value)
5152

5253
partial void OnIsStartedChanged(bool value)
5354
{
54-
if (value)
55-
StartTracing();
56-
else
57-
StopTracing();
55+
if (value) StartTracing();
56+
else StopTracing();
5857
}
5958

6059
private void StartTracing()
@@ -74,17 +73,9 @@ private void StopTracing()
7473

7574
private void InitializeLogger()
7675
{
77-
var textTheme = _currentTheme == ApplicationTheme.Dark
78-
? AdaptiveThemePresets.EnhancedDark
79-
: AdaptiveThemePresets.EnhancedLight;
80-
81-
var loggerConfig = new LoggerConfiguration()
82-
.MinimumLevel.ControlledBy(_levelSwitch)
83-
.WriteTo.RichTextBox(_winFormsTextBox, out _sink,
84-
maxLogLines: int.MaxValue,
85-
formatProvider: CultureInfo.InvariantCulture,
86-
theme: textTheme,
87-
autoScroll: true);
76+
var textTheme = _currentTheme == ApplicationTheme.Dark ? AdaptiveThemePresets.EnhancedDark : AdaptiveThemePresets.EnhancedLight;
77+
78+
var loggerConfig = new LoggerConfiguration().MinimumLevel.ControlledBy(_levelSwitch).WriteTo.RichTextBox(_winFormsTextBox, out _sink, maxLogLines: int.MaxValue, formatProvider: CultureInfo.InvariantCulture, theme: textTheme, autoScroll: true);
8879

8980
_logger ??= loggerConfig.CreateLogger();
9081
_traceListener ??= new SerilogTraceListener(_logger);
@@ -93,6 +84,7 @@ private void InitializeLogger()
9384

9485
private void DisposeLogger()
9586
{
87+
_winFormsTextBox.Clear();
9688
_sink?.Dispose();
9789
_sink = null;
9890
_logger?.Dispose();
@@ -107,7 +99,7 @@ private void RegisterTraceListeners()
10799
{
108100
if (_traceListener != null && !Trace.Listeners.Contains(_traceListener))
109101
Trace.Listeners.Add(_traceListener);
110-
102+
111103
if (_geometryListener != null && !Trace.Listeners.Contains(_geometryListener))
112104
Trace.Listeners.Add(_geometryListener);
113105
}
@@ -116,18 +108,16 @@ private void UnregisterTraceListeners()
116108
{
117109
if (_traceListener != null)
118110
Trace.Listeners.Remove(_traceListener);
119-
111+
120112
if (_geometryListener != null)
121113
Trace.Listeners.Remove(_geometryListener);
122114
}
123115

124116
private void ApplyTextBoxTheme()
125117
{
126118
var isDark = _currentTheme == ApplicationTheme.Dark;
127-
_winFormsTextBox.BackColor = isDark
128-
? System.Drawing.Color.FromArgb(30, 30, 30)
129-
: System.Drawing.Color.FromArgb(250, 250, 250);
130-
119+
_winFormsTextBox.BackColor = isDark ? System.Drawing.Color.FromArgb(30, 30, 30) : System.Drawing.Color.FromArgb(250, 250, 250);
120+
131121
Win32DarkMode.SetImmersiveDarkMode(_winFormsTextBox.Handle, isDark);
132122
}
133123

@@ -161,18 +151,18 @@ private void RestartLogging()
161151
public void Subcribe()
162152
{
163153
if (_isSubcribe) return;
164-
154+
165155
_consoleRedirector ??= new ConsoleRedirector();
166-
156+
167157
UpdateTheme(ThemeWatcher.GetRequiredTheme(), true);
168158
IsStarted = true;
169159

170160
Context.UiApplication.Idling += _onIdlingHandler;
171161
ApplicationThemeManager.Changed += _onThemeChangedHandler;
172-
162+
173163
_isSubcribe = true;
174164
}
175-
165+
176166
private void Unsubscribe()
177167
{
178168
if (!_isSubcribe) return;
@@ -185,7 +175,7 @@ private void Unsubscribe()
185175

186176
private void OnIdling(object? sender, IdlingEventArgs e)
187177
{
188-
if (IsStarted)
178+
if (IsStarted && !_isClearing)
189179
{
190180
RegisterTraceListeners();
191181
}
@@ -207,7 +197,7 @@ public TraceLogViewModel()
207197
{
208198
Child = _winFormsTextBox
209199
};
210-
200+
211201
LogTextBox.Loaded += (_, _) =>
212202
{
213203
ApplyTextBoxTheme();
@@ -226,8 +216,15 @@ public TraceLogViewModel()
226216
[RelayCommand]
227217
private void Clear()
228218
{
229-
_winFormsTextBox.Clear();
230-
_sink?.Clear();
219+
_isClearing = true;
220+
if (IsStarted)
221+
{
222+
UnregisterTraceListeners();
223+
DisposeLogger();
224+
InitializeLogger();
225+
RegisterTraceListeners();
226+
}
227+
_isClearing = false;
231228
}
232229

233230
[RelayCommand]
@@ -251,8 +248,6 @@ private void OpenSettings()
251248

252249
public void Dispose()
253250
{
254-
Debug.WriteLine("TraceLogViewModel Dispose");
255-
256251
IsStarted = false;
257252
StopTracing();
258253
Unsubscribe();

0 commit comments

Comments
 (0)