aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Server.Implementations/Channels/ChannelManager.cs
diff options
context:
space:
mode:
authorLuke Pulverenti <luke.pulverenti@gmail.com>2014-07-18 15:07:28 -0400
committerLuke Pulverenti <luke.pulverenti@gmail.com>2014-07-18 15:07:28 -0400
commitb4b17d7717ff773d9782462c0eae967c4c7f2ad9 (patch)
tree6da52977fdb0cba4849478761597e1d1821e9bdf /MediaBrowser.Server.Implementations/Channels/ChannelManager.cs
parent97c5b468a0a731b38c83c6b2e6d8231bda02be2a (diff)
add subtitle delivery methods to StreamBuilder
Diffstat (limited to 'MediaBrowser.Server.Implementations/Channels/ChannelManager.cs')
-rw-r--r--MediaBrowser.Server.Implementations/Channels/ChannelManager.cs50
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)