Quasar/Quasar.Server/Models/Settings.cs

226 lines
5.9 KiB
C#

using System.IO;
using System.Windows.Forms;
using System.Xml;
using System.Xml.XPath;
namespace Quasar.Server.Models
{
public static class Settings
{
private static readonly string SettingsPath = Path.Combine(Application.StartupPath, "settings.xml");
public static readonly string CertificatePath = Path.Combine(Application.StartupPath, "quasar.p12");
public static ushort ListenPort
{
get
{
return ushort.Parse(ReadValueSafe("ListenPort", "4782"));
}
set
{
WriteValue("ListenPort", value.ToString());
}
}
public static bool IPv6Support
{
get
{
return bool.Parse(ReadValueSafe("IPv6Support", "False"));
}
set
{
WriteValue("IPv6Support", value.ToString());
}
}
public static bool AutoListen
{
get
{
return bool.Parse(ReadValueSafe("AutoListen", "False"));
}
set
{
WriteValue("AutoListen", value.ToString());
}
}
public static bool ShowPopup
{
get
{
return bool.Parse(ReadValueSafe("ShowPopup", "False"));
}
set
{
WriteValue("ShowPopup", value.ToString());
}
}
public static bool UseUPnP
{
get
{
return bool.Parse(ReadValueSafe("UseUPnP", "False"));
}
set
{
WriteValue("UseUPnP", value.ToString());
}
}
public static bool ShowToolTip
{
get
{
return bool.Parse(ReadValueSafe("ShowToolTip", "False"));
}
set
{
WriteValue("ShowToolTip", value.ToString());
}
}
public static bool EnableNoIPUpdater
{
get
{
return bool.Parse(ReadValueSafe("EnableNoIPUpdater", "False"));
}
set
{
WriteValue("EnableNoIPUpdater", value.ToString());
}
}
public static string NoIPHost
{
get
{
return ReadValueSafe("NoIPHost");
}
set
{
WriteValue("NoIPHost", value);
}
}
public static string NoIPUsername
{
get
{
return ReadValueSafe("NoIPUsername");
}
set
{
WriteValue("NoIPUsername", value);
}
}
public static string NoIPPassword
{
get
{
return ReadValueSafe("NoIPPassword");
}
set
{
WriteValue("NoIPPassword", value);
}
}
public static string SaveFormat
{
get
{
return ReadValueSafe("SaveFormat", "APP - URL - USER:PASS");
}
set
{
WriteValue("SaveFormat", value);
}
}
public static ushort ReverseProxyPort
{
get
{
return ushort.Parse(ReadValueSafe("ReverseProxyPort", "3128"));
}
set
{
WriteValue("ReverseProxyPort", value.ToString());
}
}
private static string ReadValue(string pstrValueToRead)
{
try
{
XPathDocument doc = new XPathDocument(SettingsPath);
XPathNavigator nav = doc.CreateNavigator();
XPathExpression expr = nav.Compile(@"/settings/" + pstrValueToRead);
XPathNodeIterator iterator = nav.Select(expr);
while (iterator.MoveNext())
{
return iterator.Current.Value;
}
return string.Empty;
}
catch
{
return string.Empty;
}
}
private static string ReadValueSafe(string pstrValueToRead, string defaultValue = "")
{
string value = ReadValue(pstrValueToRead);
return (!string.IsNullOrEmpty(value)) ? value: defaultValue;
}
private static void WriteValue(string pstrValueToRead, string pstrValueToWrite)
{
try
{
XmlDocument doc = new XmlDocument();
if (File.Exists(SettingsPath))
{
using (var reader = new XmlTextReader(SettingsPath))
{
doc.Load(reader);
}
}
else
{
var dir = Path.GetDirectoryName(SettingsPath);
if (!Directory.Exists(dir))
{
Directory.CreateDirectory(dir);
}
doc.AppendChild(doc.CreateElement("settings"));
}
XmlElement root = doc.DocumentElement;
XmlNode oldNode = root.SelectSingleNode(@"/settings/" + pstrValueToRead);
if (oldNode == null) // create if not exist
{
oldNode = doc.SelectSingleNode("settings");
oldNode.AppendChild(doc.CreateElement(pstrValueToRead)).InnerText = pstrValueToWrite;
doc.Save(SettingsPath);
return;
}
oldNode.InnerText = pstrValueToWrite;
doc.Save(SettingsPath);
}
catch
{
}
}
}
}