/// <inheritdoc /> protected override IFileSystemWatcher WatchImpl(UPath path) { // TODO: create/delete events when mounts are added/removed var watcher = new AggregateWatcher(this, path); lock (_mounts) lock (_watchers) { foreach (var kvp in _mounts) { if (!IsMountIncludedInWatch(kvp.Key, path, out var remainingPath)) { continue; } if (kvp.Value.CanWatch(remainingPath)) { var internalWatcher = kvp.Value.Watch(remainingPath); watcher.Add(new WrapWatcher(kvp.Value, kvp.Key, remainingPath, internalWatcher)); } } if (Fallback != null && Fallback.CanWatch(path)) { var internalWatcher = Fallback.Watch(path); watcher.Add(new WrapWatcher(Fallback, UPath.Null, path, internalWatcher)); } _watchers.Add(watcher); } return(watcher); }
/// <inheritdoc /> protected override IFileSystemWatcher WatchImpl(UPath path) { var watcher = new Watcher(this, path); if (Fallback != null && Fallback.CanWatch(path) && Fallback.DirectoryExists(path)) { watcher.Add(Fallback.Watch(path)); } foreach (var fs in _fileSystems) { if (fs.CanWatch(path) && fs.DirectoryExists(path)) { watcher.Add(fs.Watch(path)); } } _watchers.Add(watcher); return(watcher); }