Example #1
0
 private void EnumerateIncludeItems(List <DirectoryInfo> directories, List <FileInfo> files, WatchingTree watchingTree)
 {
     foreach (string path in IncludeItems.Files)
     {
         WatchingTreeItem item = watchingTree.ItemByPath(path, ItemType.File);
         item.Data = new ItemWatchingOptions();
         if (File.Exists(path))
         {
             files.Add(new FileInfo(path));
             item.Data.WatchingStatus = ItemWatchingStatus.Watched;
         }
         else
         {
             item.Data.WatchingStatus = ItemWatchingStatus.Expected;
         }
     }
     foreach (string path in IncludeItems.Directories)
     {
         WatchingTreeItem item = watchingTree.ItemByPath(path, ItemType.Directory);
         item.Data = new ItemWatchingOptions();
         if (Directory.Exists(path))
         {
             directories.Add(new DirectoryInfo(path));
             item.Data.WatchingStatus = ItemWatchingStatus.Watched;
         }
         else
         {
             item.Data.WatchingStatus = ItemWatchingStatus.Expected;
         }
     }
 }
Example #2
0
        private static List <WatchingTreeItem> RetriveWatchPoints(WatchingTree tree)
        {
            List <WatchingTreeItem>  result   = new List <WatchingTreeItem>();
            Queue <WatchingTreeItem> itemsQue = new Queue <WatchingTreeItem>();
            WatchingTreeItem         root     = tree.Root;

            foreach (var pair in root.Children)
            {
                itemsQue.Enqueue(pair.Value);
            }

            WatchingTreeItem item;
            WatchingTreeItem child;
            bool             childItems;

            while (itemsQue.Count > 0)
            {
                item       = itemsQue.Dequeue();
                childItems = item.Children.Any(pair =>
                {
                    ItemWatchingOptions data = pair.Value.Data;
                    return(data != null && data.WatchingStatus != ItemWatchingStatus.None);
                });
                if (childItems)
                {
                    result.Add(item);
                    continue;
                }
                foreach (var pair in item.Children)
                {
                    child = pair.Value;
                    itemsQue.Enqueue(child);
                }
            }
            return(result);
        }
Example #3
0
        private void EnumerateScanDirectory(DirectoryScanOptions scanOptions, List <DirectoryInfo> directories, List <FileInfo> files, WatchingTree watchingTree)
        {
            WatchingTreeItem item = watchingTree.ItemByPath(scanOptions.DirectoryPath, ItemType.Directory);

            item.Data = new ItemWatchingOptions()
            {
                ScanOptions    = scanOptions,
                WatchingStatus = ItemWatchingStatus.ScanNeeded
            };

            if (!Directory.Exists(scanOptions.DirectoryPath))
            {
                return;
            }
            Queue <DirectoryInfo> dirque = new Queue <DirectoryInfo>();
            DirectoryInfo         dir    = new DirectoryInfo(scanOptions.DirectoryPath);

            dirque.Enqueue(dir);
            dirque.Enqueue(null);
            int               currentDepth = 1;
            int               maxdepth     = scanOptions.ScanDepth;
            DirectoryInfo     current;
            ScanFilterOptions excludeFilters = scanOptions.Excludes;
            ScanFilterOptions includeFilters = scanOptions.Includes;

            while (true)
            {
                current = dirque.Dequeue();
                if (current == null)
                {
                    if (dirque.Count <= 0)
                    {
                        break;
                    }

                    currentDepth++;
                    if (currentDepth > maxdepth)
                    {
                        foreach (DirectoryInfo directory in dirque)
                        {
                            if (!excludeFilters.IsMatch(directory) &&
                                includeFilters.IsMatch(directory))
                            {
                                directories.Add(directory);
                            }
                        }
                        break;
                    }
                    else
                    {
                        dirque.Enqueue(null);
                        continue;
                    }
                }

                IEnumerable <DirectoryInfo> enumeratedDirectories = current.EnumerateDirectories();
                if (!includeFilters.IsDefault)
                {
                    foreach (DirectoryInfo directory in enumeratedDirectories)
                    {
                        if (includeFilters.IsMatch(directory))
                        {
                            directories.Add(directory);
                        }
                        else if (!excludeFilters.IsMatch(directory))
                        {
                            dirque.Enqueue(directory);
                        }
                    }
                }
                else
                {
                    foreach (DirectoryInfo directory in enumeratedDirectories)
                    {
                        if (!excludeFilters.IsMatch(directory))
                        {
                            dirque.Enqueue(directory);
                        }
                    }
                }


                IEnumerable <FileInfo> enumeratedFiles = current.EnumerateFiles();
                if (!includeFilters.IsDefault)
                {
                    foreach (FileInfo file in enumeratedFiles)
                    {
                        if (includeFilters.IsMatch(file))
                        {
                            files.Add(file);
                        }
                    }
                }
                else
                {
                    foreach (FileInfo file in enumeratedFiles)
                    {
                        if (!excludeFilters.IsMatch(file) && includeFilters.IsMatch(file))
                        {
                            files.Add(file);
                        }
                    }
                }
            }
        }
