public IFolderDirectoryItem GetOrAddFolder(string directory) { if (string.IsNullOrWhiteSpace(directory)) { return(_rootFolder); } var segments = PathUtils.SplitPathIntoSegments(directory); // navigate to root dir. //IFolderDirectoryItem topLevelFolder = _rootFolder; //while (topLevelFolder.ParentFolder != null) //{ // topLevelFolder = topLevelFolder.ParentFolder; //} IFolderDirectoryItem currentFolder = _rootFolder; foreach (var folderName in segments) { currentFolder = currentFolder.GetOrAddFolder(folderName); } return(currentFolder); }
private bool Unregister(IFolderDirectoryItem folder) { // unwire events, as the folder has been deleted we no longer need to listen to it for changes. IDirectoryItem removed; if (_watchingFolders.TryRemove(folder.Path, out removed)) { var removedFolder = removed as IFolderDirectoryItem; if (removedFolder != null) { removedFolder.ItemAdded -= Folder_ItemAdded; removedFolder.Updated -= Item_Updated; removedFolder.Deleted -= Item_Deleted; } else { return(false); } return(true); } return(false); }
public IDirectoryContents GetDirectoryContents(string subpath) { IFolderDirectoryItem folder = Directory.GetFolder(subpath); if (folder == null) { return(new NotFoundDirectoryContents()); } return(new EnumerableFolderDirectoryContents(folder)); }
/// <summary> /// Watches a particular folder in the directory, and raises an event whenever the folder has a new item added to it, or an item deleted from it, or an item /// </summary> /// <param name="folder"></param> private void Register(IFolderDirectoryItem folder) { _watchingFolders.AddOrUpdate(folder.Path, (key) => { // a folder can be watched for items that are added to it, // or for the folder being deleted. // watching for an "update" to a folder is basically the folder being renamed. folder.ItemAdded += Folder_ItemAdded; // item added to the folder. folder.Deleted += Item_Deleted; // the folder was deleted. folder.Updated += Item_Updated; // folder was renamed. return(folder); }, (key, item) => item); }
private void EnsureParentEvents(IFolderDirectoryItem parent, bool listen) { if (_listenToParent) { if (parent == null) { throw new ArgumentNullException("parent"); } if (listen) { parent.Updated += OnParentUpdated; } else { parent.Updated -= OnParentUpdated; } } }
public InMemoryDirectory(IFolderDirectoryItem rootFolder) { _rootFolder = rootFolder; }
public void UpdateFile(string folderPath, IFileInfo fileInfo) { IFolderDirectoryItem folder = GetFolder(folderPath); folder?.UpdateFile(fileInfo); }
public GlobPatternEnumerableDirectoryItems(IFolderDirectoryItem rootFolder, string pattern) { _rootFolder = rootFolder; _pattern = pattern; }
public EnumerableFolderDirectoryContents(IFolderDirectoryItem folder) { _folder = folder; }
protected BaseDirectoryItem(IFileInfo fileInfo, IFolderDirectoryItem parentFolder, bool listenToParent) { _listenToParent = listenToParent; FileInfo = fileInfo; ParentFolder = parentFolder; }
protected FolderDirectoryItem(IFileInfo fileInfo, IFolderDirectoryItem parentFolder, bool listenToParent) : base(fileInfo, parentFolder, listenToParent) { }
public FolderDirectoryItem(IFileInfo directoryFileInfo, IFolderDirectoryItem parentFolder) : this(directoryFileInfo, parentFolder, true) { Items = new Dictionary <string, IDirectoryItem>(); }
public FolderDirectoryItem(string name, IFolderDirectoryItem parentFolder) : this(new DirectoryFileInfo(name), parentFolder) { }
public FileDirectoryItem(IFileInfo fileInfo, IFolderDirectoryItem parentFolder) : this(fileInfo, parentFolder, true) { }