瀏覽代碼

allow plugins to inject menus

Luke Pulverenti 7 年之前
父節點
當前提交
ce26d502a4

+ 12 - 2
MediaBrowser.WebDashboard/Api/ConfigurationPageInfo.cs

@@ -11,6 +11,9 @@ namespace MediaBrowser.WebDashboard.Api
         /// </summary>
         /// <value>The name.</value>
         public string Name { get; set; }
+        public bool EnableInMainMenu { get; set; }
+
+        public string DisplayName { get; set; }
 
         /// <summary>
         /// 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();

+ 14 - 8
MediaBrowser.WebDashboard/Api/DashboardService.cs

@@ -32,6 +32,7 @@ namespace MediaBrowser.WebDashboard.Api
         /// </summary>
         /// <value>The type of the page.</value>
         public ConfigurationPageType? PageType { get; set; }
+        public bool? EnableInMainMenu { get; set; }
     }
 
     /// <summary>
@@ -221,25 +222,20 @@ namespace MediaBrowser.WebDashboard.Api
         /// <returns>System.Object.</returns>
         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);
         }