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;
}
}
}