/// <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); }
/// <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); }
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); } } }
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); } } }
public ResourceFinder(IResourceDirectory <T> dir) { Contract.Requires(dir != null); Availables = dir.AvailableResources; }