using System; using System.Drawing; using System.Linq; using System.Reflection; using System.Windows.Forms; namespace NzbDrone.Common.SysTray { public class SysTrayApp : Form { private readonly ConfigFileProvider _configFileProvider; private readonly ProcessProvider _processProvider; private readonly IISProvider _iisProvider; private readonly EnvironmentProvider _environmentProvider; private readonly NotifyIcon _trayIcon = new NotifyIcon(); private readonly ContextMenu _trayMenu = new ContextMenu(); public SysTrayApp(ConfigFileProvider configFileProvider, ProcessProvider processProvider, IISProvider iisProvider, EnvironmentProvider environmentProvider) { _configFileProvider = configFileProvider; _processProvider = processProvider; _iisProvider = iisProvider; _environmentProvider = environmentProvider; } public SysTrayApp() { } public void Create() { _trayMenu.MenuItems.Add("Launch Browser", LaunchBrowser); _trayMenu.MenuItems.Add("-"); _trayMenu.MenuItems.Add("Exit", OnExit); _trayIcon.Text = String.Format("NzbDrone - {0}", _environmentProvider.Version); _trayIcon.Icon = new Icon(Assembly.GetEntryAssembly().GetManifestResourceStream("NzbDrone.NzbDrone.ico")); _trayIcon.ContextMenu = _trayMenu; _trayIcon.Visible = true; } 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) { _processProvider.Start(_iisProvider.AppUrl); } } }