From 95ce0381a05986b2968e4b9972a8a48e25c3887c Mon Sep 17 00:00:00 2001 From: Waldek Mastykarz Date: Tue, 22 Apr 2025 14:17:46 +0200 Subject: [PATCH] Fixes reloading files multiple times. Closes #1120 --- dev-proxy-abstractions/BaseLoader.cs | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/dev-proxy-abstractions/BaseLoader.cs b/dev-proxy-abstractions/BaseLoader.cs index 394d71bd..3d73e284 100644 --- a/dev-proxy-abstractions/BaseLoader.cs +++ b/dev-proxy-abstractions/BaseLoader.cs @@ -12,6 +12,9 @@ public abstract class BaseLoader(ILogger logger, bool validateSchemas) : IDispos private readonly ILogger _logger = logger ?? throw new ArgumentNullException(nameof(logger)); private readonly bool _validateSchemas = validateSchemas; private FileSystemWatcher? _watcher; + private Timer? _debounceTimer; + private readonly Lock _debounceLock = new(); + private readonly int _debounceDelay = 300; // milliseconds protected abstract string FilePath { get; } protected abstract void LoadData(string fileContents); @@ -63,7 +66,11 @@ private void LoadFileContents() private void File_Changed(object sender, FileSystemEventArgs e) { - LoadFileContents(); + lock (_debounceLock) + { + _debounceTimer?.Dispose(); + _debounceTimer = new Timer(_ => LoadFileContents(), null, _debounceDelay, Timeout.Infinite); + } } public void InitFileWatcher() @@ -89,9 +96,6 @@ public void InitFileWatcher() Filter = Path.GetFileName(FilePath) }; _watcher.Changed += File_Changed; - _watcher.Created += File_Changed; - _watcher.Deleted += File_Changed; - _watcher.Renamed += File_Changed; _watcher.EnableRaisingEvents = true; LoadFileContents(); @@ -100,6 +104,7 @@ public void InitFileWatcher() public void Dispose() { _watcher?.Dispose(); + _debounceTimer?.Dispose(); GC.SuppressFinalize(this); } } \ No newline at end of file