update m3u channel mapping

This commit is contained in:
Luke Pulverenti 2017-02-23 14:13:26 -05:00
parent e391ee1b17
commit c33b12ba7d
6 changed files with 49 additions and 41 deletions

View File

@ -474,17 +474,30 @@ namespace Emby.Server.Implementations.LiveTv.EmbyTV
public ChannelInfo GetEpgChannelFromTunerChannel(List<NameValuePair> mappings, ChannelInfo tunerChannel, List<ChannelInfo> epgChannels)
{
var tunerChannelId = string.IsNullOrWhiteSpace(tunerChannel.TunerChannelId)
? tunerChannel.Id
: tunerChannel.TunerChannelId;
if (!string.IsNullOrWhiteSpace(tunerChannelId))
if (!string.IsNullOrWhiteSpace(tunerChannel.Id))
{
var mappedTunerChannelId = GetMappedChannel(tunerChannelId, mappings);
var mappedTunerChannelId = GetMappedChannel(tunerChannel.Id, mappings);
if (string.IsNullOrWhiteSpace(mappedTunerChannelId))
{
mappedTunerChannelId = tunerChannelId;
mappedTunerChannelId = tunerChannel.Id;
}
var channel = epgChannels.FirstOrDefault(i => string.Equals(mappedTunerChannelId, i.Id, StringComparison.OrdinalIgnoreCase));
if (channel != null)
{
return channel;
}
}
if (!string.IsNullOrWhiteSpace(tunerChannel.TunerChannelId))
{
var mappedTunerChannelId = GetMappedChannel(tunerChannel.TunerChannelId, mappings);
if (string.IsNullOrWhiteSpace(mappedTunerChannelId))
{
mappedTunerChannelId = tunerChannel.TunerChannelId;
}
var channel = epgChannels.FirstOrDefault(i => string.Equals(mappedTunerChannelId, i.Id, StringComparison.OrdinalIgnoreCase));

View File

@ -2926,7 +2926,7 @@ namespace Emby.Server.Implementations.LiveTv
var result = new TunerChannelMapping
{
Name = tunerChannel.Name,
Id = tunerChannel.TunerChannelId
Id = tunerChannel.Id
};
if (!string.IsNullOrWhiteSpace(tunerChannel.Number))
@ -2934,11 +2934,6 @@ namespace Emby.Server.Implementations.LiveTv
result.Name = tunerChannel.Number + " " + result.Name;
}
if (string.IsNullOrWhiteSpace(result.Id))
{
result.Id = tunerChannel.Id;
}
var providerChannel = EmbyTV.EmbyTV.Current.GetEpgChannelFromTunerChannel(mappings, tunerChannel, epgChannels);
if (providerChannel != null)

View File

@ -35,10 +35,10 @@ namespace Emby.Server.Implementations.LiveTv.TunerHosts
MediaEncoder = mediaEncoder;
}
protected abstract Task<IEnumerable<ChannelInfo>> GetChannelsInternal(TunerHostInfo tuner, CancellationToken cancellationToken);
protected abstract Task<List<ChannelInfo>> GetChannelsInternal(TunerHostInfo tuner, CancellationToken cancellationToken);
public abstract string Type { get; }
public async Task<IEnumerable<ChannelInfo>> GetChannels(TunerHostInfo tuner, bool enableCache, CancellationToken cancellationToken)
public async Task<List<ChannelInfo>> GetChannels(TunerHostInfo tuner, bool enableCache, CancellationToken cancellationToken)
{
ChannelCache cache = null;
var key = tuner.Id;
@ -73,7 +73,7 @@ namespace Emby.Server.Implementations.LiveTv.TunerHosts
.ToList();
}
public async Task<IEnumerable<ChannelInfo>> GetChannels(bool enableCache, CancellationToken cancellationToken)
public async Task<List<ChannelInfo>> GetChannels(bool enableCache, CancellationToken cancellationToken)
{
var list = new List<ChannelInfo>();

View File

@ -84,7 +84,7 @@ namespace Emby.Server.Implementations.LiveTv.TunerHosts.HdHomerun
}
}
protected override async Task<IEnumerable<ChannelInfo>> GetChannelsInternal(TunerHostInfo info, CancellationToken cancellationToken)
protected override async Task<List<ChannelInfo>> GetChannelsInternal(TunerHostInfo info, CancellationToken cancellationToken)
{
var lineup = await GetLineup(info, cancellationToken).ConfigureAwait(false);
@ -99,7 +99,8 @@ namespace Emby.Server.Implementations.LiveTv.TunerHosts.HdHomerun
AudioCodec = i.AudioCodec,
VideoCodec = i.VideoCodec,
ChannelType = ChannelType.TV
});
}).ToList();
}
private readonly Dictionary<string, DiscoverResponse> _modelCache = new Dictionary<string, DiscoverResponse>();

View File

@ -48,9 +48,11 @@ namespace Emby.Server.Implementations.LiveTv.TunerHosts
private const string ChannelIdPrefix = "m3u_";
protected override async Task<IEnumerable<ChannelInfo>> GetChannelsInternal(TunerHostInfo info, CancellationToken cancellationToken)
protected override async Task<List<ChannelInfo>> GetChannelsInternal(TunerHostInfo info, CancellationToken cancellationToken)
{
return await new M3uParser(Logger, _fileSystem, _httpClient, _appHost).Parse(info.Url, ChannelIdPrefix, info.Id, !info.EnableTvgId, cancellationToken).ConfigureAwait(false);
var result = await new M3uParser(Logger, _fileSystem, _httpClient, _appHost).Parse(info.Url, ChannelIdPrefix, info.Id, !info.EnableTvgId, cancellationToken).ConfigureAwait(false);
return result.Cast<ChannelInfo>().ToList();
}
public Task<List<LiveTvTunerInfo>> GetTunerInfos(CancellationToken cancellationToken)

View File

@ -136,11 +136,26 @@ namespace Emby.Server.Implementations.LiveTv.TunerHosts
channel.Name = GetChannelName(extInf, attributes);
channel.Number = GetChannelNumber(extInf, attributes, mediaUrl);
var channelId = GetTunerChannelId(attributes);
string tvgId;
attributes.TryGetValue("tvg-id", out tvgId);
string channelId;
attributes.TryGetValue("channel-id", out channelId);
channel.TunerChannelId = string.IsNullOrWhiteSpace(tvgId) ? channelId : tvgId;
var channelIdValues = new List<string>();
if (!string.IsNullOrWhiteSpace(channelId))
{
channel.Id = channelId;
channel.TunerChannelId = channelId;
channelIdValues.Add(channelId);
}
if (!string.IsNullOrWhiteSpace(tvgId))
{
channelIdValues.Add(tvgId);
}
if (channelIdValues.Count > 0)
{
channel.Id = string.Join("_", channelIdValues.ToArray());
}
return channel;
@ -296,24 +311,6 @@ namespace Emby.Server.Implementations.LiveTv.TunerHosts
return name;
}
private string GetTunerChannelId(Dictionary<string, string> attributes)
{
var values = new List<string>();
string result;
if (attributes.TryGetValue("tvg-id", out result))
{
values.Add(result);
}
if (attributes.TryGetValue("channel-id", out result))
{
values.Add(result);
}
return values.Count == 0 ? null : string.Join("-", values.ToArray());
}
private Dictionary<string, string> ParseExtInf(string line, out string remaining)
{
var dict = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase);