aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Server.Implementations
diff options
context:
space:
mode:
authorLuke Pulverenti <luke.pulverenti@gmail.com>2014-01-02 23:58:22 -0500
committerLuke Pulverenti <luke.pulverenti@gmail.com>2014-01-02 23:58:22 -0500
commitede84702d1805fac2f452bf298e59549893baea5 (patch)
tree5f429aeddf853467471ce9c1e6e0fd8de7b024a0 /MediaBrowser.Server.Implementations
parenta5be2523c5d86c077175b2de347b8beb791616c1 (diff)
added live channel playback
Diffstat (limited to 'MediaBrowser.Server.Implementations')
-rw-r--r--MediaBrowser.Server.Implementations/LiveTv/LiveTvManager.cs45
1 files changed, 37 insertions, 8 deletions
diff --git a/MediaBrowser.Server.Implementations/LiveTv/LiveTvManager.cs b/MediaBrowser.Server.Implementations/LiveTv/LiveTvManager.cs
index 4b3f33297..0b1cfe35c 100644
--- a/MediaBrowser.Server.Implementations/LiveTv/LiveTvManager.cs
+++ b/MediaBrowser.Server.Implementations/LiveTv/LiveTvManager.cs
@@ -79,8 +79,11 @@ namespace MediaBrowser.Server.Implementations.LiveTv
if (user != null)
{
+ // Avoid implicitly captured closure
+ var currentUser = user;
+
channels = channels
- .Where(i => i.IsParentalAllowed(user))
+ .Where(i => i.IsParentalAllowed(currentUser))
.OrderBy(i =>
{
double number = 0;
@@ -419,7 +422,6 @@ namespace MediaBrowser.Server.Implementations.LiveTv
var allChannelsList = allChannels.ToList();
var list = new List<LiveTvChannel>();
- var programs = new List<LiveTvProgram>();
var numComplete = 0;
@@ -429,14 +431,42 @@ namespace MediaBrowser.Server.Implementations.LiveTv
{
var item = await GetChannel(channelInfo.Item2, channelInfo.Item1, cancellationToken).ConfigureAwait(false);
- var channelPrograms = await service.GetProgramsAsync(channelInfo.Item2.Id, cancellationToken).ConfigureAwait(false);
+ list.Add(item);
+ }
+ catch (OperationCanceledException)
+ {
+ throw;
+ }
+ catch (Exception ex)
+ {
+ _logger.ErrorException("Error getting channel information for {0}", ex, channelInfo.Item2.Name);
+ }
- var programTasks = channelPrograms.Select(program => GetProgram(program, item.ChannelInfo.ChannelType, service.Name, cancellationToken));
+ numComplete++;
+ double percent = numComplete;
+ percent /= allChannelsList.Count;
+
+ progress.Report(5 * percent + 10);
+ }
+ _channels = list.ToDictionary(i => i.Id);
+ progress.Report(15);
+
+ numComplete = 0;
+ var programs = new List<LiveTvProgram>();
+
+ foreach (var item in list)
+ {
+ // Avoid implicitly captured closure
+ var currentChannel = item;
+
+ try
+ {
+ var channelPrograms = await service.GetProgramsAsync(currentChannel.ChannelInfo.Id, cancellationToken).ConfigureAwait(false);
+
+ var programTasks = channelPrograms.Select(program => GetProgram(program, currentChannel.ChannelInfo.ChannelType, service.Name, cancellationToken));
var programEntities = await Task.WhenAll(programTasks).ConfigureAwait(false);
programs.AddRange(programEntities);
-
- list.Add(item);
}
catch (OperationCanceledException)
{
@@ -444,7 +474,7 @@ namespace MediaBrowser.Server.Implementations.LiveTv
}
catch (Exception ex)
{
- _logger.ErrorException("Error getting channel information for {0}", ex, channelInfo.Item2.Name);
+ _logger.ErrorException("Error getting programs for channel {0}", ex, currentChannel.Name);
}
numComplete++;
@@ -455,7 +485,6 @@ namespace MediaBrowser.Server.Implementations.LiveTv
}
_programs = programs.ToDictionary(i => i.Id);
- _channels = list.ToDictionary(i => i.Id);
}
private async Task<IEnumerable<Tuple<string, ChannelInfo>>> GetChannels(ILiveTvService service, CancellationToken cancellationToken)