/// <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);
        }
Exemple #2
0
        /// <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);
        }