diff --git a/MediaBrowser.Controller/Subtitles/ISubtitleProvider.cs b/MediaBrowser.Controller/Subtitles/ISubtitleProvider.cs index dceea0cc69..5cb106fec1 100644 --- a/MediaBrowser.Controller/Subtitles/ISubtitleProvider.cs +++ b/MediaBrowser.Controller/Subtitles/ISubtitleProvider.cs @@ -1,4 +1,5 @@ using MediaBrowser.Controller.Providers; +using MediaBrowser.Model.Dto; using MediaBrowser.Model.Providers; using System.Collections.Generic; using System.Threading; @@ -35,5 +36,12 @@ namespace MediaBrowser.Controller.Subtitles /// The cancellation token. /// Task{SubtitleResponse}. Task GetSubtitles(string id, CancellationToken cancellationToken); + + /// + /// Gets the supported languages. + /// + /// The cancellation token. + /// Task<IEnumerable<NameIdPair>>. + Task> GetSupportedLanguages(CancellationToken cancellationToken); } } diff --git a/MediaBrowser.Providers/Subtitles/OpenSubtitleDownloader.cs b/MediaBrowser.Providers/Subtitles/OpenSubtitleDownloader.cs index 289c5661fb..54db0d5faa 100644 --- a/MediaBrowser.Providers/Subtitles/OpenSubtitleDownloader.cs +++ b/MediaBrowser.Providers/Subtitles/OpenSubtitleDownloader.cs @@ -5,10 +5,11 @@ using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.Providers; using MediaBrowser.Controller.Security; using MediaBrowser.Controller.Subtitles; -using MediaBrowser.Model.Configuration; +using MediaBrowser.Model.Dto; using MediaBrowser.Model.Entities; using MediaBrowser.Model.Logging; using MediaBrowser.Model.Providers; +using MediaBrowser.Model.Serialization; using OpenSubtitlesHandler; using System; using System.Collections.Generic; @@ -38,17 +39,23 @@ namespace MediaBrowser.Providers.Subtitles // And the user may restart the server private const int MaxDownloadsPerDay = 150; - public OpenSubtitleDownloader(ILogManager logManager, IHttpClient httpClient, IServerConfigurationManager config, IEncryptionManager encryption) + private readonly IJsonSerializer _json; + + public OpenSubtitleDownloader(ILogManager logManager, IHttpClient httpClient, IServerConfigurationManager config, IEncryptionManager encryption, IJsonSerializer json) { _logger = logManager.GetLogger(GetType().Name); _httpClient = httpClient; _config = config; _encryption = encryption; + _json = json; _config.NamedConfigurationUpdating += _config_NamedConfigurationUpdating; // Reset the count every 24 hours _dailyTimer = new Timer(state => _dailyDownloadCount = 0, null, TimeSpan.FromHours(24), TimeSpan.FromHours(24)); + + Utilities.HttpClient = httpClient; + OpenSubtitles.SetUserAgent("mediabrowser.tv"); } private const string PasswordHashPrefix = "h:"; @@ -195,6 +202,26 @@ namespace MediaBrowser.Providers.Subtitles _lastLogin = DateTime.UtcNow; } + public async Task> GetSupportedLanguages(CancellationToken cancellationToken) + { + await Login(cancellationToken).ConfigureAwait(false); + + var result = OpenSubtitles.GetSubLanguages("en"); + if (!(result is MethodResponseGetSubLanguages)) + { + _logger.Error("Invalid response type"); + return new List(); + } + + var results = ((MethodResponseGetSubLanguages)result).Languages; + + return results.Select(i => new NameIdPair + { + Name = i.LanguageName, + Id = i.SubLanguageID + }); + } + public async Task> Search(SubtitleSearchRequest request, CancellationToken cancellationToken) { var imdbIdText = request.GetProviderId(MetadataProviders.Imdb); @@ -229,9 +256,6 @@ namespace MediaBrowser.Providers.Subtitles return new List(); } - Utilities.HttpClient = _httpClient; - OpenSubtitles.SetUserAgent("mediabrowser.tv"); - await Login(cancellationToken).ConfigureAwait(false); var subLanguageId = request.Language; @@ -260,7 +284,7 @@ namespace MediaBrowser.Providers.Subtitles var result = await OpenSubtitles.SearchSubtitlesAsync(parms.ToArray(), cancellationToken).ConfigureAwait(false); if (!(result is MethodResponseSubtitleSearch)) { - _logger.Debug("Invalid response type"); + _logger.Error("Invalid response type"); return new List(); } diff --git a/MediaBrowser.Providers/TV/TvdbSeriesProvider.cs b/MediaBrowser.Providers/TV/TvdbSeriesProvider.cs index 60e484a36d..8bdd914df5 100644 --- a/MediaBrowser.Providers/TV/TvdbSeriesProvider.cs +++ b/MediaBrowser.Providers/TV/TvdbSeriesProvider.cs @@ -398,21 +398,21 @@ namespace MediaBrowser.Providers.TV } } - if (titles.Any(t => string.Equals(t, comparableName, StringComparison.OrdinalIgnoreCase))) - { - var id = node.SelectSingleNode("./seriesid") ?? - node.SelectSingleNode("./id"); - - if (id != null) - { - searchResult.Name = titles.FirstOrDefault(); - searchResult.SetProviderId(MetadataProviders.Tvdb, id.InnerText); - searchResults.Add(searchResult); - } - } - foreach (var title in titles) { + if (string.Equals(title, comparableName, StringComparison.OrdinalIgnoreCase)) + { + var id = node.SelectSingleNode("./seriesid") ?? + node.SelectSingleNode("./id"); + + if (id != null) + { + searchResult.Name = title; + searchResult.SetProviderId(MetadataProviders.Tvdb, id.InnerText); + searchResults.Add(searchResult); + } + break; + } _logger.Info("TVDb Provider - " + title + " did not match " + comparableName); } } diff --git a/MediaBrowser.Server.Implementations/Connect/ConnectEntryPoint.cs b/MediaBrowser.Server.Implementations/Connect/ConnectEntryPoint.cs index 770eaa41f1..973519a77e 100644 --- a/MediaBrowser.Server.Implementations/Connect/ConnectEntryPoint.cs +++ b/MediaBrowser.Server.Implementations/Connect/ConnectEntryPoint.cs @@ -1,4 +1,4 @@ -using System.Linq; +using MediaBrowser.Common; using MediaBrowser.Common.Configuration; using MediaBrowser.Common.Net; using MediaBrowser.Controller.Connect; @@ -22,14 +22,16 @@ namespace MediaBrowser.Server.Implementations.Connect private readonly IConnectManager _connectManager; private readonly INetworkManager _networkManager; + private readonly IApplicationHost _appHost; - public ConnectEntryPoint(IHttpClient httpClient, IApplicationPaths appPaths, ILogger logger, INetworkManager networkManager, IConnectManager connectManager) + public ConnectEntryPoint(IHttpClient httpClient, IApplicationPaths appPaths, ILogger logger, INetworkManager networkManager, IConnectManager connectManager, IApplicationHost appHost) { _httpClient = httpClient; _appPaths = appPaths; _logger = logger; _networkManager = networkManager; _connectManager = connectManager; + _appHost = appHost; } public void Run() @@ -49,7 +51,8 @@ namespace MediaBrowser.Server.Implementations.Connect { using (var stream = await _httpClient.Get(new HttpRequestOptions { - Url = ipLookupUrl + Url = ipLookupUrl, + UserAgent = "Emby Server/" + _appHost.ApplicationVersion }).ConfigureAwait(false)) { diff --git a/SharedVersion.cs b/SharedVersion.cs index c576e56f1c..c81991d9a7 100644 --- a/SharedVersion.cs +++ b/SharedVersion.cs @@ -1,4 +1,4 @@ using System.Reflection; -[assembly: AssemblyVersion("3.0.*")] -//[assembly: AssemblyVersion("3.0.5621.4")] +//[assembly: AssemblyVersion("3.0.*")] +[assembly: AssemblyVersion("3.0.5641.0")]