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)) {