mirror of
https://github.com/jellyfin/jellyfin.git
synced 2025-06-23 15:30:56 -04:00
update m3u channel mapping
This commit is contained in:
parent
e391ee1b17
commit
c33b12ba7d
@ -474,17 +474,30 @@ namespace Emby.Server.Implementations.LiveTv.EmbyTV
|
|||||||
|
|
||||||
public ChannelInfo GetEpgChannelFromTunerChannel(List<NameValuePair> mappings, ChannelInfo tunerChannel, List<ChannelInfo> epgChannels)
|
public ChannelInfo GetEpgChannelFromTunerChannel(List<NameValuePair> mappings, ChannelInfo tunerChannel, List<ChannelInfo> epgChannels)
|
||||||
{
|
{
|
||||||
var tunerChannelId = string.IsNullOrWhiteSpace(tunerChannel.TunerChannelId)
|
if (!string.IsNullOrWhiteSpace(tunerChannel.Id))
|
||||||
? tunerChannel.Id
|
|
||||||
: tunerChannel.TunerChannelId;
|
|
||||||
|
|
||||||
if (!string.IsNullOrWhiteSpace(tunerChannelId))
|
|
||||||
{
|
{
|
||||||
var mappedTunerChannelId = GetMappedChannel(tunerChannelId, mappings);
|
var mappedTunerChannelId = GetMappedChannel(tunerChannel.Id, mappings);
|
||||||
|
|
||||||
if (string.IsNullOrWhiteSpace(mappedTunerChannelId))
|
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));
|
var channel = epgChannels.FirstOrDefault(i => string.Equals(mappedTunerChannelId, i.Id, StringComparison.OrdinalIgnoreCase));
|
||||||
|
@ -2926,7 +2926,7 @@ namespace Emby.Server.Implementations.LiveTv
|
|||||||
var result = new TunerChannelMapping
|
var result = new TunerChannelMapping
|
||||||
{
|
{
|
||||||
Name = tunerChannel.Name,
|
Name = tunerChannel.Name,
|
||||||
Id = tunerChannel.TunerChannelId
|
Id = tunerChannel.Id
|
||||||
};
|
};
|
||||||
|
|
||||||
if (!string.IsNullOrWhiteSpace(tunerChannel.Number))
|
if (!string.IsNullOrWhiteSpace(tunerChannel.Number))
|
||||||
@ -2934,11 +2934,6 @@ namespace Emby.Server.Implementations.LiveTv
|
|||||||
result.Name = tunerChannel.Number + " " + result.Name;
|
result.Name = tunerChannel.Number + " " + result.Name;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (string.IsNullOrWhiteSpace(result.Id))
|
|
||||||
{
|
|
||||||
result.Id = tunerChannel.Id;
|
|
||||||
}
|
|
||||||
|
|
||||||
var providerChannel = EmbyTV.EmbyTV.Current.GetEpgChannelFromTunerChannel(mappings, tunerChannel, epgChannels);
|
var providerChannel = EmbyTV.EmbyTV.Current.GetEpgChannelFromTunerChannel(mappings, tunerChannel, epgChannels);
|
||||||
|
|
||||||
if (providerChannel != null)
|
if (providerChannel != null)
|
||||||
|
@ -35,10 +35,10 @@ namespace Emby.Server.Implementations.LiveTv.TunerHosts
|
|||||||
MediaEncoder = mediaEncoder;
|
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 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;
|
ChannelCache cache = null;
|
||||||
var key = tuner.Id;
|
var key = tuner.Id;
|
||||||
@ -73,7 +73,7 @@ namespace Emby.Server.Implementations.LiveTv.TunerHosts
|
|||||||
.ToList();
|
.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>();
|
var list = new List<ChannelInfo>();
|
||||||
|
|
||||||
|
@ -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);
|
var lineup = await GetLineup(info, cancellationToken).ConfigureAwait(false);
|
||||||
|
|
||||||
@ -99,7 +99,8 @@ namespace Emby.Server.Implementations.LiveTv.TunerHosts.HdHomerun
|
|||||||
AudioCodec = i.AudioCodec,
|
AudioCodec = i.AudioCodec,
|
||||||
VideoCodec = i.VideoCodec,
|
VideoCodec = i.VideoCodec,
|
||||||
ChannelType = ChannelType.TV
|
ChannelType = ChannelType.TV
|
||||||
});
|
|
||||||
|
}).ToList();
|
||||||
}
|
}
|
||||||
|
|
||||||
private readonly Dictionary<string, DiscoverResponse> _modelCache = new Dictionary<string, DiscoverResponse>();
|
private readonly Dictionary<string, DiscoverResponse> _modelCache = new Dictionary<string, DiscoverResponse>();
|
||||||
|
@ -48,9 +48,11 @@ namespace Emby.Server.Implementations.LiveTv.TunerHosts
|
|||||||
|
|
||||||
private const string ChannelIdPrefix = "m3u_";
|
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)
|
public Task<List<LiveTvTunerInfo>> GetTunerInfos(CancellationToken cancellationToken)
|
||||||
|
@ -136,11 +136,26 @@ namespace Emby.Server.Implementations.LiveTv.TunerHosts
|
|||||||
channel.Name = GetChannelName(extInf, attributes);
|
channel.Name = GetChannelName(extInf, attributes);
|
||||||
channel.Number = GetChannelNumber(extInf, attributes, mediaUrl);
|
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))
|
if (!string.IsNullOrWhiteSpace(channelId))
|
||||||
{
|
{
|
||||||
channel.Id = channelId;
|
channelIdValues.Add(channelId);
|
||||||
channel.TunerChannelId = channelId;
|
}
|
||||||
|
if (!string.IsNullOrWhiteSpace(tvgId))
|
||||||
|
{
|
||||||
|
channelIdValues.Add(tvgId);
|
||||||
|
}
|
||||||
|
if (channelIdValues.Count > 0)
|
||||||
|
{
|
||||||
|
channel.Id = string.Join("_", channelIdValues.ToArray());
|
||||||
}
|
}
|
||||||
|
|
||||||
return channel;
|
return channel;
|
||||||
@ -296,24 +311,6 @@ namespace Emby.Server.Implementations.LiveTv.TunerHosts
|
|||||||
return name;
|
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)
|
private Dictionary<string, string> ParseExtInf(string line, out string remaining)
|
||||||
{
|
{
|
||||||
var dict = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase);
|
var dict = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user