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