public static SysLinuxConfigFile Create(string filename, SysLinuxAppearance sysLinuxAppearance) { var configFile = new SysLinuxConfigFile(filename, sysLinuxAppearance); configFile.CreateNew(); return(configFile); }
public static SysLinuxConfigFile OpenFile(string filename, SysLinuxAppearance sysLinuxAppearance) { var configFile = new SysLinuxConfigFile(filename, sysLinuxAppearance); configFile.Load(File.ReadAllText(filename)); return(configFile); }
public static bool TryParse(string filename, out SysLinuxConfigFile sysLinuxConfigFile) { var sysLinuxConfig = new SysLinuxConfigFile(filename, null); if (sysLinuxConfig.LoadConfig(File.ReadAllText(filename), filename)) { sysLinuxConfigFile = sysLinuxConfig; return(true); } sysLinuxConfigFile = null; return(false); }
public void CreateBootStick(Logger logger) { var tempDirectory = FileSystemExtensions.MakeDirectoryUnique(Path.Combine(Path.GetTempPath(), "GodlikeStick")); logger.Status("Create temp directory"); tempDirectory.Create(); try { var targetDirectory = new DirectoryInfo(Path.Combine(_drive.RootDirectory.FullName, DriveDirectory)); if (!targetDirectory.Exists) { logger.Status($"Create /{DriveDirectory} directory on drive"); targetDirectory.Create(); } if (!File.Exists(Path.Combine(targetDirectory.FullName, "libcom32.c32"))) { InstallSysLinux(_drive, tempDirectory, logger); } logger.Status("Write syslinux config"); var sysLinuxFile = new FileInfo(Path.Combine(targetDirectory.FullName, "syslinux.cfg")); if (sysLinuxFile.Exists) { SysLinuxConfigFile = SysLinuxConfigFile.OpenFile(sysLinuxFile.FullName, _sysLinuxAppearance); } else { SysLinuxConfigFile = SysLinuxConfigFile.Create(sysLinuxFile.FullName, _sysLinuxAppearance); } logger.Status("Copy background.png"); var backgroundFilePath = Path.Combine(targetDirectory.FullName, "background.png"); if (!string.IsNullOrEmpty(_sysLinuxAppearance.ScreenBackground) && File.Exists(_sysLinuxAppearance.ScreenBackground)) { File.Copy(_sysLinuxAppearance.ScreenBackground, backgroundFilePath); } else if (!File.Exists(backgroundFilePath)) { //only copy if the file does not exist because the user could have already installed syslinux with a different background image WpfUtilities.WriteResourceToFile( new Uri("pack://application:,,,/Resources/SysLinuxFiles/background.png"), backgroundFilePath); } var randomFiles = new[] { "chain.c32", "libcom32.c32", "libutil.c32", "memdisk", "menu.c32", "vesamenu.c32", "grub.exe" }; foreach (var randomFile in randomFiles) { var resource = Application.GetResourceStream( new Uri($"pack://application:,,,/Resources/SysLinuxFiles/{randomFile}")); if (resource == null) { throw new FileNotFoundException(); } var targetFile = Path.Combine(targetDirectory.FullName, randomFile); if (File.Exists(targetFile)) { byte[] resourceHash; byte[] fileHash; using (var md5 = new MD5CryptoServiceProvider()) { resourceHash = md5.ComputeHash(resource.Stream); using (var fs = new FileStream(targetFile, FileMode.Open, FileAccess.Read)) fileHash = md5.ComputeHash(fs); } if (resourceHash.SequenceEqual(fileHash)) { logger.Status($"{randomFile} already exists"); continue; } } logger.Status($"Write \"{Path.Combine(targetDirectory.FullName, randomFile)}\""); WpfUtilities.WriteResourceToFile( new Uri($"pack://application:,,,/Resources/SysLinuxFiles/{randomFile}"), Path.Combine(targetDirectory.FullName, randomFile)); } } finally { logger.Status("Delete temp directory"); tempDirectory.Delete(true); } }