Browse Source

add new web client sidebar

Luke Pulverenti 11 years ago
parent
commit
f031bb744b

+ 5 - 0
MediaBrowser.Controller/Channels/IChannel.cs

@@ -61,6 +61,11 @@ namespace MediaBrowser.Controller.Channels
         IEnumerable<ImageType> GetSupportedChannelImages();
     }
 
+    public interface IChannelFactory
+    {
+        IEnumerable<IChannel> GetChannels();
+    }
+
     public class ChannelInfo
     {
         /// <summary>

+ 2 - 1
MediaBrowser.Controller/Channels/IChannelManager.cs

@@ -13,7 +13,8 @@ namespace MediaBrowser.Controller.Channels
         /// Adds the parts.
         /// </summary>
         /// <param name="channels">The channels.</param>
-        void AddParts(IEnumerable<IChannel> channels);
+        /// <param name="factories">The factories.</param>
+        void AddParts(IEnumerable<IChannel> channels, IEnumerable<IChannelFactory> factories);
 
         /// <summary>
         /// Gets the channels.

+ 2 - 2
MediaBrowser.Dlna/Didl/DidlBuilder.cs

@@ -414,11 +414,11 @@ namespace MediaBrowser.Dlna.Didl
                     {
                         classType = "object.container.album.musicAlbum";
                     }
-                    if (item is MusicArtist)
+                    else if (item is MusicArtist)
                     {
                         classType = "object.container.person.musicArtist";
                     }
-                    if (item is Series || item is Season || item is BoxSet || item is CollectionFolder)
+                    else if (item is Series || item is Season || item is BoxSet)
                     {
                         classType = "object.container.album.videoAlbum";
                     }                  

+ 12 - 0
MediaBrowser.Model/Querying/NextUpQuery.cs

@@ -9,6 +9,12 @@ namespace MediaBrowser.Model.Querying
         /// <value>The user id.</value>
         public string UserId { get; set; }
 
+        /// <summary>
+        /// Gets or sets the parent identifier.
+        /// </summary>
+        /// <value>The parent identifier.</value>
+        public string ParentId { get; set; }
+        
         /// <summary>
         /// Gets or sets the series id.
         /// </summary>
@@ -42,6 +48,12 @@ namespace MediaBrowser.Model.Querying
         /// <value>The user id.</value>
         public string UserId { get; set; }
 
+        /// <summary>
+        /// Gets or sets the parent identifier.
+        /// </summary>
+        /// <value>The parent identifier.</value>
+        public string ParentId { get; set; }
+
         /// <summary>
         /// Skips over a given number of items within the results. Use for paging.
         /// </summary>

+ 24 - 3
MediaBrowser.Server.Implementations/Channels/ChannelManager.cs

@@ -23,6 +23,7 @@ namespace MediaBrowser.Server.Implementations.Channels
     public class ChannelManager : IChannelManager
     {
         private IChannel[] _channels;
+        private IChannelFactory[] _factories;
         private List<Channel> _channelEntities = new List<Channel>();
 
         private readonly IUserManager _userManager;
@@ -44,9 +45,29 @@ namespace MediaBrowser.Server.Implementations.Channels
             _userDataManager = userDataManager;
         }
 
-        public void AddParts(IEnumerable<IChannel> channels)
+        public void AddParts(IEnumerable<IChannel> channels, IEnumerable<IChannelFactory> factories)
         {
             _channels = channels.ToArray();
+            _factories = factories.ToArray();
+        }
+
+        private IEnumerable<IChannel> GetAllChannels()
+        {
+            return _factories
+                .SelectMany(i =>
+                {
+                    try
+                    {
+                        return i.GetChannels().ToList();
+                    }
+                    catch (Exception ex)
+                    {
+                        _logger.ErrorException("Error getting channel list", ex);
+                        return new List<IChannel>();
+                    }
+                })
+                .Concat(_channels)
+                .OrderBy(i => i.Name);
         }
 
         public Task<QueryResult<BaseItemDto>> GetChannels(ChannelQuery query, CancellationToken cancellationToken)
@@ -82,7 +103,7 @@ namespace MediaBrowser.Server.Implementations.Channels
 
         public async Task RefreshChannels(IProgress<double> progress, CancellationToken cancellationToken)
         {
-            var allChannelsList = _channels.ToList();
+            var allChannelsList = GetAllChannels().ToList();
 
             var list = new List<Channel>();
 
@@ -380,7 +401,7 @@ namespace MediaBrowser.Server.Implementations.Channels
 
         internal IChannel GetChannelProvider(Channel channel)
         {
-            return _channels.First(i => string.Equals(i.Name, channel.OriginalChannelName, StringComparison.OrdinalIgnoreCase));
+            return GetAllChannels().First(i => string.Equals(i.Name, channel.OriginalChannelName, StringComparison.OrdinalIgnoreCase));
         }
 
         private IEnumerable<BaseItem> ApplyFilters(IEnumerable<BaseItem> items, IEnumerable<ItemFilter> filters, User user)

+ 6 - 6
MediaBrowser.Server.Implementations/EntryPoints/Notifications/Notifier.cs

@@ -81,7 +81,7 @@ namespace MediaBrowser.Server.Implementations.EntryPoints.Notifications
 
             notification.Variables["Version"] = e.Argument.versionStr;
             notification.Variables["ReleaseNotes"] = e.Argument.description;
-   
+
             await SendNotification(notification).ConfigureAwait(false);
         }
 
@@ -164,7 +164,7 @@ namespace MediaBrowser.Server.Implementations.EntryPoints.Notifications
 
             var item = e.MediaInfo;
 
-            if (e.Item !=null && e.Item.Parent == null)
+            if (e.Item != null && e.Item.Parent == null)
             {
                 // Don't report theme song or local trailer playback
                 // TODO: This will also cause movie specials to not be reported
@@ -185,7 +185,7 @@ namespace MediaBrowser.Server.Implementations.EntryPoints.Notifications
 
             await SendNotification(notification).ConfigureAwait(false);
         }
-        
+
         private string GetPlaybackNotificationType(string mediaType)
         {
             if (string.Equals(mediaType, MediaType.Audio, StringComparison.OrdinalIgnoreCase))
@@ -218,7 +218,7 @@ namespace MediaBrowser.Server.Implementations.EntryPoints.Notifications
                 };
 
                 notification.Variables["Name"] = item.Name;
-                
+
                 await SendNotification(notification).ConfigureAwait(false);
             }
         }
