diff --git a/MareSynchronos/FileCache/CacheMonitor.cs b/MareSynchronos/FileCache/CacheMonitor.cs index 38e5c5b..34ffdc8 100644 --- a/MareSynchronos/FileCache/CacheMonitor.cs +++ b/MareSynchronos/FileCache/CacheMonitor.cs @@ -108,15 +108,18 @@ public sealed class CacheMonitor : DisposableMediatorSubscriberBase | NotifyFilters.DirectoryName | NotifyFilters.Size, Filter = "*.*", - IncludeSubdirectories = false + IncludeSubdirectories = false, }; MareWatcher.Deleted += MareWatcher_FileChanged; MareWatcher.Created += MareWatcher_FileChanged; + MareWatcher.EnableRaisingEvents = true; } private void MareWatcher_FileChanged(object sender, FileSystemEventArgs e) { + Logger.LogTrace("Mare FSW: FileChanged: {change} => {path}", e.ChangeType, e.FullPath); + if (!_allowedExtensions.Any(ext => e.FullPath.EndsWith(ext, StringComparison.OrdinalIgnoreCase))) return; lock (_watcherChanges) diff --git a/MareSynchronos/FileCache/FileCacheManager.cs b/MareSynchronos/FileCache/FileCacheManager.cs index 0f0e162..fe2a687 100644 --- a/MareSynchronos/FileCache/FileCacheManager.cs +++ b/MareSynchronos/FileCache/FileCacheManager.cs @@ -83,18 +83,24 @@ public sealed class FileCacheManager : IHostedService int i = 0; foreach (var fileCache in cacheEntries) { + if (cancellationToken.IsCancellationRequested) break; + _logger.LogInformation("Validating {file}", fileCache.ResolvedFilepath); progress.Report((i, cacheEntries.Count, fileCache)); i++; + if (!File.Exists(fileCache.ResolvedFilepath)) + { + brokenEntities.Add(fileCache); + continue; + } + var computedHash = Crypto.GetFileHash(fileCache.ResolvedFilepath); if (!string.Equals(computedHash, fileCache.Hash, StringComparison.Ordinal)) { _logger.LogInformation("Failed to validate {file}, got hash {hash}, expected hash {hash}", fileCache.ResolvedFilepath, computedHash, fileCache.Hash); brokenEntities.Add(fileCache); } - - if (cancellationToken.IsCancellationRequested) break; } foreach (var brokenEntity in brokenEntities)