AcManager.Tools.Managers.InnerHelpers.DirectoryWatcher.UpdateInnerWatcher C# (CSharp) Method

UpdateInnerWatcher() private method

private UpdateInnerWatcher ( ) : void
return void
        private void UpdateInnerWatcher() {
            if (_failed) return;

            if (Directory.Exists(TargetDirectory)) {
                if (_innerWatcher != null) return;

                Debug.WriteLine("UPDATE INNER WATCHER: CREATE WATCHER FOR " + TargetDirectory);

                _innerWatcher = new FileSystemWatcher {
                    Path = TargetDirectory,
                    NotifyFilter = NotifyFilters.LastWrite | NotifyFilters.FileName | NotifyFilters.DirectoryName,
                    Filter = "*",
                    EnableRaisingEvents = true,
                    IncludeSubdirectories = true
                };

                lock (_listeners) {
                    foreach (var listener in _listeners) {
                        _innerWatcher.Changed += listener.FileOrDirectoryChanged;
                        _innerWatcher.Created += listener.FileOrDirectoryCreated;
                        _innerWatcher.Deleted += listener.FileOrDirectoryDeleted;
                        _innerWatcher.Renamed += listener.FileOrDirectoryRenamed;

                        listener.FileOrDirectoryCreated(this, new FileSystemEventArgs(WatcherChangeTypes.Created, TargetDirectory, null));
                    }
                }
            } else if (_innerWatcher != null) {
                Debug.WriteLine("UPDATE INNER WATCHER: REMOVE WATCHER FOR " + TargetDirectory);

                _innerWatcher.EnableRaisingEvents = false;
                _innerWatcher.Dispose();
                _innerWatcher = null;
                
                lock (_listeners) {
                    foreach (var listener in _listeners) {
                        listener.FileOrDirectoryDeleted(this, new FileSystemEventArgs(WatcherChangeTypes.Deleted, TargetDirectory, null));
                    }
                }
            }
        }