Lidarr/NzbDrone/SysTray/SysTrayApp.cs

121 lines
2.9 KiB
C#
Raw Normal View History

using System;
using System.ComponentModel;
using System.Windows.Forms;
using NzbDrone.Common;
using NzbDrone.Common.EnvironmentInfo;
using NzbDrone.Common.Processes;
using NzbDrone.Host.Owin;
namespace NzbDrone.SysTray
{
2013-05-10 23:53:50 +00:00
public interface ISystemTrayApp
{
2013-05-10 23:53:50 +00:00
void Start();
}
public class SystemTrayApp : Form, ISystemTrayApp
{
private readonly IProcessProvider _processProvider;
2013-02-19 01:57:08 +00:00
private readonly IHostController _hostController;
private readonly NotifyIcon _trayIcon = new NotifyIcon();
private readonly ContextMenu _trayMenu = new ContextMenu();
public SystemTrayApp(IProcessProvider processProvider, IHostController hostController)
{
_processProvider = processProvider;
2013-02-19 01:13:42 +00:00
_hostController = hostController;
}
2013-05-10 23:53:50 +00:00
public void Start()
{
Application.ThreadException += OnThreadException;
Application.ApplicationExit += OnApplicationExit;
_trayMenu.MenuItems.Add("Launch Browser", LaunchBrowser);
_trayMenu.MenuItems.Add("-");
_trayMenu.MenuItems.Add("Exit", OnExit);
2013-03-05 19:58:53 +00:00
_trayIcon.Text = String.Format("NzbDrone - {0}", BuildInfo.Version);
_trayIcon.Icon = Properties.Resources.NzbDroneIcon;
_trayIcon.ContextMenu = _trayMenu;
_trayIcon.Visible = true;
2013-05-10 23:53:50 +00:00
Application.Run(this);
}
protected override void OnClosing(CancelEventArgs e)
{
DisposeTrayIcon();
}
protected override void OnClosed(EventArgs e)
{
Console.WriteLine("Closing");
base.OnClosed(e);
}
protected override void OnLoad(EventArgs e)
{
Visible = false;
ShowInTaskbar = false;
base.OnLoad(e);
}
protected override void Dispose(bool isDisposing)
{
if (isDisposing)
{
_trayIcon.Dispose();
}
base.Dispose(isDisposing);
}
private void OnExit(object sender, EventArgs e)
{
Application.Exit();
}
private void LaunchBrowser(object sender, EventArgs e)
{
try
{
2013-08-14 05:20:24 +00:00
_processProvider.OpenDefaultBrowser(_hostController.AppUrl);
}
catch (Exception)
{
}
}
private void OnApplicationExit(object sender, EventArgs e)
{
DisposeTrayIcon();
}
private void OnThreadException(object sender, EventArgs e)
{
DisposeTrayIcon();
}
private void DisposeTrayIcon()
{
try
{
_trayIcon.Visible = false;
_trayIcon.Icon = null;
_trayIcon.Visible = false;
_trayIcon.Dispose();
}
catch (Exception e)
{
}
}
}
}