namespace Unosquare.RaspberryIO.Resources
{
using Native;
using Swan;
using System;
using System.Collections.ObjectModel;
using System.IO;
///
/// Provides access to embedded assembly files
///
internal static class EmbeddedResources
{
///
/// Initializes static members of the class.
///
static EmbeddedResources()
{
ResourceNames =
new ReadOnlyCollection(typeof(EmbeddedResources).Assembly().GetManifestResourceNames());
}
///
/// Gets the resource names.
///
///
/// The resource names.
///
public static ReadOnlyCollection ResourceNames { get; }
///
/// Extracts all the file resources to the specified base path.
///
public static void ExtractAll()
{
var basePath = Runtime.EntryAssemblyDirectory;
var executablePermissions = Standard.StringToInteger("0777", IntPtr.Zero, 8);
foreach (var resourceName in ResourceNames)
{
var filename = resourceName.Substring($"{typeof(EmbeddedResources).Namespace}.".Length);
var targetPath = Path.Combine(basePath, filename);
if (File.Exists(targetPath)) return;
using (var stream = typeof(EmbeddedResources).Assembly()
.GetManifestResourceStream($"{typeof(EmbeddedResources).Namespace}.{filename}"))
{
using (var outputStream = File.OpenWrite(targetPath))
{
stream?.CopyTo(outputStream);
}
try
{
Standard.Chmod(targetPath, (uint)executablePermissions);
}
catch
{
/* Ignore */
}
}
}
}
}
}