aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Server.Implementations/Channels/ChannelManager.cs
diff options
context:
space:
mode:
Diffstat (limited to 'MediaBrowser.Server.Implementations/Channels/ChannelManager.cs')
-rw-r--r--MediaBrowser.Server.Implementations/Channels/ChannelManager.cs27
1 files changed, 24 insertions, 3 deletions
diff --git a/MediaBrowser.Server.Implementations/Channels/ChannelManager.cs b/MediaBrowser.Server.Implementations/Channels/ChannelManager.cs
index e028065c3..dc3a04769 100644
--- a/MediaBrowser.Server.Implementations/Channels/ChannelManager.cs
+++ b/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)