using FModel.Properties; using System; using System.Diagnostics; using System.IO; using System.Security.AccessControl; using System.Security.Principal; namespace FModel { static class Utilities { /// /// OpenWithDefaultProgramAndNoFocus is used to automatically open sound file once they are converted /// /// path is the path to the converted sound file (in "Sounds" subfolder) public static void OpenWithDefaultProgramAndNoFocus(string path) { Process fileopener = new Process(); fileopener.StartInfo.FileName = "explorer"; fileopener.StartInfo.Arguments = "\"" + path + "\""; fileopener.Start(); } /// /// just create the default folders FModel needs to work /// public static void CreateDefaultFolders() { Directory.CreateDirectory(App.DefaultOutputPath + "\\Backup\\"); Directory.CreateDirectory(App.DefaultOutputPath + "\\Extracted\\"); Directory.CreateDirectory(App.DefaultOutputPath + "\\Icons\\"); Directory.CreateDirectory(App.DefaultOutputPath + "\\Sounds\\"); Directory.CreateDirectory(App.DefaultOutputPath + "\\LocRes\\"); } /// /// actually idk if it's useful, i added this for Admin windows account, when FModel can't even use CreateDefaultFolders /// /// public static void SetFolderPermission(string folderPath) { var directoryInfo = new DirectoryInfo(folderPath); var directorySecurity = directoryInfo.GetAccessControl(); var currentUserIdentity = WindowsIdentity.GetCurrent(); var fileSystemRule = new FileSystemAccessRule(currentUserIdentity.Name, FileSystemRights.Read, InheritanceFlags.ObjectInherit | InheritanceFlags.ContainerInherit, PropagationFlags.None, AccessControlType.Allow); directorySecurity.AddAccessRule(fileSystemRule); directoryInfo.SetAccessControl(directorySecurity); } /// /// By default the output folder is the Documents folder, however if user wanna change, once FModel restart SetOutputFolder is called /// public static void SetOutputFolder() { App.DefaultOutputPath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + "\\FModel"; //DOCUMENTS FOLDER BY DEFAULT if (string.IsNullOrEmpty(Settings.Default.ExtractOutput)) { Settings.Default.ExtractOutput = App.DefaultOutputPath; Settings.Default.Save(); } else { App.DefaultOutputPath = Settings.Default.ExtractOutput; } Directory.CreateDirectory(App.DefaultOutputPath); } /// /// /// public static void JohnWickCheck() { if (File.Exists(App.DefaultOutputPath + "\\john-wick-parse-modded.exe")) //2.0- { File.Delete(App.DefaultOutputPath + "\\john-wick-parse-modded.exe"); } if (File.Exists(App.DefaultOutputPath + "\\john-wick-parse_custom.exe")) //2.0+ { File.Delete(App.DefaultOutputPath + "\\john-wick-parse_custom.exe"); } } /// /// this should tell me if i can read the file, to avoid crash when a pak is being written by the launcher /// /// /// public static bool IsFileLocked(FileInfo file) { FileStream stream = null; try { stream = file.Open(FileMode.Open, FileAccess.Read, FileShare.None); } catch (IOException) { //the file is unavailable because it is: //still being written to //or being processed by another thread //or does not exist (has already been processed) return true; } finally { if (stream != null) stream.Close(); } //file is not locked return false; } } }