public static void SyncPreset(string presetName)
        {
            var metaLocation      = AppDomain.CurrentDomain.BaseDirectory;
            var gameDirectory     = GetSettings.Return(SettingTypes.GameLocation);
            var presetLocation    = Path.Combine(metaLocation, Settings.Default.PresetDirectory, presetName);
            var filterList        = File.ReadAllLines(Path.Combine(metaLocation, Settings.Default.FilterLocation));
            var presetFiles       = Directory.GetFiles(presetLocation).Where(x => new FileInfo(x).Name != "meta.ini").ToList();
            var presetDirectories = Directory.GetDirectories(presetLocation).ToList();
            var dateCreated       = Directory.GetCreationTime(presetLocation); // Make sure to set this back

            // Copy and replace all files from the game location into the preset location
            foreach (var item in filterList)
            {
                var tempPath = Path.Combine(gameDirectory, item);

                if (File.Exists(tempPath))
                {
                    File.Copy(Path.Combine(gameDirectory, item), Path.Combine(presetLocation, new FileInfo(item).Name), true);
                }

                if (Directory.Exists(tempPath))
                {
                    DirCopyTo(Path.Combine(gameDirectory, item), Path.Combine(presetLocation, new FileInfo(item).Name));
                }
            }
        }
        public static void CleanGameDirectory(bool removeSettingsValue = false)
        {
            var metaLocation  = AppDomain.CurrentDomain.BaseDirectory;
            var filterList    = File.ReadLines(Path.Combine(metaLocation, Settings.Default.FilterLocation));
            var gameDirectory = GetSettings.Return(SettingTypes.GameLocation);

            foreach (var item in filterList)
            {
                var tempPath = Path.Combine(gameDirectory, item);

                if (File.Exists(tempPath))
                {
                    File.Delete(tempPath);
                }

                if (Directory.Exists(tempPath))
                {
                    Directory.Delete(tempPath, true);
                }
            }

            if (removeSettingsValue)
            {
                SaveSettings.Save(SettingTypes.InstalledPreset, "");
            }
        }
        public static void InstallPreset(string presetName)
        {
            var metaLocation      = AppDomain.CurrentDomain.BaseDirectory;
            var gameDirectory     = GetSettings.Return(SettingTypes.GameLocation);
            var presetLocation    = Path.Combine(metaLocation, Settings.Default.PresetDirectory, presetName);
            var filterList        = File.ReadLines(Path.Combine(metaLocation, Settings.Default.FilterLocation));
            var presetFiles       = Directory.GetFiles(presetLocation).Where(x => new FileInfo(x).Name != "meta.ini").ToList();
            var presetDirectories = Directory.GetDirectories(presetLocation).ToList();

            // Clean the game directory of all existing files.
            foreach (var item in filterList)
            {
                var tempPath = Path.Combine(gameDirectory, item);

                if (File.Exists(tempPath))
                {
                    File.Delete(tempPath);
                }

                if (Directory.Exists(tempPath))
                {
                    Directory.Delete(tempPath, true);
                }
            }

            // Copy the selected files into the game directory.
            presetFiles.ForEach(x => File.Copy(x, Path.Combine(gameDirectory, new FileInfo(x).Name)));
            presetDirectories.ForEach(x => DirCopyTo(x, Path.Combine(gameDirectory, new DirectoryInfo(x).Name)));

            // Finally, save the preset.
            SaveSettings.Save(SettingTypes.InstalledPreset, presetName);
        }
        public static void UninstallPreset(string presetName)
        {
            var metaLocation   = AppDomain.CurrentDomain.BaseDirectory;
            var presetLocation = Path.Combine(metaLocation, Settings.Default.PresetDirectory, presetName);

            // Delete the directory the preset is located in
            DeleteDirectory(presetLocation);

            // Check to see if the END is set to be currently installed. If it is, remove it from the settings.
            if (presetName == GetSettings.Return(SettingTypes.InstalledPreset))
            {
                // Clean the game directory
                CleanGameDirectory();
                SaveSettings.Save(SettingTypes.InstalledPreset, "");
            }
        }
        public static List <PresetData> GetPresets()
        {
            var metaLocation     = AppDomain.CurrentDomain.BaseDirectory;
            var presetsDirectory = Path.Combine(metaLocation, Settings.Default.PresetDirectory);
            var directories      = Directory.GetDirectories(presetsDirectory).OrderBy(d => new FileInfo(d).CreationTime);
            var presetsList      = new List <PresetData>();

            foreach (var dir in directories.Where(x => File.Exists(Path.Combine(presetsDirectory, x, "meta.ini"))))
            {
                var presetName        = new DirectoryInfo(dir).Name;
                var metaFileLocation  = Path.Combine(presetsDirectory, presetName, "meta.ini");
                var metaFileContents  = File.ReadAllText(metaFileLocation);
                var jsonObject        = JObject.Parse(metaFileContents);
                var presetDescription = (string)jsonObject["Description"];
                var binaryVersion     = (string)jsonObject["BinaryVersion"];
                var isInstalled       = false;
                var iconType          = "Download";

                if (binaryVersion == "")
                {
                    binaryVersion = "None";
                }

                if (presetName == GetSettings.Return(SettingTypes.InstalledPreset))
                {
                    isInstalled = true;
                    iconType    = "FileRestore";
                }

                presetsList.Add(new PresetData()
                {
                    Name          = presetName,
                    Description   = presetDescription,
                    IsInstalled   = isInstalled,
                    BinaryVersion = binaryVersion,
                    IconType      = iconType
                });
            }

            return(presetsList.OrderByDescending(x => x.IsInstalled).ToList());
        }
        public static void SavePreset(string presetName, string presetDescription, bool usingGlobalIni)
        {
            var metaLocation        = AppDomain.CurrentDomain.BaseDirectory;
            var presetLocation      = Path.Combine(metaLocation, Settings.Default.PresetDirectory, presetName);
            var enbFilterLocation   = Path.Combine(metaLocation, Settings.Default.FilterLocation);
            var gameDirectory       = GetSettings.Return(SettingTypes.GameLocation);
            var globalIniLocation   = Path.Combine(metaLocation, Settings.Default.GlobalIniLocation);
            var filteredFiles       = new List <string>();
            var filteredDirectories = new List <string>();
            var binaryVersion       = "";

            // Check to see if the presetDirectory exists. If it does, delete it and create a new one.
            if (Directory.Exists(presetLocation))
            {
                DeleteDirectory(presetLocation);
            }

            while (!Directory.Exists(presetLocation))
            {
                Directory.CreateDirectory(presetLocation);
            }

            // Get the list of enbFilters
            var enbFilter = File.ReadAllLines(enbFilterLocation);

            foreach (var filter in enbFilter)
            {
                if (File.Exists(Path.Combine(gameDirectory, filter)))
                {
                    Debug.WriteLine($"File found: {filter}");
                    filteredFiles.Add(Path.Combine(gameDirectory, filter));
                }

                if (Directory.Exists(Path.Combine(gameDirectory, filter)))
                {
                    Debug.WriteLine($"Directory found: {filter}");
                    filteredDirectories.Add(Path.Combine(gameDirectory, filter));
                }
            }

            // Move all of the files
            filteredFiles.ForEach(x => File.Move(x, Path.Combine(presetLocation, new FileInfo(x).Name)));
            filteredDirectories.ForEach(x => DirMoveTo(x, presetLocation));

            // If the global ini is enabled, move that into the preset directory.
            if (usingGlobalIni)
            {
                var enblocalLocation = Path.Combine(presetLocation, "enblocal.ini");

                if (File.Exists(enblocalLocation))
                {
                    File.Delete(enblocalLocation);
                }

                File.Copy(globalIniLocation, enblocalLocation);
            }

            // Check for a binary version, and identify the version.
            foreach (var file in filteredFiles)
            {
                if (new FileInfo(file).Name != "d3d9.dll")
                {
                    continue;
                }
                var tempFilePath = Path.Combine(presetLocation, new FileInfo(file).Name);
                binaryVersion = new BinaryManager().GetBinaryVersion(tempFilePath);
            }

            // Create a JSON file containing the description and ENB binary version
            var metaFileLocation = Path.Combine(presetLocation, "meta.ini");

            File.Create(metaFileLocation).Dispose();
            var jsonObject = new JObject()
            {
                new JProperty("Description", presetDescription),
                new JProperty("BinaryVersion", binaryVersion)
            };

            using (var file = File.CreateText(metaFileLocation))
                using (var writer = new JsonTextWriter(file))
                {
                    jsonObject.WriteTo(writer);
                }
        }