@@ -260,7 +260,7 @@ namespace MediaBrowser.Server.Implementations.EntryPoints.Notifications
         async void _installationManager_PluginUninstalled(object sender, GenericEventArgs<IPlugin> e)
         {
             var type = NotificationType.PluginUninstalled.ToString();
-            
+
             var plugin = e.Argument;
 
             var notification = new NotificationRequest
@@ -270,7 +270,7 @@ namespace MediaBrowser.Server.Implementations.EntryPoints.Notifications
 
             notification.Variables["Name"] = plugin.Name;
             notification.Variables["Version"] = plugin.Version.ToString();
-            
+
             await SendNotification(notification).ConfigureAwait(false);
         }
 

+ 4 - 1
MediaBrowser.Server.Implementations/Localization/Server/server.json

@@ -624,5 +624,8 @@
 	"ButtonMute": "Mute",
 	"HeaderLatestMedia": "Latest Media",
 	"OptionNoSubtitles": "No Subtitles",
-	"OptionSpecialFeatures": "Special Features"
+	"OptionSpecialFeatures": "Special Features",
+	"HeaderCollections": "Collections",
+	"HeaderChannels": "Channels",
+	"HeaderMyLibrary": "My Library"
 }

+ 1 - 1
MediaBrowser.ServerApplication/ApplicationHost.cs

@@ -712,7 +712,7 @@ namespace MediaBrowser.ServerApplication
 
             SessionManager.AddParts(GetExports<ISessionControllerFactory>());
 
-            ChannelManager.AddParts(GetExports<IChannel>());
+            ChannelManager.AddParts(GetExports<IChannel>(), GetExports<IChannelFactory>());
 
             NotificationManager.AddParts(GetExports<INotificationService>(), GetExports<INotificationTypeFactory>());
         }

+ 24 - 0
MediaBrowser.WebDashboard/MediaBrowser.WebDashboard.csproj

@@ -211,6 +211,30 @@
     <Content Include="dashboard-ui\css\images\items\detail\tv.png">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
+    <Content Include="dashboard-ui\css\images\items\folders\books.png">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+    <Content Include="dashboard-ui\css\images\items\folders\channels.png">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+    <Content Include="dashboard-ui\css\images\items\folders\games.png">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+    <Content Include="dashboard-ui\css\images\items\folders\homevideos.png">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+    <Content Include="dashboard-ui\css\images\items\folders\movies.png">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+    <Content Include="dashboard-ui\css\images\items\folders\music.png">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+    <Content Include="dashboard-ui\css\images\items\folders\photos.png">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+    <Content Include="dashboard-ui\css\images\items\folders\tv.png">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
     <Content Include="dashboard-ui\css\images\items\list\remotesearch.png">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>