70 lines
2.5 KiB
C#
70 lines
2.5 KiB
C#
using System;
|
|
using System.Diagnostics;
|
|
using System.Windows;
|
|
using Hardcodet.Wpf.TaskbarNotification;
|
|
|
|
namespace unison
|
|
{
|
|
public class SnapcastHandler
|
|
{
|
|
private readonly Process _snapcast = new();
|
|
public bool HasStarted { get; private set; }
|
|
|
|
public void OnConnectionChanged(object sender, EventArgs e)
|
|
{
|
|
if (Properties.Settings.Default.snapcast_startup)
|
|
{
|
|
MPDHandler mpd = (MPDHandler)Application.Current.Properties["mpd"];
|
|
if (mpd.IsConnected())
|
|
LaunchOrExit();
|
|
}
|
|
}
|
|
|
|
public void UpdateInterface()
|
|
{
|
|
TaskbarIcon Systray = (TaskbarIcon)Application.Current.Properties["systray"];
|
|
SystrayViewModel DataContext = Systray.DataContext as SystrayViewModel;
|
|
DataContext.OnPropertyChanged("SnapcastText");
|
|
|
|
Application.Current.Dispatcher.Invoke(() =>
|
|
{
|
|
MainWindow MainWin = (MainWindow)Application.Current.MainWindow;
|
|
MainWin.OnSnapcastChanged();
|
|
});
|
|
}
|
|
|
|
public void LaunchOrExit(bool ForceExit = false)
|
|
{
|
|
if (!HasStarted && !ForceExit)
|
|
{
|
|
MPDHandler mpd = (MPDHandler)Application.Current.Properties["mpd"];
|
|
|
|
_snapcast.StartInfo.FileName = Properties.Settings.Default.snapcast_path + @"\snapclient.exe";
|
|
_snapcast.StartInfo.Arguments = $"--host {mpd._ipAddress}";
|
|
_snapcast.StartInfo.CreateNoWindow = !Properties.Settings.Default.snapcast_window;
|
|
try
|
|
{
|
|
_snapcast.Start();
|
|
}
|
|
catch (Exception err)
|
|
{
|
|
MessageBox.Show($"[{unison.Resources.Resources.Snapcast_Popup1}]\n" +
|
|
$"{unison.Resources.Resources.Snapcast_Popup2} {err.Message}\n\n" +
|
|
$"{unison.Resources.Resources.Snapcast_Popup3} {Properties.Settings.Default.snapcast_path}\n" +
|
|
$"{unison.Resources.Resources.Snapcast_Popup4}",
|
|
"unison", MessageBoxButton.OK, MessageBoxImage.Error);
|
|
return;
|
|
}
|
|
HasStarted = true;
|
|
}
|
|
else if (HasStarted)
|
|
{
|
|
_snapcast.Kill();
|
|
HasStarted = false;
|
|
}
|
|
|
|
if (!ForceExit)
|
|
UpdateInterface();
|
|
}
|
|
}
|
|
} |