diff options
| author | Luke Pulverenti <luke.pulverenti@gmail.com> | 2014-07-18 15:07:28 -0400 |
|---|---|---|
| committer | Luke Pulverenti <luke.pulverenti@gmail.com> | 2014-07-18 15:07:28 -0400 |
| commit | b4b17d7717ff773d9782462c0eae967c4c7f2ad9 (patch) | |
| tree | 6da52977fdb0cba4849478761597e1d1821e9bdf /MediaBrowser.Server.Implementations/Channels/ChannelManager.cs | |
| parent | 97c5b468a0a731b38c83c6b2e6d8231bda02be2a (diff) | |
add subtitle delivery methods to StreamBuilder
Diffstat (limited to 'MediaBrowser.Server.Implementations/Channels/ChannelManager.cs')
| -rw-r--r-- | MediaBrowser.Server.Implementations/Channels/ChannelManager.cs | 50 |
1 files changed, 30 insertions, 20 deletions
diff --git a/MediaBrowser.Server.Implementations/Channels/ChannelManager.cs b/MediaBrowser.Server.Implementations/Channels/ChannelManager.cs index bf48af4fb..28cbd20e0 100644 --- a/MediaBrowser.Server.Implementations/Channels/ChannelManager.cs +++ b/MediaBrowser.Server.Implementations/Channels/ChannelManager.cs @@ -28,7 +28,6 @@ namespace MediaBrowser.Server.Implementations.Channels { private IChannel[] _channels; private IChannelFactory[] _factories; - private List<Channel> _channelEntities = new List<Channel>(); private readonly IUserManager _userManager; private readonly IUserDataManager _userDataManager; @@ -69,7 +68,7 @@ namespace MediaBrowser.Server.Implementations.Channels public void AddParts(IEnumerable<IChannel> channels, IEnumerable<IChannelFactory> factories) { - _channels = channels.ToArray(); + _channels = channels.Where(i => !(i is IFactoryChannel)).ToArray(); _factories = factories.ToArray(); } @@ -113,7 +112,10 @@ namespace MediaBrowser.Server.Implementations.Channels ? null : _userManager.GetUserById(new Guid(query.UserId)); - var channels = _channelEntities.OrderBy(i => i.SortName).ToList(); + var channels = GetAllChannels() + .Select(GetChannelEntity) + .OrderBy(i => i.SortName) + .ToList(); if (query.SupportsLatestItems.HasValue) { @@ -167,8 +169,6 @@ namespace MediaBrowser.Server.Implementations.Channels { var allChannelsList = GetAllChannels().ToList(); - var list = new List<Channel>(); - var numComplete = 0; foreach (var channelInfo in allChannelsList) @@ -179,8 +179,6 @@ namespace MediaBrowser.Server.Implementations.Channels { var item = await GetChannel(channelInfo, cancellationToken).ConfigureAwait(false); - list.Add(item); - _libraryManager.RegisterItem(item); } catch (OperationCanceledException) @@ -199,16 +197,28 @@ namespace MediaBrowser.Server.Implementations.Channels progress.Report(100 * percent); } - _channelEntities = list.ToList(); progress.Report(100); } + private Channel GetChannelEntity(IChannel channel) + { + var item = GetChannel(GetInternalChannelId(channel.Name).ToString("N")); + + if (item == null) + { + item = GetChannel(channel, CancellationToken.None).Result; + + _libraryManager.RegisterItem(item); + } + + return item; + } + public async Task<IEnumerable<MediaSourceInfo>> GetChannelItemMediaSources(string id, CancellationToken cancellationToken) { var item = (IChannelMediaItem)_libraryManager.GetItemById(id); - var channelGuid = new Guid(item.ChannelId); - var channel = _channelEntities.First(i => i.Id == channelGuid); + var channel = GetChannel(item.ChannelId); var channelPlugin = GetChannelProvider(channel); var requiresCallback = channelPlugin as IRequiresMediaInfoCallback; @@ -484,7 +494,8 @@ namespace MediaBrowser.Server.Implementations.Channels public IEnumerable<ChannelFeatures> GetAllChannelFeatures() { - return _channelEntities + return GetAllChannels() + .Select(GetChannelEntity) .OrderBy(i => i.SortName) .Select(i => GetChannelFeatures(i.Id.ToString("N"))); } @@ -603,8 +614,8 @@ namespace MediaBrowser.Server.Implementations.Channels var itemTasks = items.Select(i => { var channelProvider = i.Item1; - var channel = GetChannel(GetInternalChannelId(channelProvider.Name).ToString("N")); - return GetChannelItemEntity(i.Item2, channelProvider, channel, token); + var internalChannelId = GetInternalChannelId(channelProvider.Name); + return GetChannelItemEntity(i.Item2, channelProvider, internalChannelId, token); }); var internalItems = await Task.WhenAll(itemTasks).ConfigureAwait(false); @@ -761,8 +772,8 @@ namespace MediaBrowser.Server.Implementations.Channels var itemTasks = items.Select(i => { var channelProvider = i.Item1; - var channel = GetChannel(GetInternalChannelId(channelProvider.Name).ToString("N")); - return GetChannelItemEntity(i.Item2, channelProvider, channel, token); + var internalChannelId = GetInternalChannelId(channelProvider.Name); + return GetChannelItemEntity(i.Item2, channelProvider, internalChannelId, token); }); var internalItems = await Task.WhenAll(itemTasks).ConfigureAwait(false); @@ -837,9 +848,8 @@ namespace MediaBrowser.Server.Implementations.Channels public async Task<QueryResult<BaseItemDto>> GetChannelItems(ChannelItemQuery query, CancellationToken cancellationToken) { - var queryChannelId = query.ChannelId; // Get the internal channel entity - var channel = _channelEntities.First(i => i.Id == new Guid(queryChannelId)); + var channel = GetChannel(query.ChannelId); // Find the corresponding channel provider plugin var channelProvider = GetChannelProvider(channel); @@ -886,7 +896,7 @@ namespace MediaBrowser.Server.Implementations.Channels var providerTotalRecordCount = providerLimit.HasValue ? itemsResult.TotalRecordCount : null; - var tasks = itemsResult.Items.Select(i => GetChannelItemEntity(i, channelProvider, channel, cancellationToken)); + var tasks = itemsResult.Items.Select(i => GetChannelItemEntity(i, channelProvider, channel.Id, cancellationToken)); var internalItems = await Task.WhenAll(tasks).ConfigureAwait(false); @@ -1086,7 +1096,7 @@ namespace MediaBrowser.Server.Implementations.Channels (channelProvider.Name ?? string.Empty) + "16"; } - private async Task<BaseItem> GetChannelItemEntity(ChannelItemInfo info, IChannel channelProvider, Channel internalChannel, CancellationToken cancellationToken) + private async Task<BaseItem> GetChannelItemEntity(ChannelItemInfo info, IChannel channelProvider, Guid internalChannelId, CancellationToken cancellationToken) { BaseItem item; Guid id; @@ -1158,7 +1168,7 @@ namespace MediaBrowser.Server.Implementations.Channels channelItem.OriginalImageUrl = info.ImageUrl; channelItem.ExternalId = info.Id; - channelItem.ChannelId = internalChannel.Id.ToString("N"); + channelItem.ChannelId = internalChannelId.ToString("N"); channelItem.ChannelItemType = info.Type; if (isNew) |
