using System; using System.Collections; using System.Text; using System.Windows.Forms; using System.IO; using System.Text.RegularExpressions; namespace Handbrake.Functions { public class Presets { ArrayList presets = new ArrayList(); ArrayList user_presets = new ArrayList(); /// /// 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) { ArrayList newPresets = new ArrayList(); ArrayList newUserPresets = new ArrayList(); // 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(); } /// /// Count the number of presets there are. /// /// Integer public int count() { int c = presets.Count; int d = user_presets.Count; return c + d; } /// /// Get an Arraylist of all the preset names. /// Includes both built in and user presets. /// /// Arraylist of preset names public ArrayList getPresetNames() { ArrayList names = new ArrayList(); // 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]); } // 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(); MessageBox.Show("Your profile has been sucessfully added.", "Status", MessageBoxButtons.OK, MessageBoxIcon.Asterisk); } 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 == "") 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; } } }