mirror of
https://github.com/jellyfin/jellyfin.git
synced 2024-11-16 02:18:54 -07:00
179 lines
4.9 KiB
C#
179 lines
4.9 KiB
C#
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");
|
|
}
|
|
}
|
|
}
|
|
|