From 51a6ee565092ab02fcb7bf8c94d27d87488c0690 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Fri, 27 Sep 2013 13:04:35 -0400 Subject: [PATCH] implemented mono tray icon --- MediaBrowser.Mono.userprefs | 13 +-- .../MediaBrowser.Server.Mono.csproj | 3 + MediaBrowser.Server.Mono/Program.cs | 101 ++++++++++++++++-- MediaBrowser.Server.Mono/tray.png | Bin 0 -> 56208 bytes .../MainWindow.xaml.cs | 24 ++--- .../Native/BrowserLauncher.cs | 77 ++++++++++++- 6 files changed, 183 insertions(+), 35 deletions(-) create mode 100644 MediaBrowser.Server.Mono/tray.png diff --git a/MediaBrowser.Mono.userprefs b/MediaBrowser.Mono.userprefs index ba6fa903c2..88bdb45e72 100644 --- a/MediaBrowser.Mono.userprefs +++ b/MediaBrowser.Mono.userprefs @@ -1,18 +1,15 @@  - + - - - - - + + + + - - diff --git a/MediaBrowser.Server.Mono/MediaBrowser.Server.Mono.csproj b/MediaBrowser.Server.Mono/MediaBrowser.Server.Mono.csproj index 267dfb78ac..af3d72d695 100644 --- a/MediaBrowser.Server.Mono/MediaBrowser.Server.Mono.csproj +++ b/MediaBrowser.Server.Mono/MediaBrowser.Server.Mono.csproj @@ -127,5 +127,8 @@ + + PreserveNewest + \ No newline at end of file diff --git a/MediaBrowser.Server.Mono/Program.cs b/MediaBrowser.Server.Mono/Program.cs index d413041b52..ff3f2ae46a 100644 --- a/MediaBrowser.Server.Mono/Program.cs +++ b/MediaBrowser.Server.Mono/Program.cs @@ -4,6 +4,7 @@ using MediaBrowser.Common.Implementations.Updates; using MediaBrowser.Model.Logging; using MediaBrowser.Server.Implementations; using MediaBrowser.ServerApplication; +using MediaBrowser.ServerApplication.Native; using Microsoft.Win32; using System; using System.Diagnostics; @@ -11,6 +12,7 @@ using System.IO; using System.Threading; using System.Windows; using Gtk; +using Gdk; using System.Threading.Tasks; namespace MediaBrowser.Server.Mono @@ -25,6 +27,9 @@ namespace MediaBrowser.Server.Mono private static MainWindow _mainWindow; + // The tray Icon + private static StatusIcon trayIcon; + public static void Main (string[] args) { Application.Init (); @@ -46,9 +51,10 @@ namespace MediaBrowser.Server.Mono //_singleInstanceMutex = new Mutex(true, @"Local\" + runningPath, out createdNew); createdNew = true; + if (!createdNew) { - //_singleInstanceMutex = null; + _singleInstanceMutex = null; logger.Info("Shutting down because another instance of Media Browser Server is already running."); return; } @@ -67,7 +73,7 @@ namespace MediaBrowser.Server.Mono { logger.Info("Shutting down"); - //ReleaseMutex(logger); + ReleaseMutex(logger); _appHost.Dispose(); } @@ -95,11 +101,70 @@ namespace MediaBrowser.Server.Mono // TODO: Hide splash here _mainWindow = new MainWindow (); - _mainWindow.Show (); + // Creation of the Icon + // Creation of the Icon + trayIcon = new StatusIcon(new Pixbuf ("tray.png")); + trayIcon.Visible = true; + + // When the TrayIcon has been clicked. + trayIcon.Activate += delegate { }; + // Show a pop up menu when the icon has been right clicked. + trayIcon.PopupMenu += OnTrayIconPopup; + + // A Tooltip for the Icon + trayIcon.Tooltip = "Media Browser Server"; + + _mainWindow.ShowAll (); + _mainWindow.Visible = false; Application.Run (); } + // Create the popup menu, on right click. + static void OnTrayIconPopup (object o, EventArgs args) { + + Menu popupMenu = new Menu(); + + var menuItemBrowse = new ImageMenuItem ("Browse Library"); + menuItemBrowse.Image = new Gtk.Image(Stock.MediaPlay, IconSize.Menu); + popupMenu.Add(menuItemBrowse); + menuItemBrowse.Activated += delegate { + BrowserLauncher.OpenWebClient(_appHost.UserManager, _appHost.ServerConfigurationManager, _appHost, _logger); + }; + + var menuItemConfigure = new ImageMenuItem ("Configure Media Browser"); + menuItemConfigure.Image = new Gtk.Image(Stock.Edit, IconSize.Menu); + popupMenu.Add(menuItemConfigure); + menuItemConfigure.Activated += delegate { + BrowserLauncher.OpenDashboard(_appHost.UserManager, _appHost.ServerConfigurationManager, _appHost, _logger); + }; + + var menuItemApi = new ImageMenuItem ("View Api Docs"); + menuItemApi.Image = new Gtk.Image(Stock.Network, IconSize.Menu); + popupMenu.Add(menuItemApi); + menuItemApi.Activated += delegate { + BrowserLauncher.OpenSwagger(_appHost.ServerConfigurationManager, _appHost, _logger); + }; + + var menuItemCommunity = new ImageMenuItem ("Visit Community"); + menuItemCommunity.Image = new Gtk.Image(Stock.Help, IconSize.Menu); + popupMenu.Add(menuItemCommunity); + menuItemCommunity.Activated += delegate { BrowserLauncher.OpenCommunity(_logger); }; + + var menuItemGithub = new ImageMenuItem ("Visit Github"); + menuItemGithub.Image = new Gtk.Image(Stock.Network, IconSize.Menu); + popupMenu.Add(menuItemGithub); + menuItemGithub.Activated += delegate { BrowserLauncher.OpenGithub(_logger); }; + + var menuItemQuit = new ImageMenuItem ("Exit"); + menuItemQuit.Image = new Gtk.Image(Stock.Quit, IconSize.Menu); + popupMenu.Add(menuItemQuit); + menuItemQuit.Activated += delegate { Shutdown(); }; + + popupMenu.ShowAll(); + popupMenu.Popup(); + } + /// /// Handles the SessionEnding event of the SystemEvents control. /// @@ -174,20 +239,40 @@ namespace MediaBrowser.Server.Mono public static void Shutdown() { - _mainWindow.Hide (); - _mainWindow.Dispose (); + if (trayIcon != null) { + trayIcon.Visible = false; + trayIcon.Dispose (); + trayIcon = null; + } + + if (_mainWindow != null) { + _mainWindow.HideAll (); + _mainWindow.Dispose (); + _mainWindow = null; + } + Application.Quit (); } public static void Restart() { // Second instance will start first, so release the mutex and dispose the http server ahead of time - //ReleaseMutex (_logger); + ReleaseMutex (_logger); _appHost.Dispose(); - _mainWindow.Hide (); - _mainWindow.Dispose (); + if (trayIcon != null) { + trayIcon.Visible = false; + trayIcon.Dispose (); + trayIcon = null; + } + + if (_mainWindow != null) { + _mainWindow.HideAll (); + _mainWindow.Dispose (); + _mainWindow = null; + } + Application.Quit (); } } diff --git a/MediaBrowser.Server.Mono/tray.png b/MediaBrowser.Server.Mono/tray.png new file mode 100644 index 0000000000000000000000000000000000000000..7f11000363f4f1411a77bceda289ae198dbb3e50 GIT binary patch literal 56208 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 V|4m0Sc|-sJ002ovPDHLkV1oNhaPt5F literal 0 HcmV?d00001 diff --git a/MediaBrowser.ServerApplication/MainWindow.xaml.cs b/MediaBrowser.ServerApplication/MainWindow.xaml.cs index c22c35be8f..b1972fbdb4 100644 --- a/MediaBrowser.ServerApplication/MainWindow.xaml.cs +++ b/MediaBrowser.ServerApplication/MainWindow.xaml.cs @@ -189,19 +189,17 @@ namespace MediaBrowser.ServerApplication /// The instance containing the event data. void cmdApiDocs_Click(object sender, EventArgs e) { - BrowserLauncher.OpenUrl("http://localhost:" + _configurationManager.Configuration.HttpServerPortNumber + "/" + - _appHost.WebApplicationName + "/metadata", _logger); + BrowserLauncher.OpenStandardApiDocumentation(_configurationManager, _appHost, _logger); } void cmdSwaggerApiDocs_Click(object sender, EventArgs e) { - BrowserLauncher.OpenUrl("http://localhost:" + _configurationManager.Configuration.HttpServerPortNumber + "/" + - _appHost.WebApplicationName + "/swagger-ui/index.html", _logger); + BrowserLauncher.OpenSwagger(_configurationManager, _appHost, _logger); } void cmdGithubWiki_Click(object sender, EventArgs e) { - BrowserLauncher.OpenUrl("https://github.com/MediaBrowser/MediaBrowser/wiki", _logger); + BrowserLauncher.OpenGithub(_logger); } /// @@ -246,16 +244,7 @@ namespace MediaBrowser.ServerApplication /// The instance containing the event data. private void cmOpenDashboard_click(object sender, RoutedEventArgs e) { - var user = _userManager.Users.FirstOrDefault(u => u.Configuration.IsAdministrator); - OpenDashboard(user); - } - - /// - /// Opens the dashboard. - /// - private void OpenDashboard(User loggedInUser) - { - BrowserLauncher.OpenDashboardPage("dashboard.html", loggedInUser, _configurationManager, _appHost, _logger); + BrowserLauncher.OpenDashboard(_userManager, _configurationManager, _appHost, _logger); } /// @@ -265,7 +254,7 @@ namespace MediaBrowser.ServerApplication /// The instance containing the event data. private void cmVisitCT_click(object sender, RoutedEventArgs e) { - BrowserLauncher.OpenUrl("http://community.mediabrowser.tv/", _logger); + BrowserLauncher.OpenCommunity(_logger); } /// @@ -275,8 +264,7 @@ namespace MediaBrowser.ServerApplication /// The instance containing the event data. private void cmdBrowseLibrary_click(object sender, RoutedEventArgs e) { - var user = _userManager.Users.FirstOrDefault(u => u.Configuration.IsAdministrator); - BrowserLauncher.OpenDashboardPage("index.html", user, _configurationManager, _appHost, _logger); + BrowserLauncher.OpenWebClient(_userManager, _configurationManager, _appHost, _logger); } /// diff --git a/MediaBrowser.ServerApplication/Native/BrowserLauncher.cs b/MediaBrowser.ServerApplication/Native/BrowserLauncher.cs index e7d041d15e..8b0beab48c 100644 --- a/MediaBrowser.ServerApplication/Native/BrowserLauncher.cs +++ b/MediaBrowser.ServerApplication/Native/BrowserLauncher.cs @@ -1,13 +1,18 @@ using MediaBrowser.Controller; using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.Entities; +using MediaBrowser.Controller.Library; using MediaBrowser.Model.Logging; using System; using System.Diagnostics; +using System.Linq; using System.Windows.Forms; namespace MediaBrowser.ServerApplication.Native { + /// + /// Class BrowserLauncher + /// public static class BrowserLauncher { /// @@ -17,6 +22,7 @@ namespace MediaBrowser.ServerApplication.Native /// The logged in user. /// The configuration manager. /// The app host. + /// The logger. public static void OpenDashboardPage(string page, User loggedInUser, IServerConfigurationManager configurationManager, IServerApplicationHost appHost, ILogger logger) { var url = "http://localhost:" + configurationManager.Configuration.HttpServerPortNumber + "/" + @@ -25,11 +31,80 @@ namespace MediaBrowser.ServerApplication.Native OpenUrl(url, logger); } + /// + /// Opens the github. + /// + /// The logger. + public static void OpenGithub(ILogger logger) + { + OpenUrl("https://github.com/MediaBrowser/MediaBrowser", logger); + } + + /// + /// Opens the community. + /// + /// The logger. + public static void OpenCommunity(ILogger logger) + { + OpenUrl("http://community.mediabrowser.tv/", logger); + } + + /// + /// Opens the web client. + /// + /// The user manager. + /// The configuration manager. + /// The app host. + /// The logger. + public static void OpenWebClient(IUserManager userManager, IServerConfigurationManager configurationManager, IServerApplicationHost appHost, ILogger logger) + { + var user = userManager.Users.FirstOrDefault(u => u.Configuration.IsAdministrator); + OpenDashboardPage("index.html", user, configurationManager, appHost, logger); + } + + /// + /// Opens the dashboard. + /// + /// The user manager. + /// The configuration manager. + /// The app host. + /// The logger. + public static void OpenDashboard(IUserManager userManager, IServerConfigurationManager configurationManager, IServerApplicationHost appHost, ILogger logger) + { + var user = userManager.Users.FirstOrDefault(u => u.Configuration.IsAdministrator); + OpenDashboardPage("dashboard.html", user, configurationManager, appHost, logger); + } + + /// + /// Opens the swagger. + /// + /// The configuration manager. + /// The app host. + /// The logger. + public static void OpenSwagger(IServerConfigurationManager configurationManager, IServerApplicationHost appHost, ILogger logger) + { + OpenUrl("http://localhost:" + configurationManager.Configuration.HttpServerPortNumber + "/" + + appHost.WebApplicationName + "/swagger-ui/index.html", logger); + } + + /// + /// Opens the standard API documentation. + /// + /// The configuration manager. + /// The app host. + /// The logger. + public static void OpenStandardApiDocumentation(IServerConfigurationManager configurationManager, IServerApplicationHost appHost, ILogger logger) + { + OpenUrl("http://localhost:" + configurationManager.Configuration.HttpServerPortNumber + "/" + + appHost.WebApplicationName + "/metadata", logger); + } + /// /// Opens the URL. /// /// The URL. - public static void OpenUrl(string url, ILogger logger) + /// The logger. + private static void OpenUrl(string url, ILogger logger) { var process = new Process {