Ver Fonte

Merge pull request #2451 from MediaBrowser/dev

Dev
Luke há 8 anos atrás
pai
commit
52d496386f

+ 20 - 5
Emby.Common.Implementations/HttpClientManager/HttpClientManager.cs

@@ -18,6 +18,7 @@ using System.Threading;
 using System.Threading.Tasks;
 using Emby.Common.Implementations.HttpClientManager;
 using MediaBrowser.Model.IO;
+using MediaBrowser.Common;
 
 namespace Emby.Common.Implementations.HttpClientManager
 {
@@ -43,6 +44,7 @@ namespace Emby.Common.Implementations.HttpClientManager
 
         private readonly IFileSystem _fileSystem;
         private readonly IMemoryStreamFactory _memoryStreamProvider;
+        private readonly IApplicationHost _appHost;
 
         /// <summary>
         /// Initializes a new instance of the <see cref="HttpClientManager" /> class.
@@ -257,6 +259,8 @@ namespace Emby.Common.Implementations.HttpClientManager
 
         private void AddRequestHeaders(HttpWebRequest request, HttpRequestOptions options)
         {
+            var hasUserAgent = false;
+
             foreach (var header in options.RequestHeaders.ToList())
             {
                 if (string.Equals(header.Key, "Accept", StringComparison.OrdinalIgnoreCase))
@@ -265,11 +269,8 @@ namespace Emby.Common.Implementations.HttpClientManager
                 }
                 else if (string.Equals(header.Key, "User-Agent", StringComparison.OrdinalIgnoreCase))
                 {
-#if NET46
-                    request.UserAgent = header.Value;
-#elif NETSTANDARD1_6
-                    request.Headers["User-Agent"] = header.Value;
-#endif
+                    SetUserAgent(request, header.Value);
+                    hasUserAgent = true;
                 }
                 else
                 {
@@ -280,6 +281,20 @@ namespace Emby.Common.Implementations.HttpClientManager
 #endif
                 }
             }
+
+            if (!hasUserAgent && options.EnableDefaultUserAgent)
+            {
+                SetUserAgent(request, _appHost.Name + "/" + _appHost.ApplicationVersion.ToString());
+            }
+        }
+
+        private void SetUserAgent(HttpWebRequest request, string userAgent)
+        {
+#if NET46
+            request.UserAgent = userAgent;
+#elif NETSTANDARD1_6
+                    request.Headers["User-Agent"] = userAgent;
+#endif
         }
 
         /// <summary>

+ 12 - 0
Emby.Server.Implementations/Library/LibraryManager.cs

@@ -2627,6 +2627,18 @@ namespace Emby.Server.Implementations.Library
                 }
             }
 
+            foreach (var map in ConfigurationManager.Configuration.PathSubstitutions)
+            {
+                if (!string.IsNullOrWhiteSpace(map.From))
+                {
+                    var substitutionResult = SubstitutePathInternal(path, map.From, map.To);
+                    if (substitutionResult.Item2)
+                    {
+                        return substitutionResult.Item1;
+                    }
+                }
+            }
+
             return path;
         }
 

+ 10 - 11
Emby.Server.Implementations/Library/Resolvers/Audio/MusicArtistResolver.cs

@@ -74,21 +74,20 @@ namespace Emby.Server.Implementations.Library.Resolvers.Audio
                 return new MusicArtist();
             }
 
-            return null;
-            //if (_config.Configuration.EnableSimpleArtistDetection)
-            //{
-            //    return null;
-            //}
+            if (_config.Configuration.EnableSimpleArtistDetection)
+            {
+                return null;
+            }
 
-            //// Avoid mis-identifying top folders
-            //if (args.Parent.IsRoot) return null;
+            // Avoid mis-identifying top folders
+            if (args.Parent.IsRoot) return null;
 
-            //var directoryService = args.DirectoryService;
+            var directoryService = args.DirectoryService;
 
-            //var albumResolver = new MusicAlbumResolver(_logger, _fileSystem, _libraryManager);
+            var albumResolver = new MusicAlbumResolver(_logger, _fileSystem, _libraryManager);
 
-            //// If we contain an album assume we are an artist folder
-            //return args.FileSystemChildren.Where(i => i.IsDirectory).Any(i => albumResolver.IsMusicAlbum(i.FullName, directoryService, args.GetLibraryOptions())) ? new MusicArtist() : null;
+            // If we contain an album assume we are an artist folder
+            return args.FileSystemChildren.Where(i => i.IsDirectory).Any(i => albumResolver.IsMusicAlbum(i.FullName, directoryService, args.GetLibraryOptions())) ? new MusicArtist() : null;
         }
 
     }

+ 1 - 1
Emby.Server.Implementations/LiveTv/EmbyTV/EmbyTV.cs

@@ -1163,7 +1163,7 @@ namespace Emby.Server.Implementations.LiveTv.EmbyTV
                 };
 
                 var isAudio = false;
