Esempio n. 1
0
        public IEnumerable <IHandle> Globber(IDirectoryHandle directory)
        {
            using var enumerator = _globs.GetEnumerator();

            IEnumerable <IDirectoryHandle> directories = new[] { directory };

            Globber?glob = null;

            if (enumerator.MoveNext())
            {
                while (true)
                {
                    glob = enumerator.Current !;
                    var next = enumerator.MoveNext();
                    if (!next)
                    {
                        break;
                    }

                    var globC = glob;
                    directories = directories.SelectMany(d => globC(d)).WhereCast <IHandle, IDirectoryHandle>();
                }
            }

            return(glob is null?directories.Cast <IHandle>() : directories.SelectMany(d => glob(d)));
        }
Esempio n. 2
0
        private Mod.Manifest CreateManifest(IDirectoryHandle resources)
        {
            if (resources[Filesystem.ManifestName] is not IFileHandle manifestFile)
            {
                throw new FileNotFoundException("Manifest file was not present.", Filesystem.ManifestName);
            }

            return(_manifestReader(manifestFile));
        }
Esempio n. 3
0
        public static IEnumerable <IHandle> Parent(IDirectoryHandle directory)
        {
            if (directory is not IChildDirectoryHandle child)
            {
                throw new InvalidOperationException("A parent glob was used on the root directory.");
            }

            yield return(child.Directory);
        }
Esempio n. 4
0
        public static IEnumerable <IHandle> Globstar(IDirectoryHandle directory)
        {
            yield return(directory);

            foreach (var child in directory.GetRecursive())
            {
                yield return(child);
            }
        }
Esempio n. 5
0
        /// <summary>
        ///		Creates an instance of <see cref="Mod"/>
        /// </summary>
        /// <param name="info"></param>
        /// <param name="resources"></param>
        public Mod(Manifest info, IDirectoryHandle resources)
        {
            var deliCfgPath = Path.Combine(Paths.ConfigPath, Constants.Metadata.Name);

            Directory.CreateDirectory(deliCfgPath);

            Info      = info;
            Resources = resources;
            Config    = new ConfigFile(Path.Combine(deliCfgPath, info.Guid + ".cfg"), false);
            Logger    = BepInEx.Logging.Logger.CreateLogSource(info.Name ?? info.Guid);
        }
Esempio n. 6
0
        /// <summary>
        ///		Enumerates over all the subdirectories contained by the directory, recursively
        /// </summary>
        public static IEnumerable <IChildDirectoryHandle> GetDirectoriesRecursive(this IDirectoryHandle @this)
        {
            foreach (var directory in @this.GetDirectories())
            {
                yield return(directory);

                foreach (var subdirectory in directory.GetDirectoriesRecursive())
                {
                    yield return(subdirectory);
                }
            }
        }
Esempio n. 7
0
        /// <summary>
        ///		Enumerates over all of the children of the directory, recursively
        /// </summary>
        public static IEnumerable <IChildHandle> GetRecursive(this IDirectoryHandle @this)
        {
            foreach (var child in @this)
            {
                if (child is IDirectoryHandle subdirectory)
                {
                    foreach (var subchild in subdirectory.GetRecursive())
                    {
                        yield return(subchild);
                    }
                }

                yield return(child);
            }
        }
Esempio n. 8
0
        /// <summary>
        ///		Enumerates over all the files contained by the directory, recursively
        /// </summary>
        public static IEnumerable <IFileHandle> GetFilesRecursive(this IDirectoryHandle @this)
        {
            foreach (var child in @this)
            {
                if (child is IDirectoryHandle subdirectory)
                {
                    foreach (var subfile in subdirectory.GetFilesRecursive())
                    {
                        yield return(subfile);
                    }
                }

                if (child is IFileHandle file)
                {
                    yield return(file);
                }
            }
        }
Esempio n. 9
0
 public static IEnumerable <IHandle> Current(IDirectoryHandle directory)
 {
     yield return(directory);
 }
Esempio n. 10
0
 public static IEnumerable <IHandle> Root(IDirectoryHandle directory)
 {
     yield return(directory.GetRoot());
 }
Esempio n. 11
0
 /// <summary>
 ///		Gets a file contained by the directory
 /// </summary>
 /// <param name="this"></param>
 /// <param name="name">The name of the file</param>
 public static IFileHandle?GetFile(this IDirectoryHandle @this, string name)
 {
     return(@this[name] as IFileHandle);
 }
Esempio n. 12
0
 /// <summary>
 ///		Enumerates over all the files contained by the directory
 /// </summary>
 public static IEnumerable <IFileHandle> GetFiles(this IDirectoryHandle @this)
 {
     return(@this.WhereCast <IChildHandle, IFileHandle>());
 }
Esempio n. 13
0
 /// <summary>
 ///		Gets a subdirectory contained by the directory
 /// </summary>
 /// <param name="this"></param>
 /// <param name="name">The name of the subdirectory</param>
 public static IChildDirectoryHandle?GetDirectory(this IDirectoryHandle @this, string name)
 {
     return(@this[name] as IChildDirectoryHandle);
 }
Esempio n. 14
0
 private Mod CreateMod(IDirectoryHandle resources)
 {
     return(new(CreateManifest(resources), resources));
 }
Esempio n. 15
0
 public IEnumerable <IHandle> Globber(IDirectoryHandle directory)
 {
     return(directory.Where(c => _regex.IsMatch(c.Name)).Cast <IHandle>());
 }
Esempio n. 16
0
 public static string Combine(IDirectoryHandle parent, string child)
 {
     return(parent.Path + "/" + child);
 }
Esempio n. 17
0
 /// <summary>
 ///		Gets the root directory of the VFS that the handle resides in. This could be the provided handle.
 /// </summary>
 public static IDirectoryHandle GetRoot(this IDirectoryHandle @this)
 {
     return(@this is IChildHandle child?child.GetRoot() : @this);
 }