Пример #1
0
        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);
        }
Пример #2
0
        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));
        }
Пример #4
0
        /// <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);
        }
Пример #5
0
        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;
                }
            }
        }
Пример #6
0
 public InMemoryDirectory(IFolderDirectoryItem rootFolder)
 {
     _rootFolder = rootFolder;
 }
Пример #7
0
        public void UpdateFile(string folderPath, IFileInfo fileInfo)
        {
            IFolderDirectoryItem folder = GetFolder(folderPath);

            folder?.UpdateFile(fileInfo);
        }
 public GlobPatternEnumerableDirectoryItems(IFolderDirectoryItem rootFolder, string pattern)
 {
     _rootFolder = rootFolder;
     _pattern    = pattern;
 }
Пример #9
0
 public EnumerableFolderDirectoryContents(IFolderDirectoryItem folder)
 {
     _folder = folder;
 }
Пример #10
0
 protected BaseDirectoryItem(IFileInfo fileInfo, IFolderDirectoryItem parentFolder, bool listenToParent)
 {
     _listenToParent = listenToParent;
     FileInfo        = fileInfo;
     ParentFolder    = parentFolder;
 }
Пример #11
0
 protected FolderDirectoryItem(IFileInfo fileInfo, IFolderDirectoryItem parentFolder, bool listenToParent) : base(fileInfo, parentFolder, listenToParent)
 {
 }
Пример #12
0
 public FolderDirectoryItem(IFileInfo directoryFileInfo, IFolderDirectoryItem parentFolder)
     : this(directoryFileInfo, parentFolder, true)
 {
     Items = new Dictionary <string, IDirectoryItem>();
 }
Пример #13
0
 public FolderDirectoryItem(string name, IFolderDirectoryItem parentFolder)
     : this(new DirectoryFileInfo(name), parentFolder)
 {
 }
Пример #14
0
 public FileDirectoryItem(IFileInfo fileInfo, IFolderDirectoryItem parentFolder) : this(fileInfo, parentFolder, true)
 {
 }