From ce26d502a4095c995150a53e5a17b89b59885308 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Fri, 15 Sep 2017 02:31:28 -0400 Subject: [PATCH] allow plugins to inject menus --- .../Api/ConfigurationPageInfo.cs | 14 ++++++++++-- .../Api/DashboardService.cs | 22 ++++++++++++------- 2 files changed, 26 insertions(+), 10 deletions(-) diff --git a/MediaBrowser.WebDashboard/Api/ConfigurationPageInfo.cs b/MediaBrowser.WebDashboard/Api/ConfigurationPageInfo.cs index 33289e76c8..b69c14feeb 100644 --- a/MediaBrowser.WebDashboard/Api/ConfigurationPageInfo.cs +++ b/MediaBrowser.WebDashboard/Api/ConfigurationPageInfo.cs @@ -11,6 +11,9 @@ namespace MediaBrowser.WebDashboard.Api /// /// The name. public string Name { get; set; } + public bool EnableInMainMenu { get; set; } + + public string DisplayName { get; set; } /// /// Gets the type of the configuration page. @@ -27,15 +30,22 @@ namespace MediaBrowser.WebDashboard.Api public ConfigurationPageInfo(IPluginConfigurationPage page) { Name = page.Name; + ConfigurationPageType = page.ConfigurationPageType; - // Don't use "N" because it needs to match Plugin.Id - PluginId = page.Plugin.Id.ToString(); + if (page.Plugin != null) + { + DisplayName = page.Plugin.Name; + // Don't use "N" because it needs to match Plugin.Id + PluginId = page.Plugin.Id.ToString(); + } } public ConfigurationPageInfo(IPlugin plugin, PluginPageInfo page) { Name = page.Name; + EnableInMainMenu = page.EnableInMainMenu; + DisplayName = string.IsNullOrWhiteSpace(page.DisplayName) ? plugin.Name : page.DisplayName; // Don't use "N" because it needs to match Plugin.Id PluginId = plugin.Id.ToString(); diff --git a/MediaBrowser.WebDashboard/Api/DashboardService.cs b/MediaBrowser.WebDashboard/Api/DashboardService.cs index d4d0e281e7..47662b5091 100644 --- a/MediaBrowser.WebDashboard/Api/DashboardService.cs +++ b/MediaBrowser.WebDashboard/Api/DashboardService.cs @@ -32,6 +32,7 @@ namespace MediaBrowser.WebDashboard.Api /// /// The type of the page. public ConfigurationPageType? PageType { get; set; } + public bool? EnableInMainMenu { get; set; } } /// @@ -221,25 +222,20 @@ namespace MediaBrowser.WebDashboard.Api /// System.Object. public object Get(GetDashboardConfigurationPages request) { - const string unavilableMessage = "The server is still loading. Please try again momentarily."; + const string unavailableMessage = "The server is still loading. Please try again momentarily."; var instance = ServerEntryPoint.Instance; if (instance == null) { - throw new InvalidOperationException(unavilableMessage); + throw new InvalidOperationException(unavailableMessage); } var pages = instance.PluginConfigurationPages; if (pages == null) { - throw new InvalidOperationException(unavilableMessage); - } - - if (request.PageType.HasValue) - { - pages = pages.Where(p => p.ConfigurationPageType == request.PageType.Value).ToList(); + throw new InvalidOperationException(unavailableMessage); } // Don't allow a failing plugin to fail them all @@ -261,6 +257,16 @@ namespace MediaBrowser.WebDashboard.Api configPages.AddRange(_appHost.Plugins.SelectMany(GetConfigPages)); + if (request.PageType.HasValue) + { + configPages = configPages.Where(p => p.ConfigurationPageType == request.PageType.Value).ToList(); + } + + if (request.EnableInMainMenu.HasValue) + { + configPages = configPages.Where(p => p.EnableInMainMenu == request.EnableInMainMenu.Value).ToList(); + } + return _resultFactory.GetOptimizedResult(Request, configPages); }