-                await new LiveStreamHelper(_mediaEncoder, _logger).AddMediaInfoWithProbe(stream, isAudio, cancellationToken).ConfigureAwait(false);
+                await new LiveStreamHelper(_mediaEncoder, _logger).AddMediaInfoWithProbe(stream, isAudio, false, cancellationToken).ConfigureAwait(false);
 
                 return new List<MediaSourceInfo>
                 {

+ 13 - 1
Emby.Server.Implementations/LiveTv/LiveStreamHelper.cs

@@ -6,6 +6,7 @@ using System.Threading.Tasks;
 using MediaBrowser.Controller.MediaEncoding;
 using MediaBrowser.Model.Dlna;
 using MediaBrowser.Model.Dto;
+using MediaBrowser.Model.Entities;
 using MediaBrowser.Model.Logging;
 
 namespace Emby.Server.Implementations.LiveTv
@@ -21,7 +22,7 @@ namespace Emby.Server.Implementations.LiveTv
             _logger = logger;
         }
 
-        public async Task AddMediaInfoWithProbe(MediaSourceInfo mediaSource, bool isAudio, CancellationToken cancellationToken)
+        public async Task AddMediaInfoWithProbe(MediaSourceInfo mediaSource, bool isAudio, bool assumeInterlaced, CancellationToken cancellationToken)
         {
             var originalRuntime = mediaSource.RunTimeTicks;
 
@@ -95,6 +96,17 @@ namespace Emby.Server.Implementations.LiveTv
                 videoStream.IsAVC = null;
             }
 
+            if (assumeInterlaced)
+            {
+                foreach (var mediaStream in mediaSource.MediaStreams)
+                {
+                    if (mediaStream.Type == MediaStreamType.Video)
+                    {
+                        mediaStream.IsInterlaced = true;
+                    }
+                }
+            }
+
             // Try to estimate this
             mediaSource.InferTotalBitrate(true);
         }

+ 10 - 4
Emby.Server.Implementations/LiveTv/LiveTvManager.cs

@@ -246,9 +246,9 @@ namespace Emby.Server.Implementations.LiveTv
             return info.Item1;
         }
 
-        public async Task<Tuple<MediaSourceInfo, IDirectStreamProvider>> GetChannelStream(string id, string mediaSourceId, CancellationToken cancellationToken)
+        public Task<Tuple<MediaSourceInfo, IDirectStreamProvider, bool>> GetChannelStream(string id, string mediaSourceId, CancellationToken cancellationToken)
         {
-            return await GetLiveStream(id, mediaSourceId, true, cancellationToken).ConfigureAwait(false);
+            return GetLiveStream(id, mediaSourceId, true, cancellationToken);
         }
 
         private string GetItemExternalId(BaseItem item)
@@ -308,7 +308,7 @@ namespace Emby.Server.Implementations.LiveTv
             return _services.FirstOrDefault(i => string.Equals(i.Name, name, StringComparison.OrdinalIgnoreCase));
         }
 
-        private async Task<Tuple<MediaSourceInfo, IDirectStreamProvider>> GetLiveStream(string id, string mediaSourceId, bool isChannel, CancellationToken cancellationToken)
+        private async Task<Tuple<MediaSourceInfo, IDirectStreamProvider, bool>> GetLiveStream(string id, string mediaSourceId, bool isChannel, CancellationToken cancellationToken)
         {
             if (string.Equals(id, mediaSourceId, StringComparison.OrdinalIgnoreCase))
             {
@@ -319,6 +319,7 @@ namespace Emby.Server.Implementations.LiveTv
             bool isVideo;
             ILiveTvService service;
             IDirectStreamProvider directStreamProvider = null;
+            var assumeInterlaced = false;
 
             if (isChannel)
             {
@@ -367,7 +368,12 @@ namespace Emby.Server.Implementations.LiveTv
 
             Normalize(info, service, isVideo);
 
-            return new Tuple<MediaSourceInfo, IDirectStreamProvider>(info, directStreamProvider);
+            if (!(service is EmbyTV.EmbyTV))
+            {
+                assumeInterlaced = true;
+            }
+
+            return new Tuple<MediaSourceInfo, IDirectStreamProvider, bool>(info, directStreamProvider, assumeInterlaced);
         }
 
         private void Normalize(MediaSourceInfo mediaSource, ILiveTvService service, bool isVideo)

+ 3 - 1
Emby.Server.Implementations/LiveTv/LiveTvMediaSourceProvider.cs

@@ -126,12 +126,14 @@ namespace Emby.Server.Implementations.LiveTv
             var keys = openToken.Split(new[] { StreamIdDelimeter }, 3);
             var mediaSourceId = keys.Length >= 3 ? keys[2] : null;
             IDirectStreamProvider directStreamProvider = null;
+            var assumeInterlaced = false;
 
             if (string.Equals(keys[0], typeof(LiveTvChannel).Name, StringComparison.OrdinalIgnoreCase))
             {
                 var info = await _liveTvManager.GetChannelStream(keys[1], mediaSourceId, cancellationToken).ConfigureAwait(false);
                 stream = info.Item1;
                 directStreamProvider = info.Item2;
+                assumeInterlaced = info.Item3;
             }
             else
             {
@@ -146,7 +148,7 @@ namespace Emby.Server.Implementations.LiveTv
                 }
                 else
                 {
-                    await new LiveStreamHelper(_mediaEncoder, _logger).AddMediaInfoWithProbe(stream, isAudio, cancellationToken).ConfigureAwait(false);
+                    await new LiveStreamHelper(_mediaEncoder, _logger).AddMediaInfoWithProbe(stream, isAudio, assumeInterlaced, cancellationToken).ConfigureAwait(false);
                 }
             }
             catch (Exception ex)

+ 1 - 0
MediaBrowser.Api/StartupWizardService.cs

@@ -119,6 +119,7 @@ namespace MediaBrowser.Api
             config.SkipDeserializationForAudio = true;
             config.EnableSeriesPresentationUniqueKey = true;
             config.EnableLocalizedGuids = true;
+            config.EnableSimpleArtistDetection = true;
         }
 
         public void Post(UpdateStartupConfiguration request)

