Exemple #1
0
 internal ApplicationDirectoryState(string relativePath, ApplicationDirectoryState parent)
 {
     RelativePath     = relativePath;
     ChildDirectories = new List <ApplicationDirectoryState>();
     Files            = new List <ApplicationFileState>();
     Parent           = parent;
 }
Exemple #2
0
        public void PruneEmptyDirectories(ApplicationDirectoryState working, ApplicationDirectoryState parent)
        {
            var dirs = working.ChildDirectories.ToArray();

            foreach (var applicationDirectoryState in dirs)
            {
                PruneEmptyDirectories(applicationDirectoryState, working);
            }

            if (working.ChildDirectories.Count == 0)
            {
                if (working.Files.Count == 0)
                {
                    parent?.RemoveDirectory(working);
                }
            }
        }
Exemple #3
0
        private void LoadDirectories()
        {
            if (Directory.Exists(_path))
            {
                var stack = new Stack <Tuple <string, ApplicationDirectoryState> >();

                var root = new ApplicationDirectoryState("/", null);
                var dirs = Directory.GetDirectories(_path);

                var parent = root;

                foreach (var dir in dirs)
                {
                    stack.Push(new Tuple <string, ApplicationDirectoryState>(dir, parent));
                }

                while (stack.Count > 0)
                {
                    var working      = stack.Pop();
                    var workingState = new ApplicationDirectoryState(working.Item1.Replace(_path, ""), working.Item2);
                    working.Item2.AddDirectory(workingState);

                    parent = workingState;                            // set new parent for children
                    dirs   = Directory.GetDirectories(working.Item1); // get children
                    foreach (var dir in dirs)
                    {
                        stack.Push(new Tuple <string, ApplicationDirectoryState>(dir, parent));
                    }

                    var files = Directory.GetFiles(working.Item1);
                    foreach (var file in files)
                    {
                        if (file.EndsWith(".bnk", true, CultureInfo.CurrentCulture))
                        {
                            var applicationFileState = ApplicationFileState.Create(file, _path);
                            workingState.AddFile(applicationFileState);
                            _files.Add(applicationFileState);
                        }
                    }
                }
                PruneEmptyDirectories(root, null);
                RootDirectory = root;
            }
        }
Exemple #4
0
 internal void RemoveDirectory(ApplicationDirectoryState state)
 {
     ChildDirectories.Remove(state);
 }
Exemple #5
0
 internal void AddDirectory(ApplicationDirectoryState state)
 {
     ChildDirectories.Add(state);
 }
Exemple #6
0
 internal ApplicationState(string version, List <ApplicationFileState> files, ApplicationDirectoryState rootDirectory)
 {
     AssemblyVersion = version;
     _files          = files;
     RootDirectory   = rootDirectory;
 }