using System.ComponentModel; using System.Diagnostics; using System.Globalization; using System.IO; using System.Reflection; using System.Text.RegularExpressions; using System.Windows; using System.Windows.Input; using System.Windows.Interop; using System.Windows.Navigation; namespace unison { public partial class Settings : Window { private readonly string defaultSnapcastPath = "snapclient_0.25.0-1_win64"; private readonly string defaultSnapcastPort = "1704"; public static string GetVersion => Assembly.GetEntryAssembly().GetCustomAttribute().InformationalVersion; public static string GetLicense { get { try { StreamReader Reader = new("LICENSE"); string file = ""; file += Reader.ReadToEnd(); return file; } catch (IOException e) { return e.Message; } } } public Settings() { InitHwnd(); InitializeComponent(); DataContext = this; WindowState = WindowState.Minimized; MpdHost.Text = Properties.Settings.Default.mpd_host; MpdPort.Text = Properties.Settings.Default.mpd_port.ToString(); MpdPassword.Text = Properties.Settings.Default.mpd_password; SnapcastStartup.IsChecked = Properties.Settings.Default.snapcast_startup; SnapcastWindow.IsChecked = Properties.Settings.Default.snapcast_window; SnapcastPath.Text = Properties.Settings.Default.snapcast_path; SnapcastPort.Text = Properties.Settings.Default.snapcast_port.ToString(); VolumeOffset.Text = Properties.Settings.Default.volume_offset.ToString(); } private void NumberValidationTextBox(object sender, TextCompositionEventArgs e) { Regex regex = new Regex("[^0-9]+"); e.Handled = regex.IsMatch(e.Text); } private void Hyperlink_RequestNavigate(object sender, RequestNavigateEventArgs e) { ProcessStartInfo psi = new(e.Uri.AbsoluteUri); psi.UseShellExecute = true; Process.Start(psi); e.Handled = true; } public void UpdateConnectionStatus() { MPDHandler mpd = (MPDHandler)Application.Current.Properties["mpd"]; if (mpd.IsConnected()) ConnectionStatus.Text = "Connected to MPD " + mpd.GetVersion() + "."; else ConnectionStatus.Text = "Not connected."; } private void MPDConnect_Clicked(object sender, RoutedEventArgs e) { SaveSettings(); ConnectionStatus.Text = "Connecting..."; MPDHandler mpd = (MPDHandler)Application.Current.Properties["mpd"]; mpd.Connect(); } private void SnapcastReset_Clicked(object sender, RoutedEventArgs e) { SnapcastPath.Text = defaultSnapcastPath; SnapcastPort.Text = defaultSnapcastPort; } public void SaveSettings() { Properties.Settings.Default.mpd_host = MpdHost.Text; Properties.Settings.Default.mpd_port = int.Parse(MpdPort.Text, CultureInfo.InvariantCulture); Properties.Settings.Default.mpd_password = MpdPassword.Text; Properties.Settings.Default.snapcast_startup = (bool)SnapcastStartup.IsChecked; Properties.Settings.Default.snapcast_window = (bool)SnapcastWindow.IsChecked; Properties.Settings.Default.snapcast_path = SnapcastPath.Text; Properties.Settings.Default.snapcast_port = int.Parse(SnapcastPort.Text, CultureInfo.InvariantCulture); Properties.Settings.Default.volume_offset = int.Parse(VolumeOffset.Text, CultureInfo.InvariantCulture); Properties.Settings.Default.Save(); } private void Window_Closing(object sender, CancelEventArgs e) { e.Cancel = true; SaveSettings(); WindowState = WindowState.Minimized; Hide(); } public void InitHwnd() { WindowInteropHelper helper = new(this); helper.EnsureHandle(); } } }