diff options
| author | Luke Pulverenti <luke.pulverenti@gmail.com> | 2014-01-02 23:58:22 -0500 |
|---|---|---|
| committer | Luke Pulverenti <luke.pulverenti@gmail.com> | 2014-01-02 23:58:22 -0500 |
| commit | ede84702d1805fac2f452bf298e59549893baea5 (patch) | |
| tree | 5f429aeddf853467471ce9c1e6e0fd8de7b024a0 /MediaBrowser.Server.Implementations | |
| parent | a5be2523c5d86c077175b2de347b8beb791616c1 (diff) | |
added live channel playback
Diffstat (limited to 'MediaBrowser.Server.Implementations')
| -rw-r--r-- | MediaBrowser.Server.Implementations/LiveTv/LiveTvManager.cs | 45 |
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) |
