From c7316e4f55fa76fc2160c95591343d953b873e48 Mon Sep 17 00:00:00 2001 From: defnotken Date: Sat, 13 Sep 2025 17:16:04 +0200 Subject: [PATCH] 1.11.9 - Caching logging and dupe checks Co-authored-by: CakeAndBanana Co-authored-by: defnotken Reviewed-on: https://git.lightless-sync.org/Lightless-Sync/LightlessClient/pulls/28 --- LightlessSync/FileCache/CacheMonitor.cs | 9 +++++++- LightlessSync/FileCache/FileCacheManager.cs | 23 +++++++++++++++------ 2 files changed, 25 insertions(+), 7 deletions(-) diff --git a/LightlessSync/FileCache/CacheMonitor.cs b/LightlessSync/FileCache/CacheMonitor.cs index facc770..79d225b 100644 --- a/LightlessSync/FileCache/CacheMonitor.cs +++ b/LightlessSync/FileCache/CacheMonitor.cs @@ -583,7 +583,14 @@ public sealed class CacheMonitor : DisposableMediatorSubscriberBase } catch (Exception ex) { - Logger.LogWarning(ex, "Failed validating {path}", workload.ResolvedFilepath); + if (workload != null) + { + Logger.LogWarning(ex, "Failed validating {path}", workload.ResolvedFilepath); + } + else + { + Logger.LogWarning(ex, "Failed validating unknown workload"); + } } Interlocked.Increment(ref _currentFileProgress); } diff --git a/LightlessSync/FileCache/FileCacheManager.cs b/LightlessSync/FileCache/FileCacheManager.cs index c94971f..5c6084d 100644 --- a/LightlessSync/FileCache/FileCacheManager.cs +++ b/LightlessSync/FileCache/FileCacheManager.cs @@ -180,21 +180,32 @@ public sealed class FileCacheManager : IHostedService try { - var cleanedPaths = paths.Distinct(StringComparer.OrdinalIgnoreCase).ToDictionary(p => p, - p => p.Replace("/", "\\", StringComparison.OrdinalIgnoreCase) + var cleanedPaths = new Dictionary(StringComparer.OrdinalIgnoreCase); + foreach (var p in paths) + { + var cleaned = p.Replace("/", "\\", StringComparison.OrdinalIgnoreCase) .Replace(_ipcManager.Penumbra.ModDirectory!, _ipcManager.Penumbra.ModDirectory!.EndsWith('\\') ? PenumbraPrefix + '\\' : PenumbraPrefix, StringComparison.OrdinalIgnoreCase) .Replace(_configService.Current.CacheFolder, _configService.Current.CacheFolder.EndsWith('\\') ? CachePrefix + '\\' : CachePrefix, StringComparison.OrdinalIgnoreCase) - .Replace("\\\\", "\\", StringComparison.Ordinal), - StringComparer.OrdinalIgnoreCase); + .Replace("\\\\", "\\", StringComparison.Ordinal); + + if (!cleanedPaths.ContainsValue(cleaned)) + { + _logger.LogDebug("Adding to cleanedPaths: {cleaned}", cleaned); + cleanedPaths[p] = cleaned; + } else + { + _logger.LogWarning("Duplicated found: {cleaned}", cleaned); + } + } Dictionary result = new(StringComparer.OrdinalIgnoreCase); - var dict = _fileCaches.SelectMany(f => f.Value) + var dict = _fileCaches.SelectMany(f => f.Value).Distinct() .ToDictionary(d => d.PrefixedFilePath, d => d, StringComparer.OrdinalIgnoreCase); foreach (var entry in cleanedPaths) { - //_logger.LogDebug("Checking {path}", entry.Value); + _logger.LogDebug("Checking if in cache: {path}", entry.Value); if (dict.TryGetValue(entry.Value, out var entity)) {