using System; using System.Collections.Generic; using System.Text; using System.Windows.Forms; using System.IO; using System.Text.RegularExpressions; namespace Handbrake.Functions { public class Presets { List presets = new List(); List user_presets = new List(); /// /// Add a new preset to the system /// /// String, The name of the new preset /// String, the CLI query for the new preset public Boolean addPreset(string presetName, string query) { if (checkIfPresetExists(presetName) == false) { String preset = "+ " + presetName + ": " + query; user_presets.Add(preset); addPresetToFile(preset); return true; } else { MessageBox.Show("Sorry, that preset name already exists. Please choose another!", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning); return false; } } /// /// Remove a preset with a given name from either the built in or user preset list. /// /// String, the preset name public void remove(string name) { List newPresets = new List(); List newUserPresets = new List(); // Built In Presets foreach (string item in presets) { string x = item.Replace("+ ", ""); Regex r = new Regex("(: )"); // Split on hyphens. string[] presetName = r.Split(x); if (presetName[0] != name) newPresets.Add(item); } // User Presets foreach (string item in user_presets) { string x = item.Replace("+ ", ""); Regex r = new Regex("(: )"); // Split on hyphens. string[] presetName = r.Split(x); if (presetName[0] != name) newUserPresets.Add(item); } // Now, Update the presets.dat and user_presets.dat file with the new items. string userPresets = Application.StartupPath.ToString() + "\\user_presets.dat"; string presetsFile = Application.StartupPath.ToString() + "\\presets.dat"; // Rebuild the presets.dat file StreamWriter line = new StreamWriter(presetsFile); foreach (string item in newPresets) { line.WriteLine("+ " + item); } line.Close(); line.Dispose(); // Rebuild the user_presets.dat file line = new StreamWriter(userPresets); foreach (string item in newUserPresets) { line.WriteLine("+ " + item); } line.Close(); line.Dispose(); } /// /// Get a List of all the built in preset names. /// /// List of preset names public List getBuildInPresetNames() { List names = new List(); // Built In Presets foreach (string item in presets) { string x = item.Replace("+ ", ""); Regex r = new Regex("(: )"); // Split on hyphens. string[] presetName = r.Split(x); names.Add(presetName[0]); } return names; } /// /// Get a List of all the User preset names. /// /// List of preset names public List getUserPresetNames() { List names = new List(); // User Presets foreach (string item in user_presets) { string x = item.Replace("+ ", ""); Regex r = new Regex("(: )"); string[] presetName = r.Split(x); names.Add(presetName[0]); } return names; } /// /// Return the CLI query for a preset name given in name /// /// String, The preset's name /// String, the CLI query for the given preset name public string getCliForPreset(string name) { // Built In Presets foreach (string item in presets) { string x = item.Replace("+ ", ""); Regex r = new Regex("(: )"); // Split on hyphens. string[] presetName = r.Split(x); if (presetName[0] == name) return presetName[2]; } // User Presets foreach (string item in user_presets) { string x = item.Replace("+ ", ""); Regex r = new Regex("(: )"); // Split on hyphens. string[] presetName = r.Split(x); if (presetName[0] == name) return presetName[2]; } return null; } /// /// Load in the preset data from presets.dat and user_presets.dat /// Load it into the 2 arraylist's presets and user_presets /// public void loadPresetFiles() { // First clear the presets arraylists presets.Clear(); user_presets.Clear(); // Load in the built in presets from presets.dat // We'll store them in the array in the format: presetName: ClI Query string filePath = Application.StartupPath.ToString() + "\\presets.dat"; if (File.Exists(filePath)) { StreamReader presetInput = new StreamReader(filePath); while (!presetInput.EndOfStream) { if ((char)presetInput.Peek() == '+') presets.Add(presetInput.ReadLine().Replace("+ ", "")); else presetInput.ReadLine(); } presetInput.Close(); presetInput.Dispose(); } // Load in the users presets from user_presets.dat filePath = Application.StartupPath.ToString() + "\\user_presets.dat"; if (File.Exists(filePath)) { StreamReader presetInput = new StreamReader(filePath); while (!presetInput.EndOfStream) { if ((char)presetInput.Peek() == '+') user_presets.Add(presetInput.ReadLine().Replace("+ ", "")); else presetInput.ReadLine(); } presetInput.Close(); presetInput.Dispose(); } } // Add a single preset to user_presets.dat private void addPresetToFile(string preset) { string userPresets = Application.StartupPath.ToString() + "\\user_presets.dat"; try { // Create a StreamWriter and open the file StreamWriter line = File.AppendText(userPresets); // Generate and write the preset string to the file line.WriteLine(preset); // close the stream line.Close(); line.Dispose(); } catch (Exception exc) { MessageBox.Show("Unable to write to the file. Please make sure the location has the correct permissions for file writing.\n Error Information: \n\n" + exc.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Hand); } } // Check if a preset already exists in either the built in or user presets private Boolean checkIfPresetExists(string name) { if (name == string.Empty) return true; // Built In Presets foreach (string item in presets) { string x = item.Replace("+ ", ""); Regex r = new Regex("(: )"); // Split on hyphens. string[] presetName = r.Split(x); if (presetName[0] == name) return true; } // User Presets foreach (string item in user_presets) { string x = item.Replace("+ ", ""); Regex r = new Regex("(: )"); // Split on hyphens. string[] presetName = r.Split(x); if (presetName[0] == name) return true; } return false; } } }