From c100f0818c3e882948f26dcdd9d7df461c59fe8f Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Fri, 1 Jul 2016 12:14:17 -0400 Subject: [PATCH 1/4] update startup wizard --- MediaBrowser.Api/StartupWizardService.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MediaBrowser.Api/StartupWizardService.cs b/MediaBrowser.Api/StartupWizardService.cs index 38a7337ec..dfb82438e 100644 --- a/MediaBrowser.Api/StartupWizardService.cs +++ b/MediaBrowser.Api/StartupWizardService.cs @@ -117,7 +117,7 @@ namespace MediaBrowser.Api config.EnableCustomPathSubFolders = true; config.EnableStandaloneMusicKeys = true; config.EnableCaseSensitiveItemIds = true; - config.EnableFolderView = true; + //config.EnableFolderView = true; config.SchemaVersion = 97; } From c022b728f8570a89973e7690bfdf80e245aa2690 Mon Sep 17 00:00:00 2001 From: softworkz Date: Fri, 1 Jul 2016 22:03:36 +0200 Subject: [PATCH 2/4] OMDB improvements - Improved parsing of production year (cases like '2001-2003') - Parse writer field as person - Parse director field as person - Parse actors fields as persons --- .../Omdb/OmdbItemProvider.cs | 4 +- MediaBrowser.Providers/Omdb/OmdbProvider.cs | 68 ++++++++++++++++--- .../TV/Omdb/OmdbEpisodeProvider.cs | 2 +- 3 files changed, 62 insertions(+), 12 deletions(-) diff --git a/MediaBrowser.Providers/Omdb/OmdbItemProvider.cs b/MediaBrowser.Providers/Omdb/OmdbItemProvider.cs index 7a803eb6f..914b775af 100644 --- a/MediaBrowser.Providers/Omdb/OmdbItemProvider.cs +++ b/MediaBrowser.Providers/Omdb/OmdbItemProvider.cs @@ -226,7 +226,7 @@ namespace MediaBrowser.Providers.Omdb result.Item.SetProviderId(MetadataProviders.Imdb, imdbId); result.HasMetadata = true; - await new OmdbProvider(_jsonSerializer, _httpClient, _fileSystem, _configurationManager).Fetch(result.Item, imdbId, info.MetadataLanguage, info.MetadataCountryCode, cancellationToken).ConfigureAwait(false); + await new OmdbProvider(_jsonSerializer, _httpClient, _fileSystem, _configurationManager).Fetch(result, imdbId, info.MetadataLanguage, info.MetadataCountryCode, cancellationToken).ConfigureAwait(false); } return result; @@ -265,7 +265,7 @@ namespace MediaBrowser.Providers.Omdb result.Item.SetProviderId(MetadataProviders.Imdb, imdbId); result.HasMetadata = true; - await new OmdbProvider(_jsonSerializer, _httpClient, _fileSystem, _configurationManager).Fetch(result.Item, imdbId, info.MetadataLanguage, info.MetadataCountryCode, cancellationToken).ConfigureAwait(false); + await new OmdbProvider(_jsonSerializer, _httpClient, _fileSystem, _configurationManager).Fetch(result, 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 397107c74..d3692f7c6 100644 --- a/MediaBrowser.Providers/Omdb/OmdbProvider.cs +++ b/MediaBrowser.Providers/Omdb/OmdbProvider.cs @@ -3,6 +3,7 @@ using MediaBrowser.Common.Configuration; using MediaBrowser.Common.Net; using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.Entities; +using MediaBrowser.Controller.Providers; using MediaBrowser.Model.Entities; using MediaBrowser.Model.Serialization; using System; @@ -34,13 +35,16 @@ namespace MediaBrowser.Providers.Omdb _configurationManager = configurationManager; } - public async Task Fetch(BaseItem item, string imdbId, string language, string country, CancellationToken cancellationToken) + public async Task Fetch(MetadataResult itemResult, string imdbId, string language, string country, CancellationToken cancellationToken) + where T :BaseItem { if (string.IsNullOrWhiteSpace(imdbId)) { throw new ArgumentNullException("imdbId"); } + T item = itemResult.Item; + var result = await GetRootObject(imdbId, cancellationToken); // Only take the name and rating if the user's language is set to english, since Omdb has no localization @@ -56,8 +60,8 @@ namespace MediaBrowser.Providers.Omdb int year; - if (!string.IsNullOrEmpty(result.Year) - && int.TryParse(result.Year, NumberStyles.Number, _usCulture, out year) + if (!string.IsNullOrEmpty(result.Year) && result.Year.Length >= 4 + && int.TryParse(result.Year.Substring(0, 4), NumberStyles.Number, _usCulture, out year) && year >= 0) { item.ProductionYear = year; @@ -112,16 +116,19 @@ namespace MediaBrowser.Providers.Omdb item.SetProviderId(MetadataProviders.Imdb, result.imdbID); } - ParseAdditionalMetadata(item, result); + ParseAdditionalMetadata(itemResult, result); } - public async Task FetchEpisodeData(BaseItem item, int episodeNumber, int seasonNumber, string imdbId, string language, string country, CancellationToken cancellationToken) + public async Task FetchEpisodeData(MetadataResult itemResult, int episodeNumber, int seasonNumber, string imdbId, string language, string country, CancellationToken cancellationToken) + where T : BaseItem { if (string.IsNullOrWhiteSpace(imdbId)) { throw new ArgumentNullException("imdbId"); } + T item = itemResult.Item; + var seasonResult = await GetSeasonRootObject(imdbId, seasonNumber, cancellationToken); RootObject result = null; @@ -154,8 +161,8 @@ namespace MediaBrowser.Providers.Omdb int year; - if (!string.IsNullOrEmpty(result.Year) - && int.TryParse(result.Year, NumberStyles.Number, _usCulture, out year) + if (!string.IsNullOrEmpty(result.Year) && result.Year.Length >= 4 + && int.TryParse(result.Year.Substring(0, 4), NumberStyles.Number, _usCulture, out year) && year >= 0) { item.ProductionYear = year; @@ -210,7 +217,7 @@ namespace MediaBrowser.Providers.Omdb item.SetProviderId(MetadataProviders.Imdb, result.imdbID); } - ParseAdditionalMetadata(item, result); + ParseAdditionalMetadata(itemResult, result); return true; } @@ -376,8 +383,11 @@ namespace MediaBrowser.Providers.Omdb return Path.Combine(dataPath, filename); } - private void ParseAdditionalMetadata(BaseItem item, RootObject result) + private void ParseAdditionalMetadata(MetadataResult itemResult, RootObject result) + where T : BaseItem { + T item = itemResult.Item; + // Grab series genres because imdb data is better than tvdb. Leave movies alone // But only do it if english is the preferred language because this data will not be localized if (ShouldFetchGenres(item) && @@ -417,6 +427,46 @@ namespace MediaBrowser.Providers.Omdb // Imdb plots are usually pretty short hasShortOverview.ShortOverview = result.Plot; } + + if (!string.IsNullOrWhiteSpace(result.Director)) + { + var person = new PersonInfo + { + Name = result.Director.Trim(), + Type = PersonType.Director + }; + + itemResult.AddPerson(person); + } + + if (!string.IsNullOrWhiteSpace(result.Writer)) + { + var person = new PersonInfo + { + Name = result.Director.Trim(), + Type = PersonType.Writer + }; + + itemResult.AddPerson(person); + } + + if (!string.IsNullOrWhiteSpace(result.Actors)) + { + var actorList = result.Actors.Split(','); + foreach (var actor in actorList) + { + if (!string.IsNullOrWhiteSpace(actor)) + { + var person = new PersonInfo + { + Name = actor.Trim(), + Type = PersonType.Actor + }; + + itemResult.AddPerson(person); + } + } + } } private bool ShouldFetchGenres(BaseItem item) diff --git a/MediaBrowser.Providers/TV/Omdb/OmdbEpisodeProvider.cs b/MediaBrowser.Providers/TV/Omdb/OmdbEpisodeProvider.cs index 21668f014..64e30f47f 100644 --- a/MediaBrowser.Providers/TV/Omdb/OmdbEpisodeProvider.cs +++ b/MediaBrowser.Providers/TV/Omdb/OmdbEpisodeProvider.cs @@ -57,7 +57,7 @@ namespace MediaBrowser.Providers.TV { var seriesImdbId = info.SeriesProviderIds[MetadataProviders.Imdb.ToString()]; - result.HasMetadata = await new OmdbProvider(_jsonSerializer, _httpClient, _fileSystem, _configurationManager).FetchEpisodeData(result.Item, info.IndexNumber.Value, info.ParentIndexNumber.Value, seriesImdbId, info.MetadataLanguage, info.MetadataCountryCode, cancellationToken).ConfigureAwait(false); + result.HasMetadata = await new OmdbProvider(_jsonSerializer, _httpClient, _fileSystem, _configurationManager).FetchEpisodeData(result, info.IndexNumber.Value, info.ParentIndexNumber.Value, seriesImdbId, info.MetadataLanguage, info.MetadataCountryCode, cancellationToken).ConfigureAwait(false); } return result; From 3043d0687fb62e67ab6858c82e7afa0e2020b68c Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Fri, 1 Jul 2016 22:15:56 -0400 Subject: [PATCH 3/4] disable omdb people for now --- MediaBrowser.Providers/Omdb/OmdbProvider.cs | 68 ++++++++++----------- 1 file changed, 34 insertions(+), 34 deletions(-) diff --git a/MediaBrowser.Providers/Omdb/OmdbProvider.cs b/MediaBrowser.Providers/Omdb/OmdbProvider.cs index d3692f7c6..037931300 100644 --- a/MediaBrowser.Providers/Omdb/OmdbProvider.cs +++ b/MediaBrowser.Providers/Omdb/OmdbProvider.cs @@ -428,45 +428,45 @@ namespace MediaBrowser.Providers.Omdb hasShortOverview.ShortOverview = result.Plot; } - if (!string.IsNullOrWhiteSpace(result.Director)) - { - var person = new PersonInfo - { - Name = result.Director.Trim(), - Type = PersonType.Director - }; + //if (!string.IsNullOrWhiteSpace(result.Director)) + //{ + // var person = new PersonInfo + // { + // Name = result.Director.Trim(), + // Type = PersonType.Director + // }; - itemResult.AddPerson(person); - } + // itemResult.AddPerson(person); + //} - if (!string.IsNullOrWhiteSpace(result.Writer)) - { - var person = new PersonInfo - { - Name = result.Director.Trim(), - Type = PersonType.Writer - }; + //if (!string.IsNullOrWhiteSpace(result.Writer)) + //{ + // var person = new PersonInfo + // { + // Name = result.Director.Trim(), + // Type = PersonType.Writer + // }; - itemResult.AddPerson(person); - } + // itemResult.AddPerson(person); + //} - if (!string.IsNullOrWhiteSpace(result.Actors)) - { - var actorList = result.Actors.Split(','); - foreach (var actor in actorList) - { - if (!string.IsNullOrWhiteSpace(actor)) - { - var person = new PersonInfo - { - Name = actor.Trim(), - Type = PersonType.Actor - }; + //if (!string.IsNullOrWhiteSpace(result.Actors)) + //{ + // var actorList = result.Actors.Split(','); + // foreach (var actor in actorList) + // { + // if (!string.IsNullOrWhiteSpace(actor)) + // { + // var person = new PersonInfo + // { + // Name = actor.Trim(), + // Type = PersonType.Actor + // }; - itemResult.AddPerson(person); - } - } - } + // itemResult.AddPerson(person); + // } + // } + //} } private bool ShouldFetchGenres(BaseItem item) From 22601f0a2ef0bdc7b27a3bfd72dd9150152eb7eb Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Fri, 1 Jul 2016 22:16:05 -0400 Subject: [PATCH 4/4] reduce stdout redirection --- MediaBrowser.Api/Playback/BaseStreamingService.cs | 4 ++-- MediaBrowser.MediaEncoding/Encoder/BaseEncoder.cs | 4 ++-- MediaBrowser.MediaEncoding/Encoder/MediaEncoder.cs | 8 ++++---- .../LiveTv/EmbyTV/EncodedRecorder.cs | 4 ++-- 4 files changed, 10 insertions(+), 10 deletions(-) diff --git a/MediaBrowser.Api/Playback/BaseStreamingService.cs b/MediaBrowser.Api/Playback/BaseStreamingService.cs index e6ac990bc..89e62ed9b 100644 --- a/MediaBrowser.Api/Playback/BaseStreamingService.cs +++ b/MediaBrowser.Api/Playback/BaseStreamingService.cs @@ -996,7 +996,7 @@ namespace MediaBrowser.Api.Playback UseShellExecute = false, // Must consume both stdout and stderr or deadlocks may occur - RedirectStandardOutput = true, + //RedirectStandardOutput = true, RedirectStandardError = true, RedirectStandardInput = true, @@ -1063,7 +1063,7 @@ namespace MediaBrowser.Api.Playback } // MUST read both stdout and stderr asynchronously or a deadlock may occurr - process.BeginOutputReadLine(); + //process.BeginOutputReadLine(); // Important - don't await the log task or we won't be able to kill ffmpeg when the user stops playback Task.Run(() => StartStreamingLog(transcodingJob, state, process.StandardError.BaseStream, state.LogFileStream)); diff --git a/MediaBrowser.MediaEncoding/Encoder/BaseEncoder.cs b/MediaBrowser.MediaEncoding/Encoder/BaseEncoder.cs index 9eb796360..725f0bc6d 100644 --- a/MediaBrowser.MediaEncoding/Encoder/BaseEncoder.cs +++ b/MediaBrowser.MediaEncoding/Encoder/BaseEncoder.cs @@ -81,7 +81,7 @@ namespace MediaBrowser.MediaEncoding.Encoder UseShellExecute = false, // Must consume both stdout and stderr or deadlocks may occur - RedirectStandardOutput = true, + //RedirectStandardOutput = true, RedirectStandardError = true, RedirectStandardInput = true, @@ -133,7 +133,7 @@ namespace MediaBrowser.MediaEncoding.Encoder cancellationToken.Register(() => Cancel(process, encodingJob)); // MUST read both stdout and stderr asynchronously or a deadlock may occurr - process.BeginOutputReadLine(); + //process.BeginOutputReadLine(); // Important - don't await the log task or we won't be able to kill ffmpeg when the user stops playback new JobLogger(Logger).StartStreamingLog(encodingJob, process.StandardError.BaseStream, encodingJob.LogFileStream); diff --git a/MediaBrowser.MediaEncoding/Encoder/MediaEncoder.cs b/MediaBrowser.MediaEncoding/Encoder/MediaEncoder.cs index 68113c0d1..7834a9feb 100644 --- a/MediaBrowser.MediaEncoding/Encoder/MediaEncoder.cs +++ b/MediaBrowser.MediaEncoding/Encoder/MediaEncoder.cs @@ -482,7 +482,7 @@ namespace MediaBrowser.MediaEncoding.Encoder UseShellExecute = false, // Must consume both or ffmpeg may hang due to deadlocks. See comments below. - RedirectStandardOutput = true, + //RedirectStandardOutput = true, RedirectStandardError = true, RedirectStandardInput = true, FileName = FFProbePath, @@ -517,7 +517,7 @@ namespace MediaBrowser.MediaEncoding.Encoder try { - process.BeginErrorReadLine(); + //process.BeginErrorReadLine(); var result = _jsonSerializer.DeserializeFromStream(process.StandardOutput.BaseStream); @@ -612,7 +612,7 @@ namespace MediaBrowser.MediaEncoding.Encoder UseShellExecute = false, // Must consume both or ffmpeg may hang due to deadlocks. See comments below. - RedirectStandardOutput = true, + //RedirectStandardOutput = true, RedirectStandardError = true, RedirectStandardInput = true, FileName = FFMpegPath, @@ -643,7 +643,7 @@ namespace MediaBrowser.MediaEncoding.Encoder try { - process.BeginOutputReadLine(); + //process.BeginOutputReadLine(); using (var reader = new StreamReader(process.StandardError.BaseStream)) { diff --git a/MediaBrowser.Server.Implementations/LiveTv/EmbyTV/EncodedRecorder.cs b/MediaBrowser.Server.Implementations/LiveTv/EmbyTV/EncodedRecorder.cs index 21879f6f4..5e428e6f0 100644 --- a/MediaBrowser.Server.Implementations/LiveTv/EmbyTV/EncodedRecorder.cs +++ b/MediaBrowser.Server.Implementations/LiveTv/EmbyTV/EncodedRecorder.cs @@ -139,7 +139,7 @@ namespace MediaBrowser.Server.Implementations.LiveTv.EmbyTV UseShellExecute = false, // Must consume both stdout and stderr or deadlocks may occur - RedirectStandardOutput = true, + //RedirectStandardOutput = true, RedirectStandardError = true, RedirectStandardInput = true, @@ -174,7 +174,7 @@ namespace MediaBrowser.Server.Implementations.LiveTv.EmbyTV cancellationToken.Register(Stop); // MUST read both stdout and stderr asynchronously or a deadlock may occurr - process.BeginOutputReadLine(); + //process.BeginOutputReadLine(); onStarted();