Example #1
0
        /// <summary>
        /// Obtains the icon group resources from the provided root win32 resources directory.
        /// </summary>
        /// <param name="rootDirectory">The root resources directory to extract the icon group from.</param>
        /// <returns>The icon group resources, or <c>null</c> if none was found.</returns>
        /// <exception cref="ArgumentException">Occurs when the resource data is not readable.</exception>
        public static IconResource FromDirectory(IResourceDirectory rootDirectory)
        {
            var groupIconDirectory = (IResourceDirectory)rootDirectory.Entries[ResourceDirectoryHelper.IndexOfResourceDirectoryType(rootDirectory, ResourceType.GroupIcon)];

            var iconDirectory = (IResourceDirectory)rootDirectory.Entries[ResourceDirectoryHelper.IndexOfResourceDirectoryType(rootDirectory, ResourceType.Icon)];

            if (groupIconDirectory is null || iconDirectory is null)
            {
                return(null);
            }

            var result = new IconResource();

            foreach (var iconGroupResource in groupIconDirectory.Entries.OfType <IResourceDirectory>())
            {
                var dataEntry = iconGroupResource
                                ?.Entries
                                .OfType <IResourceData>()
                                .FirstOrDefault();

                if (dataEntry is null)
                {
                    return(null);
                }

                if (!dataEntry.CanRead)
                {
                    throw new ArgumentException("Icon group data is not readable.");
                }

                result.AddEntry(iconGroupResource.Id, IconGroupDirectory.FromReader(dataEntry.CreateReader(), iconDirectory));
            }

            return(result);
        }
Example #2
0
        /// <summary>
        /// Obtains the version info resource from the provided root win32 resources directory.
        /// </summary>
        /// <param name="rootDirectory">The root resources directory to extract the version info from.</param>
        /// <returns>The version info resource, or <c>null</c> if none was found.</returns>
        public static VersionInfoResource FromDirectory(IResourceDirectory rootDirectory)
        {
            var versionDirectory = (IResourceDirectory)rootDirectory.Entries[IndexOfVersionResourceDirectory(rootDirectory)];

            var categoryDirectory = versionDirectory
                                    ?.Entries
                                    .OfType <IResourceDirectory>()
                                    .FirstOrDefault();

            var dataEntry = categoryDirectory
                            ?.Entries
                            .OfType <IResourceData>()
                            .FirstOrDefault();

            if (dataEntry is null)
            {
                return(null);
            }

            if (dataEntry.CanRead)
            {
                return(FromReader(dataEntry.CreateReader()));
            }
            if (dataEntry.Contents is VersionInfoResource resource)
            {
                return(resource);
            }
            throw new ArgumentException("Version resource data is not readable.");
        }
 private IEnumerable <IResourceFile> FilterViewFiles(IResourceDirectory directory)
 {
     return(directory
            .GetFiles()
            .Where(f => !Contains(f.VirtualPath, "_ViewStart") &&
                   f.Name.EndsWith(FILE_EXTENSION, StringComparison.OrdinalIgnoreCase)));
 }
 private IEnumerable <IResourceFile> FilterChildDirectoryFiles(IResourceDirectory directory, string[] foldersToExclude)
 {
     return(directory
            .GetDirectories()
            .Where(d => !foldersToExclude.Any(f => d.VirtualPath.EndsWith(f, StringComparison.OrdinalIgnoreCase)))
            .SelectMany(f => FilterViewFiles(f)));
 }
        /// <summary>
        /// Adds a resource directory and all its sub entries to the buffer.
        /// </summary>
        /// <param name="directory">The directory to ad..</param>
        public void AddDirectory(IResourceDirectory directory)
        {
            DirectoryTable.AddEntry(directory);
            if (directory.Name != null)
            {
                NameTable.AddEntry(directory.Name);
            }

            foreach (var entry in directory.Entries)
            {
                AddEntry(entry);
            }
        }
        /// <summary>
        /// Finds the index of a resource directory of a given resource type.
        /// </summary>
        /// <param name="rootDirectory">The root resource directory where the search is started.</param>
        /// <param name="resourceType">The resource type to search for.</param>
        /// <returns>Returns the index of the found resource directory of the given resource type, otherwise -1.</returns>
        public static int IndexOfResourceDirectoryType(IResourceDirectory rootDirectory, ResourceType resourceType)
        {
            for (int i = 0; i < rootDirectory.Entries.Count; i++)
            {
                if (rootDirectory.Entries[i] is IResourceDirectory directory &&
                    directory.Type == resourceType)
                {
                    return(i);
                }
            }

            return(-1);
        }
Example #7
0
        private static void CheckResourceDirectory(IResourceDirectory directory)
        {
            //Loop trough all entries
            foreach (var entry in directory.Entries)
            {
                string displayName = directory.Name ?? "ID: " + directory.Id;

                if (displayName.Contains("AHK") || displayName.Contains("AUTOHOTKEY"))
                {
                    Console.WriteLine("Found AHK resource: {0}", displayName);
                    if (entry.IsData)
                    {
                        DumpData((IResourceData)entry);
                    }
                }

                if (entry.IsDirectory)
                {
                    CheckResourceDirectory((IResourceDirectory)entry);
                }
            }
        }
Example #8
0
        private IEnumerable <PageTemplateFile> SearchDirectoryForPageTemplateFiles(IResourceDirectory directory, string searchText)
        {
            foreach (var file in directory.GetFiles())
            {
                // filename contains the search text and is located in a 'PageTemplates' folder, but not a 'partials' folder and has the extension .cshtml
                if (Contains(file.Name, searchText) &&
                    !Contains(file.VirtualPath, PARTIALS_FOLDER_NAME) &&
                    !Contains(file.VirtualPath, "_ViewStart") &&
                    file.Name.EndsWith(FILE_EXTENSION, StringComparison.OrdinalIgnoreCase))
                {
                    yield return(MapPageTemplateFile(file));
                }
            }

            foreach (var childDirectory in directory.GetDirectories())
            {
                foreach (var file in SearchDirectoryForPageTemplateFiles(childDirectory, searchText))
                {
                    yield return(file);
                }
            }
        }
Example #9
0
        public ResourceFinder(IResourceDirectory <T> dir)
        {
            Contract.Requires(dir != null);

            Availables = dir.AvailableResources;
        }