Example #4
0
        private static WatcherCreationOptions CollectNodes(WatchingTreeItem current, string currentPath)
        {
            if (current == null)
            {
                throw new ArgumentNullException(nameof(current));
            }
            if (currentPath == null)
            {
                throw new ArgumentNullException(nameof(currentPath));
            }

            List <string> watchedDirectories        = new List <string>();
            List <string> watchedFiles              = new List <string>();
            List <string> expectingDirectories      = new List <string>();
            List <string> expectingFiles            = new List <string>();
            List <DirectoryScanOptions> scanOptions = new List <DirectoryScanOptions>();
            StringBuilder pathBuilder = new StringBuilder(256);

            pathBuilder.Append(currentPath);
            Stack <IEnumerator <KeyValuePair <string, WatchingTreeItem> > > enumeratorStack = new Stack <IEnumerator <KeyValuePair <string, WatchingTreeItem> > >();
            Stack <WatchingTreeItem> parentStack = new Stack <WatchingTreeItem>();

            parentStack.Push(current);
            enumeratorStack.Push(current.Children.GetEnumerator());
            IEnumerator <KeyValuePair <string, WatchingTreeItem> > enumerator;
            WatchingTreeItem parent;
            WatchingTreeItem cur;
            int shrink;

            while (enumeratorStack.Count > 0)
            {
                enumerator = enumeratorStack.Peek();
                parent     = parentStack.Peek();
                if (enumerator.MoveNext())
                {
                    cur = enumerator.Current.Value;
                    enumeratorStack.Push(cur.Children.GetEnumerator());
                    parentStack.Push(cur);
                    if (pathBuilder.Length > 0)
                    {
                        pathBuilder.Append(Path.PathHelper.SEPERATOR);
                    }
                    pathBuilder.Append(cur.Name);
                }
                else
                {
                    if (parent.Data != null)
                    {
                        switch (parent.Data.WatchingStatus)
                        {
                        case ItemWatchingStatus.Watched:
                            if (parent.Type == StorageItems.ItemType.File)
                            {
                                watchedFiles.Add(pathBuilder.ToString());
                            }
                            else
                            {
                                watchedDirectories.Add(pathBuilder.ToString());
                            }
                            break;

                        case ItemWatchingStatus.Expected:
                            if (parent.Type == StorageItems.ItemType.File)
                            {
                                expectingFiles.Add(pathBuilder.ToString());
                            }
                            else
                            {
                                expectingDirectories.Add(pathBuilder.ToString());
                            }
                            break;

                        case ItemWatchingStatus.ScanNeeded:
                            scanOptions.Add(parent.Data.ScanOptions);
                            break;

                        case ItemWatchingStatus.None:
                        default:
                            break;
                        }
                    }
                    shrink = parent.Name.Length + 1;
                    if (shrink > pathBuilder.Length)
                    {
                        pathBuilder.Clear();
                    }
                    else
                    {
                        pathBuilder.Remove(pathBuilder.Length - shrink, shrink);
                    }
                    enumeratorStack.Pop();
                    parentStack.Pop();
                }
            }
            return(new WatcherCreationOptions(watchedDirectories, watchedFiles, expectingDirectories, expectingFiles, scanOptions));
        }