| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178 | using MediaBrowser.Controller;using MediaBrowser.Controller.Configuration;using MediaBrowser.Controller.Localization;using MediaBrowser.Model.Logging;using MediaBrowser.Server.Startup.Common.Browser;using System;using MonoMac.Foundation;using MonoMac.AppKit;namespace MediaBrowser.Server.Mac{	public class MenuBarIcon	{		private NSMenuItem browseMenuItem;		private NSMenuItem configureMenuItem;		private NSMenuItem developerMenuItem;		private NSMenuItem quitMenuItem;		private NSMenuItem githubMenuItem;		private NSMenuItem apiMenuItem;		private NSMenuItem communityMenuItem;		public static MenuBarIcon Instance;		public MenuBarIcon (ILogger logger)		{			Instance = this;			Logger = logger;		}		public void ShowIcon() {			NSApplication.SharedApplication.BeginInvokeOnMainThread (CreateMenus);		}		private void CreateMenus() {			CreateNsMenu ();		}		public void Localize() 		{			NSApplication.SharedApplication.BeginInvokeOnMainThread (() => {				var configManager = MainClass.AppHost.ServerConfigurationManager;				configManager.ConfigurationUpdated -= Instance_ConfigurationUpdated;				LocalizeText ();				configManager.ConfigurationUpdated += Instance_ConfigurationUpdated;			});		}		private NSStatusItem statusItem;		private void CreateNsMenu() {			var menu = new NSMenu ();			statusItem = NSStatusBar.SystemStatusBar.CreateStatusItem(30);			statusItem.Menu = menu;			statusItem.Image = NSImage.ImageNamed("statusicon");			statusItem.HighlightMode = true;			menu.RemoveAllItems ();			browseMenuItem = new NSMenuItem ("Browse Media Library", "b", delegate {				Browse (NSApplication.SharedApplication);			});			menu.AddItem (browseMenuItem);			configureMenuItem = new NSMenuItem ("Configure Media Browser", "c", delegate {				Configure (NSApplication.SharedApplication);			});			menu.AddItem (configureMenuItem);			developerMenuItem = new NSMenuItem ("Developer Resources");			menu.AddItem (developerMenuItem);			var developerMenu = new NSMenu ();			developerMenuItem.Submenu = developerMenu;			apiMenuItem = new NSMenuItem ("Api Documentation", "a", delegate {				ApiDocs (NSApplication.SharedApplication);			});			developerMenu.AddItem (apiMenuItem);			githubMenuItem = new NSMenuItem ("Github", "g", delegate {				Github (NSApplication.SharedApplication);			});			developerMenu.AddItem (githubMenuItem);			communityMenuItem = new NSMenuItem ("Visit Community", "v", delegate {				Community (NSApplication.SharedApplication);			});			menu.AddItem (communityMenuItem);			quitMenuItem = new NSMenuItem ("Quit", "q", delegate {				Quit (NSApplication.SharedApplication);			});			menu.AddItem (quitMenuItem);		}		private ILogger Logger{ get; set;}		private void Quit(NSObject sender)		{			MainClass.AppHost.Shutdown();		}		private void Community(NSObject sender)		{			BrowserLauncher.OpenCommunity(Logger);		}		private void Configure(NSObject sender)		{			BrowserLauncher.OpenDashboard(MainClass.AppHost, Logger);		}		private void Browse(NSObject sender)		{			BrowserLauncher.OpenWebClient(MainClass.AppHost, Logger);		}		private void Github(NSObject sender)		{			BrowserLauncher.OpenGithub(Logger);		}		private void ApiDocs(NSObject sender)		{			BrowserLauncher.OpenSwagger(MainClass.AppHost, Logger);		}		public void Terminate() 		{			NSApplication.SharedApplication.InvokeOnMainThread (() => NSApplication.SharedApplication.Terminate(NSApplication.SharedApplication));		}		private string _uiCulture;		/// <summary>		/// Handles the ConfigurationUpdated event of the Instance control.		/// </summary>		/// <param name="sender">The source of the event.</param>		/// <param name="e">The <see cref="EventArgs" /> instance containing the event data.</param>		void Instance_ConfigurationUpdated(object sender, EventArgs e)		{			var configManager = MainClass.AppHost.ServerConfigurationManager;			if (!string.Equals(configManager.Configuration.UICulture, _uiCulture,				StringComparison.OrdinalIgnoreCase))			{				LocalizeText();			}		}		private void LocalizeText()		{			var configManager = MainClass.AppHost.ServerConfigurationManager;			_uiCulture = configManager.Configuration.UICulture;			NSApplication.SharedApplication.BeginInvokeOnMainThread (LocalizeInternal);		}		private void LocalizeInternal() {			var localization = MainClass.AppHost.LocalizationManager;			quitMenuItem.Title = localization.GetLocalizedString("LabelExit");			communityMenuItem.Title = localization.GetLocalizedString("LabelVisitCommunity");			githubMenuItem.Title = localization.GetLocalizedString("LabelGithub");			apiMenuItem.Title = localization.GetLocalizedString("LabelApiDocumentation");			developerMenuItem.Title = localization.GetLocalizedString("LabelDeveloperResources");			browseMenuItem.Title = localization.GetLocalizedString("LabelBrowseLibrary");			configureMenuItem.Title = localization.GetLocalizedString("LabelConfigureMediaBrowser");		}	}}
 |