From cdf85f69cd50292a9adb738fbf7b62b91edbc628 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Mon, 29 Aug 2016 15:01:38 -0400 Subject: [PATCH 01/64] restore version --- SharedVersion.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SharedVersion.cs b/SharedVersion.cs index 19a055670..baf48338e 100644 --- a/SharedVersion.cs +++ b/SharedVersion.cs @@ -1,4 +1,4 @@ using System.Reflection; //[assembly: AssemblyVersion("3.1.*")] -[assembly: AssemblyVersion("3.1.128")] +[assembly: AssemblyVersion("3.0.6300")] From 5e7a79bc8562a8cd39811e9027507d5ec1646657 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Mon, 29 Aug 2016 15:04:28 -0400 Subject: [PATCH 02/64] 3.0.6400 --- SharedVersion.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SharedVersion.cs b/SharedVersion.cs index baf48338e..450a356e7 100644 --- a/SharedVersion.cs +++ b/SharedVersion.cs @@ -1,4 +1,4 @@ using System.Reflection; //[assembly: AssemblyVersion("3.1.*")] -[assembly: AssemblyVersion("3.0.6300")] +[assembly: AssemblyVersion("3.0.6400")] From eb117f0794a71539d552b94f5409721f6f6addd1 Mon Sep 17 00:00:00 2001 From: Edoardo Putti Date: Tue, 30 Aug 2016 15:09:18 -0400 Subject: [PATCH 03/64] change path to include Model dependency --- .../MediaBrowser.Model.net35.csproj | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/MediaBrowser.Model.net35/MediaBrowser.Model.net35.csproj b/MediaBrowser.Model.net35/MediaBrowser.Model.net35.csproj index 7df8f3126..ad3811646 100644 --- a/MediaBrowser.Model.net35/MediaBrowser.Model.net35.csproj +++ b/MediaBrowser.Model.net35/MediaBrowser.Model.net35.csproj @@ -51,7 +51,7 @@ - + Activity\ActivityLogEntry.cs @@ -249,7 +249,7 @@ Connect\PinStatusResult.cs - + Connect\UserLinkType.cs @@ -948,7 +948,7 @@ Querying\UserQuery.cs - + Registration\RegistrationInfo.cs @@ -1020,7 +1020,7 @@ Session\UserDataChangeInfo.cs - + Social\SocialShareInfo.cs @@ -1193,4 +1193,4 @@ --> - \ No newline at end of file + From 8db547399087cbbd6658108b8e270621943cd4b4 Mon Sep 17 00:00:00 2001 From: Fredrik Zetterlund Date: Fri, 2 Sep 2016 15:52:08 +0200 Subject: [PATCH 04/64] Update correct property --- MediaBrowser.Model/ApiClient/ServerCredentials.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MediaBrowser.Model/ApiClient/ServerCredentials.cs b/MediaBrowser.Model/ApiClient/ServerCredentials.cs index 19f68445e..ddeb7e546 100644 --- a/MediaBrowser.Model/ApiClient/ServerCredentials.cs +++ b/MediaBrowser.Model/ApiClient/ServerCredentials.cs @@ -67,7 +67,7 @@ namespace MediaBrowser.Model.ApiClient } if (!string.IsNullOrEmpty(server.ManualAddress)) { - existing.LocalAddress = server.ManualAddress; + existing.ManualAddress = server.ManualAddress; } if (!string.IsNullOrEmpty(server.Name)) { From ecc1ac78bb2e537e8dffd5af8258367fe7ee137a Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Fri, 9 Sep 2016 15:41:49 -0400 Subject: [PATCH 05/64] fix merge conflict --- SharedVersion.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SharedVersion.cs b/SharedVersion.cs index 450a356e7..740f3e7cc 100644 --- a/SharedVersion.cs +++ b/SharedVersion.cs @@ -1,4 +1,4 @@ using System.Reflection; //[assembly: AssemblyVersion("3.1.*")] -[assembly: AssemblyVersion("3.0.6400")] +[assembly: AssemblyVersion("3.1.143")] From e821c38cd40d49c679d9a43c791267f2bb2bd5ba Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Fri, 9 Sep 2016 15:44:40 -0400 Subject: [PATCH 06/64] restore version --- SharedVersion.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SharedVersion.cs b/SharedVersion.cs index 740f3e7cc..450a356e7 100644 --- a/SharedVersion.cs +++ b/SharedVersion.cs @@ -1,4 +1,4 @@ using System.Reflection; //[assembly: AssemblyVersion("3.1.*")] -[assembly: AssemblyVersion("3.1.143")] +[assembly: AssemblyVersion("3.0.6400")] From 673b2b997936640932891e2a7dc931609adfeb74 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Fri, 9 Sep 2016 16:23:08 -0400 Subject: [PATCH 07/64] 3.0.7000 --- SharedVersion.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SharedVersion.cs b/SharedVersion.cs index 450a356e7..4a9d17cde 100644 --- a/SharedVersion.cs +++ b/SharedVersion.cs @@ -1,4 +1,4 @@ using System.Reflection; //[assembly: AssemblyVersion("3.1.*")] -[assembly: AssemblyVersion("3.0.6400")] +[assembly: AssemblyVersion("3.0.7000")] From b06d70e88296b19d70662aed507e6a413125f707 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Sat, 10 Sep 2016 02:12:55 -0400 Subject: [PATCH 08/64] 3.0.7100 --- SharedVersion.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SharedVersion.cs b/SharedVersion.cs index 4a9d17cde..4b0bd1810 100644 --- a/SharedVersion.cs +++ b/SharedVersion.cs @@ -1,4 +1,4 @@ using System.Reflection; //[assembly: AssemblyVersion("3.1.*")] -[assembly: AssemblyVersion("3.0.7000")] +[assembly: AssemblyVersion("3.0.7100")] From b0a14a191a19bc990095d28b05a908d11d141b5c Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Thu, 15 Sep 2016 16:30:46 -0400 Subject: [PATCH 09/64] add library monitor error handling --- MediaBrowser.Server.Implementations/IO/LibraryMonitor.cs | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/MediaBrowser.Server.Implementations/IO/LibraryMonitor.cs b/MediaBrowser.Server.Implementations/IO/LibraryMonitor.cs index c87d10ef4..15b4a0d66 100644 --- a/MediaBrowser.Server.Implementations/IO/LibraryMonitor.cs +++ b/MediaBrowser.Server.Implementations/IO/LibraryMonitor.cs @@ -106,7 +106,14 @@ namespace MediaBrowser.Server.Implementations.IO if (refreshPath) { - ReportFileSystemChanged(path); + try + { + ReportFileSystemChanged(path); + } + catch (Exception ex) + { + Logger.ErrorException("Error in ReportFileSystemChanged for {0}", ex, path); + } } } From e20ca8f407fda5be6b17aac9d34a84621ae56e6b Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Thu, 15 Sep 2016 16:31:08 -0400 Subject: [PATCH 10/64] add guide data error handling --- .../LiveTv/Listings/SchedulesDirect.cs | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/MediaBrowser.Server.Implementations/LiveTv/Listings/SchedulesDirect.cs b/MediaBrowser.Server.Implementations/LiveTv/Listings/SchedulesDirect.cs index 1a5ebedc2..fd2e32cca 100644 --- a/MediaBrowser.Server.Implementations/LiveTv/Listings/SchedulesDirect.cs +++ b/MediaBrowser.Server.Implementations/LiveTv/Listings/SchedulesDirect.cs @@ -315,9 +315,14 @@ namespace MediaBrowser.Server.Implementations.LiveTv.Listings channelNumber = channelNumber.TrimStart('0'); _logger.Debug("Found channel: " + channelNumber + " in Schedules Direct"); - var schChannel = root.stations.FirstOrDefault(item => item.stationID == map.stationID); - - AddToChannelPairCache(listingsId, channelNumber, schChannel); + if (root.stations != null) + { + var schChannel = root.stations.FirstOrDefault(item => string.Equals(item.stationID, map.stationID, StringComparison.OrdinalIgnoreCase)); + if (schChannel != null) + { + AddToChannelPairCache(listingsId, channelNumber, schChannel); + } + } } _logger.Info("Added " + GetChannelPairCacheCount(listingsId) + " channels to the dictionary"); From dc45d342ed8b0af04d6b7ea4eca519dd1cfba5cb Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Sat, 17 Sep 2016 00:22:37 -0400 Subject: [PATCH 11/64] fix web socket session creation --- MediaBrowser.Api/ConnectService.cs | 34 ++++++++++++++++--- .../Session/AuthenticationRequest.cs | 1 + .../Session/SessionManager.cs | 15 ++++++-- 3 files changed, 43 insertions(+), 7 deletions(-) diff --git a/MediaBrowser.Api/ConnectService.cs b/MediaBrowser.Api/ConnectService.cs index 4bcd33d9e..494a6e756 100644 --- a/MediaBrowser.Api/ConnectService.cs +++ b/MediaBrowser.Api/ConnectService.cs @@ -7,6 +7,7 @@ using ServiceStack; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; +using MediaBrowser.Controller.Session; namespace MediaBrowser.Api { @@ -76,12 +77,12 @@ namespace MediaBrowser.Api public class ConnectService : BaseApiService { private readonly IConnectManager _connectManager; - private readonly IUserManager _userManager; + private readonly ISessionManager _sessionManager; - public ConnectService(IConnectManager connectManager, IUserManager userManager) + public ConnectService(IConnectManager connectManager, ISessionManager sessionManager) { _connectManager = connectManager; - _userManager = userManager; + _sessionManager = sessionManager; } public object Post(CreateConnectLink request) @@ -141,10 +142,33 @@ namespace MediaBrowser.Api throw new ResourceNotFoundException(); } + var auth = AuthorizationContext.GetAuthorizationInfo(Request); + + if (string.IsNullOrWhiteSpace(auth.Client)) + { + return ToOptimizedResult(new ConnectAuthenticationExchangeResult + { + AccessToken = user.ConnectAccessKey, + LocalUserId = user.Id.ToString("N") + }); + } + + var session = await _sessionManager.CreateNewSession(new AuthenticationRequest + { + App = auth.Client, + AppVersion = auth.Version, + DeviceId = auth.DeviceId, + DeviceName = auth.Device, + RemoteEndPoint = Request.RemoteIp, + Username = user.Name, + UserId = user.Id.ToString("N") + + }).ConfigureAwait(false); + return ToOptimizedResult(new ConnectAuthenticationExchangeResult { - AccessToken = user.ConnectAccessKey, - LocalUserId = user.Id.ToString("N") + AccessToken = session.AccessToken, + LocalUserId = session.User.Id }); } } diff --git a/MediaBrowser.Controller/Session/AuthenticationRequest.cs b/MediaBrowser.Controller/Session/AuthenticationRequest.cs index bfd7f928b..362f5b2b9 100644 --- a/MediaBrowser.Controller/Session/AuthenticationRequest.cs +++ b/MediaBrowser.Controller/Session/AuthenticationRequest.cs @@ -4,6 +4,7 @@ namespace MediaBrowser.Controller.Session public class AuthenticationRequest { public string Username { get; set; } + public string UserId { get; set; } public string PasswordSha1 { get; set; } public string PasswordMd5 { get; set; } public string App { get; set; } diff --git a/MediaBrowser.Server.Implementations/Session/SessionManager.cs b/MediaBrowser.Server.Implementations/Session/SessionManager.cs index b21fcddd4..afcdf9d90 100644 --- a/MediaBrowser.Server.Implementations/Session/SessionManager.cs +++ b/MediaBrowser.Server.Implementations/Session/SessionManager.cs @@ -1341,8 +1341,19 @@ namespace MediaBrowser.Server.Implementations.Session private async Task AuthenticateNewSessionInternal(AuthenticationRequest request, bool enforcePassword) { - var user = _userManager.Users - .FirstOrDefault(i => string.Equals(request.Username, i.Name, StringComparison.OrdinalIgnoreCase)); + User user = null; + if (!string.IsNullOrWhiteSpace(request.UserId)) + { + var idGuid = new Guid(request.UserId); + user = _userManager.Users + .FirstOrDefault(i => i.Id == idGuid); + } + + if (user == null) + { + user = _userManager.Users + .FirstOrDefault(i => string.Equals(request.Username, i.Name, StringComparison.OrdinalIgnoreCase)); + } if (user != null && !string.IsNullOrWhiteSpace(request.DeviceId)) { From 2ce3869fd226f00182531ddb87e5a339a0faf36a Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Sat, 17 Sep 2016 00:25:24 -0400 Subject: [PATCH 12/64] 3.0.7200 --- SharedVersion.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SharedVersion.cs b/SharedVersion.cs index 4b0bd1810..5585fbd2d 100644 --- a/SharedVersion.cs +++ b/SharedVersion.cs @@ -1,4 +1,4 @@ using System.Reflection; //[assembly: AssemblyVersion("3.1.*")] -[assembly: AssemblyVersion("3.0.7100")] +[assembly: AssemblyVersion("3.0.7200")] From b15655a62d514e67815da2ba61e498ae08ecfe34 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Sat, 17 Sep 2016 02:08:13 -0400 Subject: [PATCH 13/64] fix update level migration --- .../Migrations/UpdateLevelMigration.cs | 20 ++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/MediaBrowser.Server.Startup.Common/Migrations/UpdateLevelMigration.cs b/MediaBrowser.Server.Startup.Common/Migrations/UpdateLevelMigration.cs index 4afd5bd34..8483ca904 100644 --- a/MediaBrowser.Server.Startup.Common/Migrations/UpdateLevelMigration.cs +++ b/MediaBrowser.Server.Startup.Common/Migrations/UpdateLevelMigration.cs @@ -6,6 +6,7 @@ using MediaBrowser.Common.Implementations.Updates; using MediaBrowser.Common.Net; using MediaBrowser.Controller; using MediaBrowser.Controller.Configuration; +using MediaBrowser.Model.Logging; using MediaBrowser.Model.Serialization; using MediaBrowser.Model.Updates; @@ -18,17 +19,19 @@ namespace MediaBrowser.Server.Startup.Common.Migrations private readonly IHttpClient _httpClient; private readonly IJsonSerializer _jsonSerializer; private readonly string _releaseAssetFilename; + private readonly ILogger _logger; - public UpdateLevelMigration(IServerConfigurationManager config, IServerApplicationHost appHost, IHttpClient httpClient, IJsonSerializer jsonSerializer, string releaseAssetFilename) + public UpdateLevelMigration(IServerConfigurationManager config, IServerApplicationHost appHost, IHttpClient httpClient, IJsonSerializer jsonSerializer, string releaseAssetFilename, ILogger logger) { _config = config; _appHost = appHost; _httpClient = httpClient; _jsonSerializer = jsonSerializer; _releaseAssetFilename = releaseAssetFilename; + _logger = logger; } - public async void Run() + public async Task Run() { var lastVersion = _config.Configuration.LastVersion; var currentVersion = _appHost.ApplicationVersion; @@ -44,9 +47,9 @@ namespace MediaBrowser.Server.Startup.Common.Migrations await CheckVersion(currentVersion, updateLevel, CancellationToken.None).ConfigureAwait(false); } - catch + catch (Exception ex) { - + _logger.ErrorException("Error in update migration", ex); } } @@ -109,10 +112,13 @@ namespace MediaBrowser.Server.Startup.Common.Migrations private Version ParseVersion(string versionString) { - var parts = versionString.Split('.'); - if (parts.Length == 3) + if (!string.IsNullOrWhiteSpace(versionString)) { - versionString += ".0"; + var parts = versionString.Split('.'); + if (parts.Length == 3) + { + versionString += ".0"; + } } Version version; From 1686443ba6c5bf917f7b0ce60e23bcb8c5166df7 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Sat, 17 Sep 2016 02:08:38 -0400 Subject: [PATCH 14/64] add disposed check to FileRefresher --- MediaBrowser.Server.Implementations/IO/FileRefresher.cs | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/MediaBrowser.Server.Implementations/IO/FileRefresher.cs b/MediaBrowser.Server.Implementations/IO/FileRefresher.cs index 2f4605c5c..8e28aa2a0 100644 --- a/MediaBrowser.Server.Implementations/IO/FileRefresher.cs +++ b/MediaBrowser.Server.Implementations/IO/FileRefresher.cs @@ -68,6 +68,11 @@ namespace MediaBrowser.Server.Implementations.IO lock (_timerLock) { + if (_disposed) + { + return; + } + if (_timer == null) { _timer = new Timer(OnTimerCallback, null, TimeSpan.FromSeconds(ConfigurationManager.Configuration.LibraryMonitorDelay), TimeSpan.FromMilliseconds(-1)); @@ -287,6 +292,7 @@ namespace MediaBrowser.Server.Implementations.IO if (_timer != null) { _timer.Dispose(); + _timer = null; } } } From 4394177c7697b0fa835b23e40d26499f1355cda0 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Tue, 20 Sep 2016 11:21:09 -0400 Subject: [PATCH 15/64] normalize subtitle names --- .../Probing/ProbeResultNormalizer.cs | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/MediaBrowser.MediaEncoding/Probing/ProbeResultNormalizer.cs b/MediaBrowser.MediaEncoding/Probing/ProbeResultNormalizer.cs index 700af682b..5805127e6 100644 --- a/MediaBrowser.MediaEncoding/Probing/ProbeResultNormalizer.cs +++ b/MediaBrowser.MediaEncoding/Probing/ProbeResultNormalizer.cs @@ -393,6 +393,20 @@ namespace MediaBrowser.MediaEncoding.Probing }; } + private string NormalizeSubtitleCodec(string codec) + { + if ((codec ?? string.Empty).IndexOf("PGS", StringComparison.OrdinalIgnoreCase) != -1) + { + codec = "PGSSUB"; + } + else if ((codec ?? string.Empty).IndexOf("DVD", StringComparison.OrdinalIgnoreCase) != -1) + { + codec = "DVDSUB"; + } + + return codec; + } + /// /// Converts ffprobe stream info to our MediaStream class /// @@ -474,6 +488,7 @@ namespace MediaBrowser.MediaEncoding.Probing else if (string.Equals(streamInfo.codec_type, "subtitle", StringComparison.OrdinalIgnoreCase)) { stream.Type = MediaStreamType.Subtitle; + stream.Codec = NormalizeSubtitleCodec(stream.Codec); } else if (string.Equals(streamInfo.codec_type, "video", StringComparison.OrdinalIgnoreCase)) { From 043ebd8f1443cf012023f90484687c6da123f651 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Tue, 20 Sep 2016 15:43:27 -0400 Subject: [PATCH 16/64] update library monitor --- .../IO/FileRefresher.cs | 4 +++- .../IO/LibraryMonitor.cs | 15 ++++++++++++++- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/MediaBrowser.Server.Implementations/IO/FileRefresher.cs b/MediaBrowser.Server.Implementations/IO/FileRefresher.cs index 8e28aa2a0..3df7a03d4 100644 --- a/MediaBrowser.Server.Implementations/IO/FileRefresher.cs +++ b/MediaBrowser.Server.Implementations/IO/FileRefresher.cs @@ -12,6 +12,7 @@ using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Library; using MediaBrowser.Model.Logging; using MediaBrowser.Server.Implementations.ScheduledTasks; +using MoreLinq; namespace MediaBrowser.Server.Implementations.IO { @@ -136,9 +137,10 @@ namespace MediaBrowser.Server.Implementations.IO private async Task ProcessPathChanges(List paths) { var itemsToRefresh = paths + .Distinct(StringComparer.OrdinalIgnoreCase) .Select(GetAffectedBaseItem) .Where(item => item != null) - .Distinct() + .DistinctBy(i => i.Id) .ToList(); foreach (var p in paths) diff --git a/MediaBrowser.Server.Implementations/IO/LibraryMonitor.cs b/MediaBrowser.Server.Implementations/IO/LibraryMonitor.cs index 15b4a0d66..e864450d4 100644 --- a/MediaBrowser.Server.Implementations/IO/LibraryMonitor.cs +++ b/MediaBrowser.Server.Implementations/IO/LibraryMonitor.cs @@ -420,7 +420,20 @@ namespace MediaBrowser.Server.Implementations.IO { Logger.Debug("Changed detected of type " + e.ChangeType + " to " + e.FullPath); - ReportFileSystemChanged(e.FullPath); + var path = e.FullPath; + + // For deletes, use the parent path + if (e.ChangeType == WatcherChangeTypes.Deleted) + { + var parentPath = Path.GetDirectoryName(path); + + if (!string.IsNullOrWhiteSpace(parentPath)) + { + path = parentPath; + } + } + + ReportFileSystemChanged(path); } catch (Exception ex) { From 6f08e2152fa930b484705718cc3af1c7ed9ed340 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Fri, 23 Sep 2016 01:45:14 -0400 Subject: [PATCH 17/64] fix EnableThrottling override --- MediaBrowser.Api/Playback/BaseStreamingService.cs | 2 +- MediaBrowser.Api/Playback/Hls/DynamicHlsService.cs | 5 ----- 2 files changed, 1 insertion(+), 6 deletions(-) diff --git a/MediaBrowser.Api/Playback/BaseStreamingService.cs b/MediaBrowser.Api/Playback/BaseStreamingService.cs index 7a40d5bd1..39f361458 100644 --- a/MediaBrowser.Api/Playback/BaseStreamingService.cs +++ b/MediaBrowser.Api/Playback/BaseStreamingService.cs @@ -1226,7 +1226,7 @@ namespace MediaBrowser.Api.Playback } } - protected virtual bool EnableThrottling(StreamState state) + private bool EnableThrottling(StreamState state) { // do not use throttling with hardware encoders return state.InputProtocol == MediaProtocol.File && diff --git a/MediaBrowser.Api/Playback/Hls/DynamicHlsService.cs b/MediaBrowser.Api/Playback/Hls/DynamicHlsService.cs index 7de309699..9cd55528d 100644 --- a/MediaBrowser.Api/Playback/Hls/DynamicHlsService.cs +++ b/MediaBrowser.Api/Playback/Hls/DynamicHlsService.cs @@ -922,11 +922,6 @@ namespace MediaBrowser.Api.Playback.Hls ).Trim(); } - protected override bool EnableThrottling(StreamState state) - { - return true; - } - /// /// Gets the segment file extension. /// From 9b937ebb9c286ea0ecef3ef20d7d4f727f4179b1 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Fri, 30 Sep 2016 23:33:26 -0400 Subject: [PATCH 18/64] fix really high audio encoding bitrate --- .../Playback/BaseStreamingService.cs | 3 +- MediaBrowser.Model/Dlna/StreamBuilder.cs | 37 ++++++++----------- 2 files changed, 18 insertions(+), 22 deletions(-) diff --git a/MediaBrowser.Api/Playback/BaseStreamingService.cs b/MediaBrowser.Api/Playback/BaseStreamingService.cs index 39f361458..0b0b23e12 100644 --- a/MediaBrowser.Api/Playback/BaseStreamingService.cs +++ b/MediaBrowser.Api/Playback/BaseStreamingService.cs @@ -1440,7 +1440,8 @@ namespace MediaBrowser.Api.Playback // Make sure we don't request a bitrate higher than the source var currentBitrate = audioStream == null ? request.AudioBitRate.Value : audioStream.BitRate ?? request.AudioBitRate.Value; - return request.AudioBitRate.Value; + // Don't encode any higher than this + return Math.Min(384000, request.AudioBitRate.Value); //return Math.Min(currentBitrate, request.AudioBitRate.Value); } diff --git a/MediaBrowser.Model/Dlna/StreamBuilder.cs b/MediaBrowser.Model/Dlna/StreamBuilder.cs index 13d559773..bd186b5e5 100644 --- a/MediaBrowser.Model/Dlna/StreamBuilder.cs +++ b/MediaBrowser.Model/Dlna/StreamBuilder.cs @@ -602,33 +602,20 @@ namespace MediaBrowser.Model.Dlna private int GetAudioBitrate(string subProtocol, int? maxTotalBitrate, int? targetAudioChannels, string targetAudioCodec, MediaStream audioStream) { - var defaultBitrate = audioStream == null ? 192000 : audioStream.BitRate ?? 192000; + int defaultBitrate = audioStream == null ? 192000 : audioStream.BitRate ?? 192000; // Reduce the bitrate if we're downmixing if (targetAudioChannels.HasValue && audioStream != null && audioStream.Channels.HasValue && targetAudioChannels.Value < audioStream.Channels.Value) { defaultBitrate = StringHelper.EqualsIgnoreCase(targetAudioCodec, "ac3") ? 192000 : 128000; } - if (targetAudioChannels.HasValue) + if (StringHelper.EqualsIgnoreCase(subProtocol, "hls")) { - if (targetAudioChannels.Value >= 5 && (maxTotalBitrate ?? 0) >= 1200000) - { - if (StringHelper.EqualsIgnoreCase(targetAudioCodec, "ac3")) - { - if (string.Equals(subProtocol, "hls", StringComparison.OrdinalIgnoreCase)) - { - defaultBitrate = Math.Max(384000, defaultBitrate); - } - else - { - defaultBitrate = Math.Max(448000, defaultBitrate); - } - } - else - { - defaultBitrate = Math.Max(320000, defaultBitrate); - } - } + defaultBitrate = Math.Min(384000, defaultBitrate); + } + else + { + defaultBitrate = Math.Min(448000, defaultBitrate); } int encoderAudioBitrateLimit = int.MaxValue; @@ -647,6 +634,14 @@ namespace MediaBrowser.Model.Dlna } } + if (maxTotalBitrate.HasValue) + { + if (maxTotalBitrate.Value < 640000) + { + defaultBitrate = Math.Min(128000, defaultBitrate); + } + } + return Math.Min(defaultBitrate, encoderAudioBitrateLimit); } @@ -1223,4 +1218,4 @@ namespace MediaBrowser.Model.Dlna return true; } } -} +} \ No newline at end of file From 24d0c0bf1e8cb7eb3aec671f536b48ea773f3109 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Fri, 30 Sep 2016 23:33:47 -0400 Subject: [PATCH 19/64] fix scheduled tasks not honoring time limit --- .../ScheduledTasks/ScheduledTaskWorker.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MediaBrowser.Common.Implementations/ScheduledTasks/ScheduledTaskWorker.cs b/MediaBrowser.Common.Implementations/ScheduledTasks/ScheduledTaskWorker.cs index 798e18ef5..e6b6bc2e3 100644 --- a/MediaBrowser.Common.Implementations/ScheduledTasks/ScheduledTaskWorker.cs +++ b/MediaBrowser.Common.Implementations/ScheduledTasks/ScheduledTaskWorker.cs @@ -334,7 +334,7 @@ namespace MediaBrowser.Common.Implementations.ScheduledTasks trigger.Stop(); - TaskManager.QueueScheduledTask(ScheduledTask); + TaskManager.QueueScheduledTask(ScheduledTask, e.Argument); await Task.Delay(1000).ConfigureAwait(false); From b6254996cc55b93c0236271c2003ebfcd6fedfa4 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Fri, 30 Sep 2016 23:34:05 -0400 Subject: [PATCH 20/64] add synology ignore --- MediaBrowser.Server.Implementations/IO/LibraryMonitor.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/MediaBrowser.Server.Implementations/IO/LibraryMonitor.cs b/MediaBrowser.Server.Implementations/IO/LibraryMonitor.cs index e864450d4..dffaec458 100644 --- a/MediaBrowser.Server.Implementations/IO/LibraryMonitor.cs +++ b/MediaBrowser.Server.Implementations/IO/LibraryMonitor.cs @@ -49,7 +49,8 @@ namespace MediaBrowser.Server.Implementations.IO private readonly IReadOnlyList _alwaysIgnoreSubstrings = new List { // Synology - "@eaDir", + "eaDir", + "#recycle", ".wd_tv", ".actors" }; From 9830d067a2f0a717ad7d7393ce3bd5752ca471ff Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Fri, 30 Sep 2016 23:34:24 -0400 Subject: [PATCH 21/64] exclude backdrops from photos --- .../Library/Resolvers/PhotoResolver.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/MediaBrowser.Server.Implementations/Library/Resolvers/PhotoResolver.cs b/MediaBrowser.Server.Implementations/Library/Resolvers/PhotoResolver.cs index 3f9475480..2eb274252 100644 --- a/MediaBrowser.Server.Implementations/Library/Resolvers/PhotoResolver.cs +++ b/MediaBrowser.Server.Implementations/Library/Resolvers/PhotoResolver.cs @@ -89,7 +89,7 @@ namespace MediaBrowser.Server.Implementations.Library.Resolvers return false; } - if (IgnoreFiles.Any(i => filename.IndexOf("-" + i, StringComparison.OrdinalIgnoreCase) != -1)) + if (IgnoreFiles.Any(i => filename.IndexOf(i, StringComparison.OrdinalIgnoreCase) != -1)) { return false; } @@ -98,4 +98,4 @@ namespace MediaBrowser.Server.Implementations.Library.Resolvers } } -} +} \ No newline at end of file From 5309f9d2bba3b39e0e1027d45c6d6723924d5075 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Fri, 30 Sep 2016 23:34:43 -0400 Subject: [PATCH 22/64] update episode nfo saver --- .../Savers/EpisodeNfoSaver.cs | 28 +++++++++---------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/MediaBrowser.XbmcMetadata/Savers/EpisodeNfoSaver.cs b/MediaBrowser.XbmcMetadata/Savers/EpisodeNfoSaver.cs index d57d22d5c..0dfcd9ce5 100644 --- a/MediaBrowser.XbmcMetadata/Savers/EpisodeNfoSaver.cs +++ b/MediaBrowser.XbmcMetadata/Savers/EpisodeNfoSaver.cs @@ -64,21 +64,21 @@ namespace MediaBrowser.XbmcMetadata.Savers writer.WriteElementString("aired", episode.PremiereDate.Value.ToLocalTime().ToString(formatString)); } - if (episode.AirsAfterSeasonNumber.HasValue && episode.AirsAfterSeasonNumber.Value != -1) + if (!episode.ParentIndexNumber.HasValue || episode.ParentIndexNumber.Value == 0) { - writer.WriteElementString("airsafter_season", episode.AirsAfterSeasonNumber.Value.ToString(UsCulture)); - } - if (episode.AirsBeforeEpisodeNumber.HasValue && episode.AirsBeforeEpisodeNumber.Value != -1) - { - writer.WriteElementString("airsbefore_episode", episode.AirsBeforeEpisodeNumber.Value.ToString(UsCulture)); - } - if (episode.AirsBeforeSeasonNumber.HasValue && episode.AirsBeforeSeasonNumber.Value != -1) - { - writer.WriteElementString("airsbefore_season", episode.AirsBeforeSeasonNumber.Value.ToString(UsCulture)); - } + if (episode.AirsAfterSeasonNumber.HasValue && episode.AirsAfterSeasonNumber.Value != -1) + { + writer.WriteElementString("airsafter_season", episode.AirsAfterSeasonNumber.Value.ToString(UsCulture)); + } + if (episode.AirsBeforeEpisodeNumber.HasValue && episode.AirsBeforeEpisodeNumber.Value != -1) + { + writer.WriteElementString("airsbefore_episode", episode.AirsBeforeEpisodeNumber.Value.ToString(UsCulture)); + } + if (episode.AirsBeforeSeasonNumber.HasValue && episode.AirsBeforeSeasonNumber.Value != -1) + { + writer.WriteElementString("airsbefore_season", episode.AirsBeforeSeasonNumber.Value.ToString(UsCulture)); + } - if (episode.ParentIndexNumber.HasValue && episode.ParentIndexNumber.Value == 0) - { if (episode.AirsBeforeEpisodeNumber.HasValue && episode.AirsBeforeEpisodeNumber.Value != -1) { writer.WriteElementString("displayepisode", episode.AirsBeforeEpisodeNumber.Value.ToString(UsCulture)); @@ -130,4 +130,4 @@ namespace MediaBrowser.XbmcMetadata.Savers return list; } } -} +} \ No newline at end of file From b1b0438d055273dc237b989ab2b9349056e711f2 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Fri, 30 Sep 2016 23:41:50 -0400 Subject: [PATCH 23/64] fix update level migration --- .../ApplicationHost.cs | 16 ++++++++++------ .../Migrations/DbMigration.cs | 2 +- .../Migrations/IVersionMigration.cs | 5 +++-- .../MovieDbEpisodeProviderMigration.cs | 3 ++- 4 files changed, 16 insertions(+), 10 deletions(-) diff --git a/MediaBrowser.Server.Startup.Common/ApplicationHost.cs b/MediaBrowser.Server.Startup.Common/ApplicationHost.cs index 433855ea0..49013131e 100644 --- a/MediaBrowser.Server.Startup.Common/ApplicationHost.cs +++ b/MediaBrowser.Server.Startup.Common/ApplicationHost.cs @@ -310,11 +310,16 @@ namespace MediaBrowser.Server.Startup.Common LogManager.ExceptionMessagePrefix = builder.ToString(); } + /// + /// Runs the startup tasks. + /// /// /// Runs the startup tasks. /// public override async Task RunStartupTasks() { + await PerformPreInitMigrations().ConfigureAwait(false); + if (ServerConfigurationManager.Configuration.MigrationVersion < CleanDatabaseScheduledTask.MigrationVersion && ServerConfigurationManager.Configuration.IsStartupWizardCompleted) { @@ -345,6 +350,7 @@ namespace MediaBrowser.Server.Startup.Common { var name = entryPoint.GetType().FullName; Logger.Info("Starting entry point {0}", name); + var now = DateTime.UtcNow; try { entryPoint.Run(); @@ -353,7 +359,7 @@ namespace MediaBrowser.Server.Startup.Common { Logger.ErrorException("Error in {0}", ex, name); } - Logger.Info("Entry point completed: {0}", name); + Logger.Info("Entry point completed: {0}. Duration: {1} seconds", name, (DateTime.UtcNow - now).TotalSeconds.ToString(CultureInfo.InvariantCulture)); } Logger.Info("All entry points have started"); @@ -365,23 +371,21 @@ namespace MediaBrowser.Server.Startup.Common HttpPort = ServerConfigurationManager.Configuration.HttpServerPortNumber; HttpsPort = ServerConfigurationManager.Configuration.HttpsPortNumber; - PerformPreInitMigrations(); - return base.Init(progress); } - private void PerformPreInitMigrations() + private async Task PerformPreInitMigrations() { var migrations = new List { - new UpdateLevelMigration(ServerConfigurationManager, this, HttpClient, JsonSerializer, _releaseAssetFilename) + new UpdateLevelMigration(ServerConfigurationManager, this, HttpClient, JsonSerializer, _releaseAssetFilename, Logger) }; foreach (var task in migrations) { try { - task.Run(); + await task.Run().ConfigureAwait(false); } catch (Exception ex) { diff --git a/MediaBrowser.Server.Startup.Common/Migrations/DbMigration.cs b/MediaBrowser.Server.Startup.Common/Migrations/DbMigration.cs index f0cb9e84e..6bcdcca87 100644 --- a/MediaBrowser.Server.Startup.Common/Migrations/DbMigration.cs +++ b/MediaBrowser.Server.Startup.Common/Migrations/DbMigration.cs @@ -16,7 +16,7 @@ namespace MediaBrowser.Server.Startup.Common.Migrations _taskManager = taskManager; } - public void Run() + public async Task Run() { // If a forced migration is required, do that now if (_config.Configuration.MigrationVersion < CleanDatabaseScheduledTask.MigrationVersion) diff --git a/MediaBrowser.Server.Startup.Common/Migrations/IVersionMigration.cs b/MediaBrowser.Server.Startup.Common/Migrations/IVersionMigration.cs index a6a8c1a35..6ef08fae9 100644 --- a/MediaBrowser.Server.Startup.Common/Migrations/IVersionMigration.cs +++ b/MediaBrowser.Server.Startup.Common/Migrations/IVersionMigration.cs @@ -1,8 +1,9 @@ - +using System.Threading.Tasks; + namespace MediaBrowser.Server.Startup.Common.Migrations { public interface IVersionMigration { - void Run(); + Task Run(); } } diff --git a/MediaBrowser.Server.Startup.Common/Migrations/MovieDbEpisodeProviderMigration.cs b/MediaBrowser.Server.Startup.Common/Migrations/MovieDbEpisodeProviderMigration.cs index 3ad5f577f..cd2122e57 100644 --- a/MediaBrowser.Server.Startup.Common/Migrations/MovieDbEpisodeProviderMigration.cs +++ b/MediaBrowser.Server.Startup.Common/Migrations/MovieDbEpisodeProviderMigration.cs @@ -1,5 +1,6 @@ using MediaBrowser.Controller.Configuration; using System.Linq; +using System.Threading.Tasks; namespace MediaBrowser.Server.Startup.Common.Migrations { @@ -13,7 +14,7 @@ namespace MediaBrowser.Server.Startup.Common.Migrations _config = config; } - public void Run() + public async Task Run() { var migrationKey = this.GetType().FullName; var migrationKeyList = _config.Configuration.Migrations.ToList(); From 0b5a1418c1fef675bdbf065339d712f51e39f7af Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Sat, 1 Oct 2016 00:15:51 -0400 Subject: [PATCH 24/64] 3.0.7300 --- SharedVersion.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SharedVersion.cs b/SharedVersion.cs index 5585fbd2d..03f861f34 100644 --- a/SharedVersion.cs +++ b/SharedVersion.cs @@ -1,4 +1,4 @@ using System.Reflection; //[assembly: AssemblyVersion("3.1.*")] -[assembly: AssemblyVersion("3.0.7200")] +[assembly: AssemblyVersion("3.0.7300")] From c86bd9026dcd36b5cf02e6ca9245695084f7f5b6 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Sat, 1 Oct 2016 14:49:11 -0400 Subject: [PATCH 25/64] fixes #2193 - More raw image format support --- Emby.Drawing/ImageMagick/ImageMagickEncoder.cs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/Emby.Drawing/ImageMagick/ImageMagickEncoder.cs b/Emby.Drawing/ImageMagick/ImageMagickEncoder.cs index 3dbe7239d..c1881895f 100644 --- a/Emby.Drawing/ImageMagick/ImageMagickEncoder.cs +++ b/Emby.Drawing/ImageMagick/ImageMagickEncoder.cs @@ -53,7 +53,10 @@ namespace Emby.Drawing.ImageMagick "arw", "webp", "gif", - "bmp" + "bmp", + "erf", + "raf", + "rw2" }; } } From 6cc1f11a697f3fbada2218d40f3592b0fc36b4c1 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Sat, 1 Oct 2016 15:54:33 -0400 Subject: [PATCH 26/64] disable user data sync by default --- MediaBrowser.Api/StartupWizardService.cs | 6 ------ 1 file changed, 6 deletions(-) diff --git a/MediaBrowser.Api/StartupWizardService.cs b/MediaBrowser.Api/StartupWizardService.cs index ef898eb53..176b497d7 100644 --- a/MediaBrowser.Api/StartupWizardService.cs +++ b/MediaBrowser.Api/StartupWizardService.cs @@ -148,12 +148,6 @@ namespace MediaBrowser.Api { var user = _userManager.Users.First(); - // TODO: This should be handled internally by xbmc metadata - const string metadataKey = "xbmcmetadata"; - var metadata = _config.GetConfiguration(metadataKey); - metadata.UserId = user.Id.ToString("N"); - _config.SaveConfiguration(metadataKey, metadata); - user.Name = request.Name; await _userManager.UpdateUser(user).ConfigureAwait(false); From 5f16d862d35feb179fd7788cf5d657c49726992c Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Wed, 12 Oct 2016 15:14:26 -0400 Subject: [PATCH 27/64] fix merge conflit --- Emby.Drawing/ImageMagick/ImageMagickEncoder.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Emby.Drawing/ImageMagick/ImageMagickEncoder.cs b/Emby.Drawing/ImageMagick/ImageMagickEncoder.cs index c1881895f..9820829ae 100644 --- a/Emby.Drawing/ImageMagick/ImageMagickEncoder.cs +++ b/Emby.Drawing/ImageMagick/ImageMagickEncoder.cs @@ -56,7 +56,8 @@ namespace Emby.Drawing.ImageMagick "bmp", "erf", "raf", - "rw2" + "rw2", + "nrw" }; } } From 0fcceecaf69da3bd75d3d0e11f214a287bb77a8b Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Wed, 12 Oct 2016 15:39:01 -0400 Subject: [PATCH 28/64] fix merge conflicts --- .../LiveTv/Listings/SchedulesDirect.cs | 145 +++++++++++++----- 1 file changed, 103 insertions(+), 42 deletions(-) diff --git a/MediaBrowser.Server.Implementations/LiveTv/Listings/SchedulesDirect.cs b/MediaBrowser.Server.Implementations/LiveTv/Listings/SchedulesDirect.cs index fd2e32cca..7574eb485 100644 --- a/MediaBrowser.Server.Implementations/LiveTv/Listings/SchedulesDirect.cs +++ b/MediaBrowser.Server.Implementations/LiveTv/Listings/SchedulesDirect.cs @@ -166,7 +166,17 @@ namespace MediaBrowser.Server.Implementations.LiveTv.Listings var imageIndex = images.FindIndex(i => i.programID == schedule.programID.Substring(0, 10)); if (imageIndex > -1) { - programDict[schedule.programID].images = GetProgramLogo(ApiUrl, images[imageIndex]); + var programEntry = programDict[schedule.programID]; + + var data = images[imageIndex].data ?? new List(); + data = data.OrderByDescending(GetSizeOrder).ToList(); + + programEntry.primaryImage = GetProgramImage(ApiUrl, data, "Logo", true, 600); + //programEntry.thumbImage = GetProgramImage(ApiUrl, data, "Iconic", false); + //programEntry.bannerImage = GetProgramImage(ApiUrl, data, "Banner", false) ?? + // GetProgramImage(ApiUrl, data, "Banner-L1", false) ?? + // GetProgramImage(ApiUrl, data, "Banner-LO", false) ?? + // GetProgramImage(ApiUrl, data, "Banner-LOT", false); } } @@ -179,6 +189,20 @@ namespace MediaBrowser.Server.Implementations.LiveTv.Listings return programsInfo; } + private int GetSizeOrder(ScheduleDirect.ImageData image) + { + if (!string.IsNullOrWhiteSpace(image.height)) + { + int value; + if (int.TryParse(image.height, out value)) + { + return value; + } + } + + return 0; + } + private readonly object _channelCacheLock = new object(); private ScheduleDirect.Station GetStation(string listingsId, string channelNumber, string channelName) { @@ -315,13 +339,18 @@ namespace MediaBrowser.Server.Implementations.LiveTv.Listings channelNumber = channelNumber.TrimStart('0'); _logger.Debug("Found channel: " + channelNumber + " in Schedules Direct"); - if (root.stations != null) + + var schChannel = (root.stations ?? new List()).FirstOrDefault(item => string.Equals(item.stationID, map.stationID, StringComparison.OrdinalIgnoreCase)); + if (schChannel != null) { - var schChannel = root.stations.FirstOrDefault(item => string.Equals(item.stationID, map.stationID, StringComparison.OrdinalIgnoreCase)); - if (schChannel != null) + AddToChannelPairCache(listingsId, channelNumber, schChannel); + } + else + { + AddToChannelPairCache(listingsId, channelNumber, new ScheduleDirect.Station { - AddToChannelPairCache(listingsId, channelNumber, schChannel); - } + stationID = map.stationID + }); } } _logger.Info("Added " + GetChannelPairCacheCount(listingsId) + " channels to the dictionary"); @@ -337,8 +366,11 @@ namespace MediaBrowser.Server.Implementations.LiveTv.Listings channel.ImageUrl = station.logo.URL; channel.HasImage = true; } - string channelName = station.name; - channel.Name = channelName; + + if (!string.IsNullOrWhiteSpace(station.name)) + { + channel.Name = station.name; + } } else { @@ -389,13 +421,6 @@ namespace MediaBrowser.Server.Implementations.LiveTv.Listings episodeTitle = details.episodeTitle150; } - string imageUrl = null; - - if (details.hasImageArtwork) - { - imageUrl = details.images; - } - var showType = details.showType ?? string.Empty; var info = new ProgramInfo @@ -411,7 +436,7 @@ namespace MediaBrowser.Server.Implementations.LiveTv.Listings Audio = audioType, IsRepeat = repeat, IsSeries = showType.IndexOf("series", StringComparison.OrdinalIgnoreCase) != -1, - ImageUrl = imageUrl, + ImageUrl = details.primaryImage, IsKids = string.Equals(details.audience, "children", StringComparison.OrdinalIgnoreCase), IsSports = showType.IndexOf("sports", StringComparison.OrdinalIgnoreCase) != -1, IsMovie = showType.IndexOf("movie", StringComparison.OrdinalIgnoreCase) != -1 || showType.IndexOf("film", StringComparison.OrdinalIgnoreCase) != -1, @@ -460,7 +485,7 @@ namespace MediaBrowser.Server.Implementations.LiveTv.Listings } } - if (!string.IsNullOrWhiteSpace(details.originalAirDate)) + if (!string.IsNullOrWhiteSpace(details.originalAirDate) && (!info.IsSeries || info.IsRepeat)) { info.OriginalAirDate = DateTime.Parse(details.originalAirDate); } @@ -490,36 +515,69 @@ namespace MediaBrowser.Server.Implementations.LiveTv.Listings return date; } - private string GetProgramLogo(string apiUrl, ScheduleDirect.ShowImages images) + private string GetProgramImage(string apiUrl, List images, string category, bool returnDefaultImage, int desiredWidth) { string url = null; - if (images.data != null) - { - var smallImages = images.data.Where(i => i.size == "Sm").ToList(); - if (smallImages.Any()) - { - images.data = smallImages; - } - var logoIndex = images.data.FindIndex(i => i.category == "Logo"); - if (logoIndex == -1) - { - logoIndex = 0; - } - var uri = images.data[logoIndex].uri; - if (!string.IsNullOrWhiteSpace(uri)) + var matches = images + .Where(i => string.Equals(i.category, category, StringComparison.OrdinalIgnoreCase)) + .ToList(); + + if (matches.Count == 0) + { + if (!returnDefaultImage) { - if (uri.IndexOf("http", StringComparison.OrdinalIgnoreCase) != -1) + return null; + } + matches = images; + } + + var match = matches.FirstOrDefault(i => + { + if (!string.IsNullOrWhiteSpace(i.width)) + { + int value; + if (int.TryParse(i.width, out value)) { - url = uri; - } - else - { - url = apiUrl + "/image/" + uri; + return value <= desiredWidth; } } - //_logger.Debug("URL for image is : " + url); + + return false; + }); + + if (match == null) + { + // Get the second lowest quality image, when possible + if (matches.Count > 1) + { + match = matches[matches.Count - 2]; + } + else + { + match = matches.FirstOrDefault(); + } } + + if (match == null) + { + return null; + } + + var uri = match.uri; + + if (!string.IsNullOrWhiteSpace(uri)) + { + if (uri.IndexOf("http", StringComparison.OrdinalIgnoreCase) != -1) + { + url = uri; + } + else + { + url = apiUrl + "/image/" + uri; + } + } + //_logger.Debug("URL for image is : " + url); return url; } @@ -788,7 +846,8 @@ namespace MediaBrowser.Server.Implementations.LiveTv.Listings Url = ApiUrl + "/lineups/" + info.ListingsId, UserAgent = UserAgent, CancellationToken = cancellationToken, - LogErrorResponseBody = true + LogErrorResponseBody = true, + BufferContent = false }; httpOptions.RequestHeaders["token"] = token; @@ -943,7 +1002,7 @@ namespace MediaBrowser.Server.Implementations.LiveTv.Listings var name = channelNumber; var station = GetStation(listingsId, channelNumber, null); - if (station != null) + if (station != null && !string.IsNullOrWhiteSpace(station.name)) { name = station.name; } @@ -1209,7 +1268,9 @@ namespace MediaBrowser.Server.Implementations.LiveTv.Listings public List crew { get; set; } public string showType { get; set; } public bool hasImageArtwork { get; set; } - public string images { get; set; } + public string primaryImage { get; set; } + public string thumbImage { get; set; } + public string bannerImage { get; set; } public string imageID { get; set; } public string md5 { get; set; } public List contentAdvisory { get; set; } From 54cf4cbb4488056577d21be350b5b992962b294b Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Wed, 12 Oct 2016 15:40:19 -0400 Subject: [PATCH 29/64] fix merge conflict --- SharedVersion.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SharedVersion.cs b/SharedVersion.cs index 03f861f34..d08764e30 100644 --- a/SharedVersion.cs +++ b/SharedVersion.cs @@ -1,4 +1,4 @@ using System.Reflection; //[assembly: AssemblyVersion("3.1.*")] -[assembly: AssemblyVersion("3.0.7300")] +[assembly: AssemblyVersion("3.1.187")] From c25179473b5ba7459b043ffba29b16a9a7421c8b Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Wed, 12 Oct 2016 15:41:20 -0400 Subject: [PATCH 30/64] 3.0.8000 --- SharedVersion.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SharedVersion.cs b/SharedVersion.cs index d08764e30..3dfdefd2d 100644 --- a/SharedVersion.cs +++ b/SharedVersion.cs @@ -1,4 +1,4 @@ using System.Reflection; //[assembly: AssemblyVersion("3.1.*")] -[assembly: AssemblyVersion("3.1.187")] +[assembly: AssemblyVersion("3.0.8000")] From 0677d4ec990aee9a3bf7bda39dda01eb6fa66281 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Wed, 12 Oct 2016 15:43:19 -0400 Subject: [PATCH 31/64] fix merge conflict --- SharedVersion.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SharedVersion.cs b/SharedVersion.cs index 3dfdefd2d..d08764e30 100644 --- a/SharedVersion.cs +++ b/SharedVersion.cs @@ -1,4 +1,4 @@ using System.Reflection; //[assembly: AssemblyVersion("3.1.*")] -[assembly: AssemblyVersion("3.0.8000")] +[assembly: AssemblyVersion("3.1.187")] From 3aabe6aa1933a7a9412651e3eff4bc20e97881c3 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Wed, 12 Oct 2016 15:44:06 -0400 Subject: [PATCH 32/64] 3.0.8000 --- SharedVersion.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SharedVersion.cs b/SharedVersion.cs index d08764e30..3dfdefd2d 100644 --- a/SharedVersion.cs +++ b/SharedVersion.cs @@ -1,4 +1,4 @@ using System.Reflection; //[assembly: AssemblyVersion("3.1.*")] -[assembly: AssemblyVersion("3.1.187")] +[assembly: AssemblyVersion("3.0.8000")] From 3f7f33bd5175c644014116891f685dfce542a7e0 Mon Sep 17 00:00:00 2001 From: Luke Date: Wed, 12 Oct 2016 15:49:26 -0400 Subject: [PATCH 33/64] update mac project --- MediaBrowser.Server.Mac/Emby.Server.Mac.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MediaBrowser.Server.Mac/Emby.Server.Mac.csproj b/MediaBrowser.Server.Mac/Emby.Server.Mac.csproj index 36fda1e70..cb3551ca5 100644 --- a/MediaBrowser.Server.Mac/Emby.Server.Mac.csproj +++ b/MediaBrowser.Server.Mac/Emby.Server.Mac.csproj @@ -35,7 +35,7 @@ false false HttpClientHandler - Legacy + Default None true From 94ddbfd57f63cc484d232894bea1e2f183eaaf7e Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Thu, 13 Oct 2016 17:19:38 -0400 Subject: [PATCH 34/64] fix merge conflict --- SharedVersion.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SharedVersion.cs b/SharedVersion.cs index 3dfdefd2d..013a0a589 100644 --- a/SharedVersion.cs +++ b/SharedVersion.cs @@ -1,4 +1,4 @@ using System.Reflection; //[assembly: AssemblyVersion("3.1.*")] -[assembly: AssemblyVersion("3.0.8000")] +[assembly: AssemblyVersion("3.1.188")] From 734d215940da0f3e4e40f68126b5525907198035 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Thu, 13 Oct 2016 17:20:36 -0400 Subject: [PATCH 35/64] 3.0.8100 --- SharedVersion.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SharedVersion.cs b/SharedVersion.cs index 013a0a589..8cdb3e6b5 100644 --- a/SharedVersion.cs +++ b/SharedVersion.cs @@ -1,4 +1,4 @@ using System.Reflection; //[assembly: AssemblyVersion("3.1.*")] -[assembly: AssemblyVersion("3.1.188")] +[assembly: AssemblyVersion("3.0.8100")] From f8a248ffd805b810e90bc5ec0619e53f49ebcae5 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Mon, 17 Oct 2016 12:32:48 -0400 Subject: [PATCH 36/64] fix merge conflict --- SharedVersion.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SharedVersion.cs b/SharedVersion.cs index 8cdb3e6b5..697d0fa9f 100644 --- a/SharedVersion.cs +++ b/SharedVersion.cs @@ -1,4 +1,4 @@ using System.Reflection; //[assembly: AssemblyVersion("3.1.*")] -[assembly: AssemblyVersion("3.0.8100")] +[assembly: AssemblyVersion("3.1.192")] From b90b64aae8966b96cba874c012525401689c1a2f Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Mon, 17 Oct 2016 12:34:11 -0400 Subject: [PATCH 37/64] 3.0.8200 --- SharedVersion.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SharedVersion.cs b/SharedVersion.cs index 697d0fa9f..8e1021c69 100644 --- a/SharedVersion.cs +++ b/SharedVersion.cs @@ -1,4 +1,4 @@ using System.Reflection; //[assembly: AssemblyVersion("3.1.*")] -[assembly: AssemblyVersion("3.1.192")] +[assembly: AssemblyVersion("3.0.8200")] From dd6f9eb43eef952dd4df44f4eb2f86d0d3eb50a8 Mon Sep 17 00:00:00 2001 From: Luke Date: Mon, 17 Oct 2016 16:08:47 -0400 Subject: [PATCH 38/64] update mac --- MediaBrowser.Server.Mac/Emby.Server.Mac.csproj | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/MediaBrowser.Server.Mac/Emby.Server.Mac.csproj b/MediaBrowser.Server.Mac/Emby.Server.Mac.csproj index cb3551ca5..aa86aabbc 100644 --- a/MediaBrowser.Server.Mac/Emby.Server.Mac.csproj +++ b/MediaBrowser.Server.Mac/Emby.Server.Mac.csproj @@ -1692,6 +1692,12 @@ Resources\dashboard-ui\bower_components\emby-webcomponents\refreshdialog\refreshdialog.js + + Resources\dashboard-ui\bower_components\emby-webcomponents\registrationservices\registrationservices.js + + + Resources\dashboard-ui\bower_components\emby-webcomponents\registrationservices\style.css + Resources\dashboard-ui\bower_components\emby-webcomponents\require\requirecss.js @@ -2607,8 +2613,8 @@ Resources\dashboard-ui\bower_components\vibrant\website.coffee - - Resources\dashboard-ui\bower_components\vibrant\dist\Vibrant.js + + Resources\dashboard-ui\bower_components\vibrant\dist\vibrant.js Resources\dashboard-ui\bower_components\vibrant\dist\vibrant.min.js @@ -2673,6 +2679,9 @@ Resources\dashboard-ui\components\humanedate.js + + Resources\dashboard-ui\components\iap.js + Resources\dashboard-ui\components\remotecontrol.js @@ -3396,9 +3405,6 @@ Resources\dashboard-ui\scripts\pluginspage.js - - Resources\dashboard-ui\scripts\registrationservices.js - Resources\dashboard-ui\scripts\remotecontrol.js From 40255e6014d4db18c8683e942ba60d994cd723a7 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Thu, 20 Oct 2016 15:27:27 -0400 Subject: [PATCH 39/64] fix merge conflict --- SharedVersion.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SharedVersion.cs b/SharedVersion.cs index 8e1021c69..0558944c6 100644 --- a/SharedVersion.cs +++ b/SharedVersion.cs @@ -1,4 +1,4 @@ using System.Reflection; //[assembly: AssemblyVersion("3.1.*")] -[assembly: AssemblyVersion("3.0.8200")] +[assembly: AssemblyVersion("3.1.196")] From c0621fd7010fef7df9c1fa8f74bdfaadeb8483ca Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Thu, 20 Oct 2016 15:30:20 -0400 Subject: [PATCH 40/64] 3.0.8300 --- SharedVersion.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SharedVersion.cs b/SharedVersion.cs index 0558944c6..27b43fcbe 100644 --- a/SharedVersion.cs +++ b/SharedVersion.cs @@ -1,4 +1,4 @@ using System.Reflection; //[assembly: AssemblyVersion("3.1.*")] -[assembly: AssemblyVersion("3.1.196")] +[assembly: AssemblyVersion("3.0.8300")] From b7f949a90229f953252742f4054ca1f887a13519 Mon Sep 17 00:00:00 2001 From: Luke Date: Fri, 21 Oct 2016 14:39:52 -0400 Subject: [PATCH 41/64] update mac project --- MediaBrowser.Server.Mac/Emby.Server.Mac.csproj | 6 ------ 1 file changed, 6 deletions(-) diff --git a/MediaBrowser.Server.Mac/Emby.Server.Mac.csproj b/MediaBrowser.Server.Mac/Emby.Server.Mac.csproj index aa86aabbc..6995a5bec 100644 --- a/MediaBrowser.Server.Mac/Emby.Server.Mac.csproj +++ b/MediaBrowser.Server.Mac/Emby.Server.Mac.csproj @@ -690,9 +690,6 @@ Resources\dashboard-ui\wizardlivetvtuner.html - - Resources\dashboard-ui\wizardservice.html - Resources\dashboard-ui\wizardsettings.html @@ -3510,9 +3507,6 @@ Resources\dashboard-ui\scripts\wizardlivetvtuner.js - - Resources\dashboard-ui\scripts\wizardservice.js - Resources\dashboard-ui\scripts\wizardsettings.js From 6b0a59c7dbc038b69788d7457e2a775682a40af6 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Fri, 21 Oct 2016 14:41:49 -0400 Subject: [PATCH 42/64] update saving of production locations --- MediaBrowser.Api/ItemUpdateService.cs | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/MediaBrowser.Api/ItemUpdateService.cs b/MediaBrowser.Api/ItemUpdateService.cs index 78aa5e165..2c2e599d4 100644 --- a/MediaBrowser.Api/ItemUpdateService.cs +++ b/MediaBrowser.Api/ItemUpdateService.cs @@ -295,6 +295,11 @@ namespace MediaBrowser.Api item.OfficialRating = string.IsNullOrWhiteSpace(request.OfficialRating) ? null : request.OfficialRating; item.CustomRating = request.CustomRating; + if (request.ProductionLocations != null) + { + item.ProductionLocations = request.ProductionLocations.ToList(); + } + item.PreferredMetadataCountryCode = request.PreferredMetadataCountryCode; item.PreferredMetadataLanguage = request.PreferredMetadataLanguage; From 7debfaa4bdc849c8577c26f4caec78a763328c29 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Thu, 27 Oct 2016 23:15:34 -0400 Subject: [PATCH 43/64] remove audio channel limit from transcoding conditions --- MediaBrowser.Api/Playback/BaseStreamingService.cs | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/MediaBrowser.Api/Playback/BaseStreamingService.cs b/MediaBrowser.Api/Playback/BaseStreamingService.cs index dc26218a5..2fcfa90bd 100644 --- a/MediaBrowser.Api/Playback/BaseStreamingService.cs +++ b/MediaBrowser.Api/Playback/BaseStreamingService.cs @@ -886,12 +886,9 @@ namespace MediaBrowser.Api.Playback resultChannels = Math.Min(request.MaxAudioChannels.Value, channelLimit); } - if (resultChannels.HasValue && !string.Equals(codec, "copy", StringComparison.OrdinalIgnoreCase)) + if (request.TranscodingMaxAudioChannels.HasValue && !string.Equals(codec, "copy", StringComparison.OrdinalIgnoreCase)) { - if (request.TranscodingMaxAudioChannels.HasValue) - { - resultChannels = Math.Min(request.TranscodingMaxAudioChannels.Value, resultChannels.Value); - } + resultChannels = Math.Min(request.TranscodingMaxAudioChannels.Value, resultChannels ?? inputChannels ?? request.TranscodingMaxAudioChannels.Value); } return resultChannels ?? request.AudioChannels; From 54c5f6e2d86b6c9341accb8120d96d312a3ce077 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Sat, 22 Oct 2016 10:51:02 -0400 Subject: [PATCH 44/64] update music dlna --- .../Entities/UserViewBuilder.cs | 173 +++++++----------- 1 file changed, 64 insertions(+), 109 deletions(-) diff --git a/MediaBrowser.Controller/Entities/UserViewBuilder.cs b/MediaBrowser.Controller/Entities/UserViewBuilder.cs index 38397572e..390d1bf02 100644 --- a/MediaBrowser.Controller/Entities/UserViewBuilder.cs +++ b/MediaBrowser.Controller/Entities/UserViewBuilder.cs @@ -201,7 +201,7 @@ namespace MediaBrowser.Controller.Entities return await GetMusicFolders(queryParent, user, query).ConfigureAwait(false); case SpecialFolder.MusicGenres: - return await GetMusicGenres(queryParent, user, query).ConfigureAwait(false); + return GetMusicGenres(queryParent, user, query); case SpecialFolder.MusicGenre: return await GetMusicGenreItems(queryParent, displayParent, user, query).ConfigureAwait(false); @@ -290,32 +290,20 @@ namespace MediaBrowser.Controller.Entities return GetResult(list, parent, query); } - private async Task> GetMusicGenres(Folder parent, User user, InternalItemsQuery query) + private QueryResult GetMusicGenres(Folder parent, User user, InternalItemsQuery query) { - var tasks = GetRecursiveChildren(parent, user, new[] { CollectionType.Music, CollectionType.MusicVideos }) - .Where(i => !i.IsFolder) - .SelectMany(i => i.Genres) - .DistinctNames() - .Select(i => - { - try - { - return _libraryManager.GetMusicGenre(i); - } - catch - { - // Full exception logged at lower levels - _logger.Error("Error getting genre"); - return null; - } + var result = _libraryManager.GetMusicGenres(new InternalItemsQuery(user) + { + AncestorIds = new[] { parent.Id.ToString("N") }, + StartIndex = query.StartIndex, + Limit = query.Limit + }); - }) - .Where(i => i != null) - .Select(i => GetUserView(i.Name, SpecialFolder.MusicGenre, i.SortName, parent)); - - var genres = await Task.WhenAll(tasks).ConfigureAwait(false); - - return GetResult(genres, parent, query); + return new QueryResult + { + TotalRecordCount = result.TotalRecordCount, + Items = result.Items.Select(i => i.Item1).ToArray() + }; } private async Task> GetMusicGenreItems(Folder queryParent, Folder displayParent, User user, InternalItemsQuery query) @@ -332,50 +320,51 @@ namespace MediaBrowser.Controller.Entities private QueryResult GetMusicAlbumArtists(Folder parent, User user, InternalItemsQuery query) { - var items = parent.QueryRecursive(new InternalItemsQuery(user) + var artists = _libraryManager.GetAlbumArtists(new InternalItemsQuery(user) { - Recursive = true, - ParentId = parent.Id, - IncludeItemTypes = new[] { typeof(Audio.Audio).Name }, - EnableTotalRecordCount = false + AncestorIds = new[] { parent.Id.ToString("N") }, + StartIndex = query.StartIndex, + Limit = query.Limit + }); - }).Items.Cast(); - - var artists = _libraryManager.GetAlbumArtists(items); - - return GetResult(artists, parent, query); + return new QueryResult + { + TotalRecordCount = artists.TotalRecordCount, + Items = artists.Items.Select(i => i.Item1).ToArray() + }; } private QueryResult GetMusicArtists(Folder parent, User user, InternalItemsQuery query) { - var items = parent.QueryRecursive(new InternalItemsQuery(user) + var artists = _libraryManager.GetArtists(new InternalItemsQuery(user) { - Recursive = true, - ParentId = parent.Id, - IncludeItemTypes = new[] { typeof(Audio.Audio).Name, typeof(MusicVideo).Name }, - EnableTotalRecordCount = false + AncestorIds = new[] { parent.Id.ToString("N") }, + StartIndex = query.StartIndex, + Limit = query.Limit + }); - }).Items.Cast(); - - var artists = _libraryManager.GetArtists(items); - - return GetResult(artists, parent, query); + return new QueryResult + { + TotalRecordCount = artists.TotalRecordCount, + Items = artists.Items.Select(i => i.Item1).ToArray() + }; } private QueryResult GetFavoriteArtists(Folder parent, User user, InternalItemsQuery query) { - var items = parent.QueryRecursive(new InternalItemsQuery(user) + var artists = _libraryManager.GetArtists(new InternalItemsQuery(user) { - Recursive = true, - ParentId = parent.Id, - IncludeItemTypes = new[] { typeof(Audio.Audio).Name }, - EnableTotalRecordCount = false + AncestorIds = new[] { parent.Id.ToString("N") }, + StartIndex = query.StartIndex, + Limit = query.Limit, + IsFavorite = true + }); - }).Items.Cast(); - - var artists = _libraryManager.GetAlbumArtists(items).Where(i => _userDataManager.GetUserData(user, i).IsFavorite); - - return GetResult(artists, parent, query); + return new QueryResult + { + TotalRecordCount = artists.TotalRecordCount, + Items = artists.Items.Select(i => i.Item1).ToArray() + }; } private QueryResult GetMusicPlaylists(Folder parent, User user, InternalItemsQuery query) @@ -577,35 +566,18 @@ namespace MediaBrowser.Controller.Entities private async Task> GetMovieGenres(Folder parent, User user, InternalItemsQuery query) { - var tasks = parent.QueryRecursive(new InternalItemsQuery(user) + var result = _libraryManager.GetGenres(new InternalItemsQuery(user) { - IncludeItemTypes = new[] { typeof(Movie).Name }, - Recursive = true, - EnableTotalRecordCount = false + AncestorIds = new[] { parent.Id.ToString("N") }, + StartIndex = query.StartIndex, + Limit = query.Limit + }); - }).Items - .SelectMany(i => i.Genres) - .DistinctNames() - .Select(i => - { - try - { - return _libraryManager.GetGenre(i); - } - catch - { - // Full exception logged at lower levels - _logger.Error("Error getting genre"); - return null; - } - - }) - .Where(i => i != null) - .Select(i => GetUserView(i.Name, SpecialFolder.MovieGenre, i.SortName, parent)); - - var genres = await Task.WhenAll(tasks).ConfigureAwait(false); - - return GetResult(genres, parent, query); + return new QueryResult + { + TotalRecordCount = result.TotalRecordCount, + Items = result.Items.Select(i => i.Item1).ToArray() + }; } private async Task> GetMovieGenreItems(Folder queryParent, Folder displayParent, User user, InternalItemsQuery query) @@ -720,35 +692,18 @@ namespace MediaBrowser.Controller.Entities private async Task> GetTvGenres(Folder parent, User user, InternalItemsQuery query) { - var tasks = parent.QueryRecursive(new InternalItemsQuery(user) + var result = _libraryManager.GetGenres(new InternalItemsQuery(user) { - IncludeItemTypes = new[] { typeof(Series).Name }, - Recursive = true, - EnableTotalRecordCount = false + AncestorIds = new[] { parent.Id.ToString("N") }, + StartIndex = query.StartIndex, + Limit = query.Limit + }); - }).Items - .SelectMany(i => i.Genres) - .DistinctNames() - .Select(i => - { - try - { - return _libraryManager.GetGenre(i); - } - catch - { - // Full exception logged at lower levels - _logger.Error("Error getting genre"); - return null; - } - - }) - .Where(i => i != null) - .Select(i => GetUserView(i.Name, SpecialFolder.TvGenre, i.SortName, parent)); - - var genres = await Task.WhenAll(tasks).ConfigureAwait(false); - - return GetResult(genres, parent, query); + return new QueryResult + { + TotalRecordCount = result.TotalRecordCount, + Items = result.Items.Select(i => i.Item1).ToArray() + }; } private QueryResult GetTvGenreItems(Folder queryParent, Folder displayParent, User user, InternalItemsQuery query) From 63c6f85bd066f76b85ae609b35910b7e5108f05a Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Sat, 22 Oct 2016 10:50:45 -0400 Subject: [PATCH 45/64] add null check to subtitle task --- .../MediaInfo/SubtitleScheduledTask.cs | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/MediaBrowser.Providers/MediaInfo/SubtitleScheduledTask.cs b/MediaBrowser.Providers/MediaInfo/SubtitleScheduledTask.cs index 2490f7145..dd8802689 100644 --- a/MediaBrowser.Providers/MediaInfo/SubtitleScheduledTask.cs +++ b/MediaBrowser.Providers/MediaInfo/SubtitleScheduledTask.cs @@ -26,7 +26,7 @@ namespace MediaBrowser.Providers.MediaInfo private readonly ISubtitleManager _subtitleManager; private readonly IMediaSourceManager _mediaSourceManager; private readonly ILogger _logger; - private IJsonSerializer _json; + private readonly IJsonSerializer _json; public SubtitleScheduledTask(ILibraryManager libraryManager, IJsonSerializer json, IServerConfigurationManager config, ISubtitleManager subtitleManager, ILogger logger, IMediaSourceManager mediaSourceManager) { @@ -138,12 +138,18 @@ namespace MediaBrowser.Providers.MediaInfo { try { - return _json.DeserializeFromFile>(path); + var result = _json.DeserializeFromFile>(path); + + if (result != null) + { + return result; + } } catch { - return new Dictionary(); } + + return new Dictionary(); } private async Task DownloadSubtitles(Video video, SubtitleOptions options, CancellationToken cancellationToken) From 8626eded8d987e7eb306d0ec0f17adf83f26b3ae Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Sat, 22 Oct 2016 10:51:19 -0400 Subject: [PATCH 46/64] add null check to omdb --- MediaBrowser.Providers/Omdb/OmdbProvider.cs | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/MediaBrowser.Providers/Omdb/OmdbProvider.cs b/MediaBrowser.Providers/Omdb/OmdbProvider.cs index 8fb4d8fcc..9c7a16fab 100644 --- a/MediaBrowser.Providers/Omdb/OmdbProvider.cs +++ b/MediaBrowser.Providers/Omdb/OmdbProvider.cs @@ -124,7 +124,12 @@ namespace MediaBrowser.Providers.Omdb T item = itemResult.Item; - var seasonResult = await GetSeasonRootObject(imdbId, seasonNumber, cancellationToken); + var seasonResult = await GetSeasonRootObject(imdbId, seasonNumber, cancellationToken).ConfigureAwait(false); + + if (seasonResult == null) + { + return false; + } RootObject result = null; @@ -142,7 +147,6 @@ namespace MediaBrowser.Providers.Omdb return false; } - // Only take the name and rating if the user's language is set to english, since Omdb has no localization if (string.Equals(language, "en", StringComparison.OrdinalIgnoreCase)) { From 654b13b263cb59e469c8fb7bbcc064f1b3c829a6 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Fri, 21 Oct 2016 14:41:26 -0400 Subject: [PATCH 47/64] update intro provider --- .../Intros/DefaultIntroProvider.cs | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/MediaBrowser.Server.Implementations/Intros/DefaultIntroProvider.cs b/MediaBrowser.Server.Implementations/Intros/DefaultIntroProvider.cs index a1638f722..b86a5f5d4 100644 --- a/MediaBrowser.Server.Implementations/Intros/DefaultIntroProvider.cs +++ b/MediaBrowser.Server.Implementations/Intros/DefaultIntroProvider.cs @@ -108,9 +108,12 @@ namespace MediaBrowser.Server.Implementations.Intros IsPlayed = config.EnableIntrosForWatchedContent ? (bool?)null : false, MaxParentalRating = config.EnableIntrosParentalControl ? ratingLevel : null, BlockUnratedItems = config.EnableIntrosParentalControl ? new[] { UnratedItem.Trailer } : new UnratedItem[] { }, - Limit = config.TrailerLimit, + + // Account for duplicates by imdb id, since the database doesn't support this yet + Limit = config.TrailerLimit * 2, SourceTypes = sourceTypes.ToArray() - }); + + }).Where(i => string.IsNullOrWhiteSpace(i.GetProviderId(MetadataProviders.Imdb)) || !string.Equals(i.GetProviderId(MetadataProviders.Imdb), item.GetProviderId(MetadataProviders.Imdb), StringComparison.OrdinalIgnoreCase)).Take(config.TrailerLimit); candidates.AddRange(trailerResult.Select(i => new ItemWithTrailer { From 19008e342ec297bb5d653d19ad9e1ca12b4558f4 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Sat, 22 Oct 2016 10:50:21 -0400 Subject: [PATCH 48/64] set year on programs --- .../LiveTv/Listings/SchedulesDirect.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/MediaBrowser.Server.Implementations/LiveTv/Listings/SchedulesDirect.cs b/MediaBrowser.Server.Implementations/LiveTv/Listings/SchedulesDirect.cs index 7574eb485..d5abcf98e 100644 --- a/MediaBrowser.Server.Implementations/LiveTv/Listings/SchedulesDirect.cs +++ b/MediaBrowser.Server.Implementations/LiveTv/Listings/SchedulesDirect.cs @@ -488,6 +488,7 @@ namespace MediaBrowser.Server.Implementations.LiveTv.Listings if (!string.IsNullOrWhiteSpace(details.originalAirDate) && (!info.IsSeries || info.IsRepeat)) { info.OriginalAirDate = DateTime.Parse(details.originalAirDate); + info.ProductionYear = info.OriginalAirDate.Value.Year; } if (details.genres != null) From 0ee4767b8c86cd81e8c0e16da16e752482576cfb Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Sun, 23 Oct 2016 16:04:31 -0400 Subject: [PATCH 49/64] Don't use library monitor for internal folders --- MediaBrowser.Server.Implementations/IO/LibraryMonitor.cs | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/MediaBrowser.Server.Implementations/IO/LibraryMonitor.cs b/MediaBrowser.Server.Implementations/IO/LibraryMonitor.cs index 76f0e6a1d..7dbeaf6b7 100644 --- a/MediaBrowser.Server.Implementations/IO/LibraryMonitor.cs +++ b/MediaBrowser.Server.Implementations/IO/LibraryMonitor.cs @@ -174,6 +174,11 @@ namespace MediaBrowser.Server.Implementations.IO private bool IsLibraryMonitorEnabaled(BaseItem item) { + if (item is BasePluginFolder) + { + return false; + } + var options = LibraryManager.GetLibraryOptions(item); if (options != null) From 6c0f6b5c37bd8c749155beb6f6031d6a4fa3508e Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Sun, 23 Oct 2016 15:48:51 -0400 Subject: [PATCH 50/64] update startup timeout --- MediaBrowser.ServerApplication/MainStartup.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MediaBrowser.ServerApplication/MainStartup.cs b/MediaBrowser.ServerApplication/MainStartup.cs index b2c7445e2..92ff78152 100644 --- a/MediaBrowser.ServerApplication/MainStartup.cs +++ b/MediaBrowser.ServerApplication/MainStartup.cs @@ -192,7 +192,7 @@ namespace MediaBrowser.ServerApplication { _logger.Info("Found a duplicate process. Giving it time to exit."); - if (!duplicate.WaitForExit(20000)) + if (!duplicate.WaitForExit(30000)) { _logger.Info("The duplicate process did not exit."); return true; From 4e11e351ee36d1faa95f93a8c398229c192ada9e Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Sat, 29 Oct 2016 13:58:08 -0400 Subject: [PATCH 51/64] update IsTextSubtitleStream --- MediaBrowser.Model/Entities/MediaStream.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/MediaBrowser.Model/Entities/MediaStream.cs b/MediaBrowser.Model/Entities/MediaStream.cs index 6d3e2ce4c..c215a8071 100644 --- a/MediaBrowser.Model/Entities/MediaStream.cs +++ b/MediaBrowser.Model/Entities/MediaStream.cs @@ -290,7 +290,8 @@ namespace MediaBrowser.Model.Entities return StringHelper.IndexOfIgnoreCase(codec, "pgs") == -1 && StringHelper.IndexOfIgnoreCase(codec, "dvd") == -1 && StringHelper.IndexOfIgnoreCase(codec, "dvbsub") == -1 && - !StringHelper.EqualsIgnoreCase(codec, "sub"); + !StringHelper.EqualsIgnoreCase(codec, "sub") && + !StringHelper.EqualsIgnoreCase(codec, "dvb_subtitle"); } public bool SupportsSubtitleConversionTo(string codec) From 1031daa9b0ca56cc9f63d4304d2b928ce434c284 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Sat, 29 Oct 2016 16:02:31 -0400 Subject: [PATCH 52/64] normalize subtitle names --- MediaBrowser.MediaEncoding/Probing/ProbeResultNormalizer.cs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/MediaBrowser.MediaEncoding/Probing/ProbeResultNormalizer.cs b/MediaBrowser.MediaEncoding/Probing/ProbeResultNormalizer.cs index 9f51dcf66..b8c110e14 100644 --- a/MediaBrowser.MediaEncoding/Probing/ProbeResultNormalizer.cs +++ b/MediaBrowser.MediaEncoding/Probing/ProbeResultNormalizer.cs @@ -399,7 +399,11 @@ namespace MediaBrowser.MediaEncoding.Probing private string NormalizeSubtitleCodec(string codec) { - if ((codec ?? string.Empty).IndexOf("PGS", StringComparison.OrdinalIgnoreCase) != -1) + if (string.Equals(codec, "dvb_subtitle", StringComparison.OrdinalIgnoreCase)) + { + codec = "dvbsub"; + } + else if ((codec ?? string.Empty).IndexOf("PGS", StringComparison.OrdinalIgnoreCase) != -1) { codec = "PGSSUB"; } From 6d0270db18ca32a0446c2d330931ef103493298a Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Sun, 30 Oct 2016 14:37:42 -0400 Subject: [PATCH 53/64] remove subtitle history --- .../MediaInfo/SubtitleScheduledTask.cs | 44 +------------------ 1 file changed, 1 insertion(+), 43 deletions(-) diff --git a/MediaBrowser.Providers/MediaInfo/SubtitleScheduledTask.cs b/MediaBrowser.Providers/MediaInfo/SubtitleScheduledTask.cs index dd8802689..2df72372a 100644 --- a/MediaBrowser.Providers/MediaInfo/SubtitleScheduledTask.cs +++ b/MediaBrowser.Providers/MediaInfo/SubtitleScheduledTask.cs @@ -88,39 +88,17 @@ namespace MediaBrowser.Providers.MediaInfo }).OfType