|
@@ -70,9 +70,11 @@ namespace MediaBrowser.Server.Implementations.LiveTv
|
|
|
Name = info.Name,
|
|
|
ServiceName = info.ServiceName,
|
|
|
ChannelType = info.ChannelType,
|
|
|
- Id = info.ChannelId,
|
|
|
+ ChannelId = info.ChannelId,
|
|
|
Number = info.ChannelNumber,
|
|
|
- PrimaryImageTag = GetLogoImageTag(info)
|
|
|
+ PrimaryImageTag = GetLogoImageTag(info),
|
|
|
+ Type = info.GetType().Name,
|
|
|
+ Id = info.Id.ToString("N")
|
|
|
};
|
|
|
}
|
|
|
|
|
@@ -113,9 +115,11 @@ namespace MediaBrowser.Server.Implementations.LiveTv
|
|
|
}).ThenBy(i => i.Name);
|
|
|
}
|
|
|
|
|
|
- public Channel GetChannel(string serviceName, string channelId)
|
|
|
+ public Channel GetChannel(string id)
|
|
|
{
|
|
|
- return _channels.FirstOrDefault(i => string.Equals(i.ServiceName, serviceName, StringComparison.OrdinalIgnoreCase) && string.Equals(i.ChannelId, channelId, StringComparison.OrdinalIgnoreCase));
|
|
|
+ var guid = new Guid(id);
|
|
|
+
|
|
|
+ return _channels.FirstOrDefault(i => i.Id == guid);
|
|
|
}
|
|
|
|
|
|
internal async Task RefreshChannels(IProgress<double> progress, CancellationToken cancellationToken)
|
|
@@ -125,36 +129,44 @@ namespace MediaBrowser.Server.Implementations.LiveTv
|
|
|
|
|
|
var tasks = _services.Select(i => i.GetChannelsAsync(currentCancellationToken));
|
|
|
|
|
|
- var results = await Task.WhenAll(tasks).ConfigureAwait(false);
|
|
|
+ progress.Report(10);
|
|
|
|
|
|
- var allChannels = results.SelectMany(i => i);
|
|
|
+ var results = await Task.WhenAll(tasks).ConfigureAwait(false);
|
|
|
|
|
|
- var channnelTasks = allChannels.Select(i => GetChannel(i, cancellationToken));
|
|
|
+ var allChannels = results.SelectMany(i => i).ToList();
|
|
|
|
|
|
- var channelEntities = await Task.WhenAll(channnelTasks).ConfigureAwait(false);
|
|
|
+ var list = new List<Channel>();
|
|
|
|
|
|
- _channels = channelEntities.ToList();
|
|
|
- }
|
|
|
+ var numComplete = 0;
|
|
|
|
|
|
- private async Task<Channel> GetChannel(ChannelInfo channelInfo, CancellationToken cancellationToken)
|
|
|
- {
|
|
|
- try
|
|
|
- {
|
|
|
- return await GetChannelInternal(channelInfo, cancellationToken).ConfigureAwait(false);
|
|
|
- }
|
|
|
- catch (OperationCanceledException)
|
|
|
- {
|
|
|
- throw;
|
|
|
- }
|
|
|
- catch (Exception ex)
|
|
|
+ foreach (var channel in allChannels)
|
|
|
{
|
|
|
- _logger.ErrorException("Error getting channel information for {0}", ex, channelInfo.Name);
|
|
|
+ try
|
|
|
+ {
|
|
|
+ var item = await GetChannel(channel, cancellationToken).ConfigureAwait(false);
|
|
|
|
|
|
- return null;
|
|
|
+ list.Add(item);
|
|
|
+ }
|
|
|
+ catch (OperationCanceledException)
|
|
|
+ {
|
|
|
+ throw;
|
|
|
+ }
|
|
|
+ catch (Exception ex)
|
|
|
+ {
|
|
|
+ _logger.ErrorException("Error getting channel information for {0}", ex, channel.Name);
|
|
|
+ }
|
|
|
+
|
|
|
+ numComplete++;
|
|
|
+ double percent = numComplete;
|
|
|
+ percent /= allChannels.Count;
|
|
|
+
|
|
|
+ progress.Report(90 * percent + 10);
|
|
|
}
|
|
|
+
|
|
|
+ _channels = list;
|
|
|
}
|
|
|
|
|
|
- private async Task<Channel> GetChannelInternal(ChannelInfo channelInfo, CancellationToken cancellationToken)
|
|
|
+ private async Task<Channel> GetChannel(ChannelInfo channelInfo, CancellationToken cancellationToken)
|
|
|
{
|
|
|
var path = Path.Combine(_appPaths.ItemsByNamePath, "channels", _fileSystem.GetValidFilename(channelInfo.ServiceName), _fileSystem.GetValidFilename(channelInfo.Name));
|
|
|
|