+ 1 - 0
MediaBrowser.Common/Net/HttpRequestOptions.cs

@@ -100,6 +100,7 @@ namespace MediaBrowser.Common.Net
 
         public int TimeoutMs { get; set; }
         public bool PreferIpv4 { get; set; }
+        public bool EnableDefaultUserAgent { get; set; }
 
         private string GetHeaderValue(string name)
         {

+ 1 - 1
MediaBrowser.Controller/LiveTv/ILiveTvManager.cs

@@ -157,7 +157,7 @@ namespace MediaBrowser.Controller.LiveTv
         /// <param name="mediaSourceId">The media source identifier.</param>
         /// <param name="cancellationToken">The cancellation token.</param>
         /// <returns>Task{StreamResponseInfo}.</returns>
-        Task<Tuple<MediaSourceInfo, IDirectStreamProvider>> GetChannelStream(string id, string mediaSourceId, CancellationToken cancellationToken);
+        Task<Tuple<MediaSourceInfo, IDirectStreamProvider, bool>> GetChannelStream(string id, string mediaSourceId, CancellationToken cancellationToken);
 
         /// <summary>
         /// Gets the program.

+ 0 - 5
MediaBrowser.MediaEncoding/Encoder/MediaEncoder.cs

@@ -725,11 +725,6 @@ namespace MediaBrowser.MediaEncoding.Encoder
 
             if (video.Protocol != MediaProtocol.File)
             {
-                // If it's mpeg based, assume true
-                if ((videoStream.Codec ?? string.Empty).IndexOf("mpeg", StringComparison.OrdinalIgnoreCase) != -1)
-                {
-                    return true;
-                }
                 return false;
             }
 

+ 12 - 0
MediaBrowser.Model/Configuration/ServerConfiguration.cs

@@ -192,6 +192,10 @@ namespace MediaBrowser.Model.Configuration
         public bool EnableExternalContentInSuggestions { get; set; }
 
         public int ImageExtractionTimeoutMs { get; set; }
+
+        public PathSubstitution[] PathSubstitutions { get; set; }
+        public bool EnableSimpleArtistDetection { get; set; }
+
         /// <summary>
         /// Initializes a new instance of the <see cref="ServerConfiguration" /> class.
         /// </summary>
@@ -202,6 +206,8 @@ namespace MediaBrowser.Model.Configuration
             Migrations = new string[] { };
             ImageExtractionTimeoutMs = 0;
             EnableLocalizedGuids = true;
+            PathSubstitutions = new PathSubstitution[] { };
+            EnableSimpleArtistDetection = true;
 
             DisplaySpecialsWithinSeasons = true;
             EnableExternalContentInSuggestions = true;
@@ -563,4 +569,10 @@ namespace MediaBrowser.Model.Configuration
             };
         }
     }
+
+    public class PathSubstitution
+    {
+        public string From { get; set; }
+        public string To { get; set; }
+    }
 }

+ 2 - 1
MediaBrowser.Providers/Omdb/OmdbProvider.cs

@@ -347,7 +347,8 @@ namespace MediaBrowser.Providers.Omdb
                 Url = url,
                 ResourcePool = ResourcePool,
                 CancellationToken = cancellationToken,
-                BufferContent = true
+                BufferContent = true,
+                EnableDefaultUserAgent = true
             });
         }
 

+ 1 - 1
SharedVersion.cs

@@ -1,3 +1,3 @@
 using System.Reflection;
 
-[assembly: AssemblyVersion("3.2.0.101")]
+[assembly: AssemblyVersion("3.2.0.102")]