diff options
| author | Luke Pulverenti <luke.pulverenti@gmail.com> | 2015-08-19 12:43:23 -0400 |
|---|---|---|
| committer | Luke Pulverenti <luke.pulverenti@gmail.com> | 2015-08-19 12:43:23 -0400 |
| commit | e5aea2b622d36e38380ac7e97bfb653931253e77 (patch) | |
| tree | be3e843e6d2c93dd540ce1606b9cece2326bf655 | |
| parent | 615d1e2a53c9079e6b13789cbaa0410d9039f435 (diff) | |
pool tuners
7 files changed, 142 insertions, 40 deletions
diff --git a/MediaBrowser.Controller/LiveTv/ITunerHost.cs b/MediaBrowser.Controller/LiveTv/ITunerHost.cs index a6c8021d9..0d1852fe2 100644 --- a/MediaBrowser.Controller/LiveTv/ITunerHost.cs +++ b/MediaBrowser.Controller/LiveTv/ITunerHost.cs @@ -21,17 +21,15 @@ namespace MediaBrowser.Controller.LiveTv /// <summary> /// Gets the channels. /// </summary> - /// <param name="info">The information.</param> /// <param name="cancellationToken">The cancellation token.</param> /// <returns>Task<IEnumerable<ChannelInfo>>.</returns> - Task<IEnumerable<ChannelInfo>> GetChannels(TunerHostInfo info, CancellationToken cancellationToken); + Task<IEnumerable<ChannelInfo>> GetChannels(CancellationToken cancellationToken); /// <summary> /// Gets the tuner infos. /// </summary> - /// <param name="info">The information.</param> /// <param name="cancellationToken">The cancellation token.</param> /// <returns>Task<List<LiveTvTunerInfo>>.</returns> - Task<List<LiveTvTunerInfo>> GetTunerInfos(TunerHostInfo info, CancellationToken cancellationToken); + Task<List<LiveTvTunerInfo>> GetTunerInfos(CancellationToken cancellationToken); /// <summary> /// Gets the channel stream. /// </summary> diff --git a/MediaBrowser.Providers/Movies/GenericMovieDbInfo.cs b/MediaBrowser.Providers/Movies/GenericMovieDbInfo.cs index 5b5afc6c7..f5ee33d6b 100644 --- a/MediaBrowser.Providers/Movies/GenericMovieDbInfo.cs +++ b/MediaBrowser.Providers/Movies/GenericMovieDbInfo.cs @@ -185,18 +185,25 @@ namespace MediaBrowser.Providers.Movies //release date and certification are retrieved based on configured country and we fall back on US if not there and to minimun release date if still no match if (movieData.releases != null && movieData.releases.countries != null) { - var ourRelease = movieData.releases.countries.FirstOrDefault(c => c.iso_3166_1.Equals(preferredCountryCode, StringComparison.OrdinalIgnoreCase)) ?? new MovieDbProvider.Country(); - var usRelease = movieData.releases.countries.FirstOrDefault(c => c.iso_3166_1.Equals("US", StringComparison.OrdinalIgnoreCase)) ?? new MovieDbProvider.Country(); - var minimunRelease = movieData.releases.countries.OrderBy(c => c.release_date).FirstOrDefault() ?? new MovieDbProvider.Country(); - - var ratingPrefix = string.Equals(preferredCountryCode, "us", StringComparison.OrdinalIgnoreCase) ? "" : preferredCountryCode + "-"; - movie.OfficialRating = !string.IsNullOrEmpty(ourRelease.certification) - ? ratingPrefix + ourRelease.certification - : !string.IsNullOrEmpty(usRelease.certification) - ? usRelease.certification - : !string.IsNullOrEmpty(minimunRelease.certification) - ? minimunRelease.iso_3166_1 + "-" + minimunRelease.certification - : null; + var releases = movieData.releases.countries.Where(i => !string.IsNullOrWhiteSpace(i.certification)).ToList(); + + var ourRelease = releases.FirstOrDefault(c => c.iso_3166_1.Equals(preferredCountryCode, StringComparison.OrdinalIgnoreCase)); + var usRelease = releases.FirstOrDefault(c => c.iso_3166_1.Equals("US", StringComparison.OrdinalIgnoreCase)); + var minimunRelease = releases.OrderBy(c => c.release_date).FirstOrDefault(); + + if (ourRelease != null) + { + var ratingPrefix = string.Equals(preferredCountryCode, "us", StringComparison.OrdinalIgnoreCase) ? "" : preferredCountryCode + "-"; + movie.OfficialRating = ratingPrefix + ourRelease.certification; + } + else if (usRelease != null) + { + movie.OfficialRating = usRelease.certification; + } + else if (minimunRelease != null) + { + movie.OfficialRating = minimunRelease.iso_3166_1 + "-" + minimunRelease.certification; + } } if (!string.IsNullOrWhiteSpace(movieData.release_date)) @@ -232,7 +239,7 @@ namespace MediaBrowser.Providers.Movies } resultItem.ResetPeople(); - + //Actors, Directors, Writers - all in People //actors come from cast if (movieData.casts != null && movieData.casts.cast != null) diff --git a/MediaBrowser.Providers/Omdb/OmdbItemProvider.cs b/MediaBrowser.Providers/Omdb/OmdbItemProvider.cs index dffabd83c..36e7697d7 100644 --- a/MediaBrowser.Providers/Omdb/OmdbItemProvider.cs +++ b/MediaBrowser.Providers/Omdb/OmdbItemProvider.cs @@ -172,7 +172,7 @@ namespace MediaBrowser.Providers.Omdb result.Item.SetProviderId(MetadataProviders.Imdb, imdbId); result.HasMetadata = true; - await new OmdbProvider(_jsonSerializer, _httpClient).Fetch(result.Item, imdbId, info.MetadataLanguage, cancellationToken).ConfigureAwait(false); + await new OmdbProvider(_jsonSerializer, _httpClient).Fetch(result.Item, imdbId, info.MetadataLanguage, info.MetadataCountryCode, cancellationToken).ConfigureAwait(false); } return result; @@ -211,7 +211,7 @@ namespace MediaBrowser.Providers.Omdb result.Item.SetProviderId(MetadataProviders.Imdb, imdbId); result.HasMetadata = true; - await new OmdbProvider(_jsonSerializer, _httpClient).Fetch(result.Item, imdbId, info.MetadataLanguage, cancellationToken).ConfigureAwait(false); + await new OmdbProvider(_jsonSerializer, _httpClient).Fetch(result.Item, imdbId, info.MetadataLanguage, info.MetadataCountryCode, cancellationToken).ConfigureAwait(false); } return result; diff --git a/MediaBrowser.Providers/Omdb/OmdbProvider.cs b/MediaBrowser.Providers/Omdb/OmdbProvider.cs index 9208031f3..c7ce57fca 100644 --- a/MediaBrowser.Providers/Omdb/OmdbProvider.cs +++ b/MediaBrowser.Providers/Omdb/OmdbProvider.cs @@ -28,7 +28,7 @@ namespace MediaBrowser.Providers.Omdb Current = this; } - public async Task Fetch(BaseItem item, string imdbId, string language, CancellationToken cancellationToken) + public async Task Fetch(BaseItem item, string imdbId, string language, string country, CancellationToken cancellationToken) { if (string.IsNullOrWhiteSpace(imdbId)) { @@ -55,7 +55,11 @@ namespace MediaBrowser.Providers.Omdb if (string.Equals(language, "en", StringComparison.OrdinalIgnoreCase)) { item.Name = result.Title; - item.OfficialRating = result.Rated; + + if (string.Equals(country, "us", StringComparison.OrdinalIgnoreCase)) + { + item.OfficialRating = result.Rated; + } } int year; diff --git a/MediaBrowser.Server.Implementations/LiveTv/EmbyTV/EmbyTV.cs b/MediaBrowser.Server.Implementations/LiveTv/EmbyTV/EmbyTV.cs index cd166ddd3..eb23fab80 100644 --- a/MediaBrowser.Server.Implementations/LiveTv/EmbyTV/EmbyTV.cs +++ b/MediaBrowser.Server.Implementations/LiveTv/EmbyTV/EmbyTV.cs @@ -88,11 +88,11 @@ namespace MediaBrowser.Server.Implementations.LiveTv.EmbyTV var status = new LiveTvServiceStatusInfo(); var list = new List<LiveTvTunerInfo>(); - foreach (var hostInstance in GetTunerHosts()) + foreach (var hostInstance in _liveTvManager.TunerHosts) { try { - var tuners = await hostInstance.Item1.GetTunerInfos(hostInstance.Item2, cancellationToken).ConfigureAwait(false); + var tuners = await hostInstance.GetTunerInfos(cancellationToken).ConfigureAwait(false); list.AddRange(tuners); } @@ -120,11 +120,11 @@ namespace MediaBrowser.Server.Implementations.LiveTv.EmbyTV var list = new List<ChannelInfo>(); - foreach (var hostInstance in GetTunerHosts()) + foreach (var hostInstance in _liveTvManager.TunerHosts) { try { - var channels = await hostInstance.Item1.GetChannels(hostInstance.Item2, cancellationToken).ConfigureAwait(false); + var channels = await hostInstance.GetChannels(cancellationToken).ConfigureAwait(false); list.AddRange(channels); } diff --git a/MediaBrowser.Server.Implementations/LiveTv/TunerHosts/HdHomerun/HdHomerunHost.cs b/MediaBrowser.Server.Implementations/LiveTv/TunerHosts/HdHomerun/HdHomerunHost.cs index 35f77abcb..7607d5b9d 100644 --- a/MediaBrowser.Server.Implementations/LiveTv/TunerHosts/HdHomerun/HdHomerunHost.cs +++ b/MediaBrowser.Server.Implementations/LiveTv/TunerHosts/HdHomerun/HdHomerunHost.cs @@ -49,7 +49,46 @@ namespace MediaBrowser.Server.Implementations.LiveTv.TunerHosts.HdHomerun private const string ChannelIdPrefix = "hdhr_"; - public async Task<IEnumerable<ChannelInfo>> GetChannels(TunerHostInfo info, CancellationToken cancellationToken) + private List<TunerHostInfo> GetTunerHosts() + { + return GetConfiguration().TunerHosts + .Where(i => i.IsEnabled && string.Equals(i.Type, Type, StringComparison.OrdinalIgnoreCase)) + .ToList(); + } + + public async Task<IEnumerable<ChannelInfo>> GetChannels(CancellationToken cancellationToken) + { + var list = new List<ChannelInfo>(); + + var hosts = GetTunerHosts(); + + var ipAddresses = new List<string>(); + + foreach (var host in hosts) + { + var ip = GetApiUrl(host, false); + + if (ipAddresses.Contains(ip, StringComparer.OrdinalIgnoreCase)) + { + continue; + } + + try + { + list.AddRange(await GetChannels(host, cancellationToken).ConfigureAwait(false)); + } + catch (Exception ex) + { + _logger.ErrorException("Error getting channel list", ex); + } + + ipAddresses.Add(ip); + } + + return list; + } + + private async Task<IEnumerable<ChannelInfo>> GetChannels(TunerHostInfo info, CancellationToken cancellationToken) { var options = new HttpRequestOptions { @@ -146,6 +185,26 @@ namespace MediaBrowser.Server.Implementations.LiveTv.TunerHosts.HdHomerun } } + public async Task<List<LiveTvTunerInfo>> GetTunerInfos(CancellationToken cancellationToken) + { + var list = new List<LiveTvTunerInfo>(); + + foreach (var host in GetConfiguration().TunerHosts + .Where(i => i.IsEnabled && string.Equals(i.Type, Type, StringComparison.OrdinalIgnoreCase))) + { + try + { + list.AddRange(await GetTunerInfos(host, cancellationToken).ConfigureAwait(false)); + } + catch (Exception ex) + { + _logger.ErrorException("Error getting tuner info", ex); + } + } + + return list; + } + private string GetApiUrl(TunerHostInfo info, bool isPlayback) { var url = info.Url; diff --git a/MediaBrowser.Server.Implementations/LiveTv/TunerHosts/M3UTunerHost.cs b/MediaBrowser.Server.Implementations/LiveTv/TunerHosts/M3UTunerHost.cs index 0755d2a39..ec05cefd5 100644 --- a/MediaBrowser.Server.Implementations/LiveTv/TunerHosts/M3UTunerHost.cs +++ b/MediaBrowser.Server.Implementations/LiveTv/TunerHosts/M3UTunerHost.cs @@ -4,6 +4,7 @@ using MediaBrowser.Controller.LiveTv; using MediaBrowser.Model.Dto; using MediaBrowser.Model.Entities; using MediaBrowser.Model.LiveTv; +using MediaBrowser.Model.Logging; using MediaBrowser.Model.MediaInfo; using System; using System.Collections.Generic; @@ -27,20 +28,52 @@ namespace MediaBrowser.Server.Implementations.LiveTv.TunerHosts } private readonly IConfigurationManager _config; + private readonly ILogger _logger; - public M3UTunerHost(IConfigurationManager config) + public M3UTunerHost(IConfigurationManager config, ILogger logger) { _config = config; + _logger = logger; } - public Task<IEnumerable<ChannelInfo>> GetChannels(TunerHostInfo info, CancellationToken cancellationToken) + private List<TunerHostInfo> GetTunerHosts() { - var urlHash = info.Url.GetMD5().ToString("N"); - + return GetConfiguration().TunerHosts + .Where(i => i.IsEnabled && string.Equals(i.Type, Type, StringComparison.OrdinalIgnoreCase)) + .ToList(); + } + + public async Task<IEnumerable<ChannelInfo>> GetChannels(CancellationToken cancellationToken) + { + var list = new List<ChannelInfo>(); + + var urls = GetTunerHosts().Select(i => i.Url) + .Where(i => !string.IsNullOrWhiteSpace(i)) + .Distinct(StringComparer.OrdinalIgnoreCase); + + foreach (var url in urls) + { + try + { + list.AddRange(await GetChannels(url, cancellationToken).ConfigureAwait(false)); + } + catch (Exception ex) + { + _logger.ErrorException("Error getting channel list", ex); + } + } + + return list; + } + + private Task<IEnumerable<ChannelInfo>> GetChannels(string url, CancellationToken cancellationToken) + { + var urlHash = url.GetMD5().ToString("N"); + int position = 0; string line; // Read the file and display it line by line. - var file = new StreamReader(info.Url); + var file = new StreamReader(url); var channels = new List<M3UChannel>(); while ((line = file.ReadLine()) != null) { @@ -105,19 +138,20 @@ namespace MediaBrowser.Server.Implementations.LiveTv.TunerHosts return Task.FromResult((IEnumerable<ChannelInfo>)channels); } - public Task<List<LiveTvTunerInfo>> GetTunerInfos(TunerHostInfo info, CancellationToken cancellationToken) + public Task<List<LiveTvTunerInfo>> GetTunerInfos(CancellationToken cancellationToken) { - var list = new List<LiveTvTunerInfo>(); - - list.Add(new LiveTvTunerInfo() + var list = GetConfiguration().TunerHosts + .Where(i => i.IsEnabled && string.Equals(i.Type, Type, StringComparison.OrdinalIgnoreCase)) + .Select(i => new LiveTvTunerInfo() { Name = Name, SourceType = Type, Status = LiveTvTunerStatus.Available, - Id = info.Url.GetMD5().ToString("N"), - Url = info.Url - }); - + Id = i.Url.GetMD5().ToString("N"), + Url = i.Url + }) + .ToList(); + return Task.FromResult(list); } @@ -136,7 +170,7 @@ namespace MediaBrowser.Server.Implementations.LiveTv.TunerHosts channelId = channelId.Substring(urlHash.Length); - var channels = await GetChannels(info, cancellationToken).ConfigureAwait(false); + var channels = await GetChannels(info.Url, cancellationToken).ConfigureAwait(false); var m3uchannels = channels.Cast<M3UChannel>(); var channel = m3uchannels.FirstOrDefault(c => c.Id == channelId); if (channel != null) |
