Luke Pulverenti 8 年之前
父节点
当前提交
e8c70da2b6

+ 5 - 1
Emby.Server.Implementations/HttpServer/SocketSharp/WebSocketSharpListener.cs

@@ -29,8 +29,9 @@ namespace Emby.Server.Implementations.HttpServer.SocketSharp
         private readonly ICryptoProvider _cryptoProvider;
         private readonly ICryptoProvider _cryptoProvider;
         private readonly IStreamFactory _streamFactory;
         private readonly IStreamFactory _streamFactory;
         private readonly Func<HttpListenerContext, IHttpRequest> _httpRequestFactory;
         private readonly Func<HttpListenerContext, IHttpRequest> _httpRequestFactory;
+        private readonly bool _enableDualMode;
 
 
-        public WebSocketSharpListener(ILogger logger, ICertificate certificate, IMemoryStreamFactory memoryStreamProvider, ITextEncoding textEncoding, INetworkManager networkManager, ISocketFactory socketFactory, ICryptoProvider cryptoProvider, IStreamFactory streamFactory, Func<HttpListenerContext, IHttpRequest> httpRequestFactory)
+        public WebSocketSharpListener(ILogger logger, ICertificate certificate, IMemoryStreamFactory memoryStreamProvider, ITextEncoding textEncoding, INetworkManager networkManager, ISocketFactory socketFactory, ICryptoProvider cryptoProvider, IStreamFactory streamFactory, bool enableDualMode, Func<HttpListenerContext, IHttpRequest> httpRequestFactory)
         {
         {
             _logger = logger;
             _logger = logger;
             _certificate = certificate;
             _certificate = certificate;
@@ -40,6 +41,7 @@ namespace Emby.Server.Implementations.HttpServer.SocketSharp
             _socketFactory = socketFactory;
             _socketFactory = socketFactory;
             _cryptoProvider = cryptoProvider;
             _cryptoProvider = cryptoProvider;
             _streamFactory = streamFactory;
             _streamFactory = streamFactory;
+            _enableDualMode = enableDualMode;
             _httpRequestFactory = httpRequestFactory;
             _httpRequestFactory = httpRequestFactory;
         }
         }
 
 
@@ -55,6 +57,8 @@ namespace Emby.Server.Implementations.HttpServer.SocketSharp
             if (_listener == null)
             if (_listener == null)
                 _listener = new HttpListener(new PatternsLogger(_logger), _cryptoProvider, _streamFactory, _socketFactory, _networkManager, _textEncoding, _memoryStreamProvider);
                 _listener = new HttpListener(new PatternsLogger(_logger), _cryptoProvider, _streamFactory, _socketFactory, _networkManager, _textEncoding, _memoryStreamProvider);
 
 
+            _listener.EnableDualMode = _enableDualMode;
+
             if (_certificate != null)
             if (_certificate != null)
             {
             {
                 _listener.LoadCert(_certificate);
                 _listener.LoadCert(_certificate);

+ 4 - 2
Emby.Server.Implementations/Library/LibraryManager.cs

@@ -2496,10 +2496,12 @@ namespace Emby.Server.Implementations.Library
                 }).OrderBy(i => i.Path).ToList();
                 }).OrderBy(i => i.Path).ToList();
         }
         }
 
 
+        private static readonly string[] ExtrasSubfolderNames = new[] { "extras", "specials", "shorts", "scenes", "featurettes", "behind the scenes", "deleted scenes" };
+
         public IEnumerable<Video> FindExtras(BaseItem owner, List<FileSystemMetadata> fileSystemChildren, IDirectoryService directoryService)
         public IEnumerable<Video> FindExtras(BaseItem owner, List<FileSystemMetadata> fileSystemChildren, IDirectoryService directoryService)
         {
         {
             var files = fileSystemChildren.Where(i => i.IsDirectory)
             var files = fileSystemChildren.Where(i => i.IsDirectory)
-                .Where(i => string.Equals(i.Name, "extras", StringComparison.OrdinalIgnoreCase) || string.Equals(i.Name, "specials", StringComparison.OrdinalIgnoreCase))
+                .Where(i => ExtrasSubfolderNames.Contains(i.Name ?? string.Empty, StringComparer.OrdinalIgnoreCase))
                 .SelectMany(i => _fileSystem.GetFiles(i.FullName, false))
                 .SelectMany(i => _fileSystem.GetFiles(i.FullName, false))
                 .ToList();
                 .ToList();
 
 
@@ -2788,7 +2790,7 @@ namespace Emby.Server.Implementations.Library
                 {
                 {
                     var path = Path.Combine(virtualFolderPath, collectionType + ".collection");
                     var path = Path.Combine(virtualFolderPath, collectionType + ".collection");
 
 
-                    _fileSystem.WriteAllBytes(path, new byte[] {});
+                    _fileSystem.WriteAllBytes(path, new byte[] { });
                 }
                 }
 
 
                 CollectionFolder.SaveLibraryOptions(virtualFolderPath, options);
                 CollectionFolder.SaveLibraryOptions(virtualFolderPath, options);

+ 1 - 1
MediaBrowser.Model/Net/IpAddressInfo.cs

@@ -7,7 +7,7 @@ namespace MediaBrowser.Model.Net
         public static IpAddressInfo Any = new IpAddressInfo("0.0.0.0", IpAddressFamily.InterNetwork);
         public static IpAddressInfo Any = new IpAddressInfo("0.0.0.0", IpAddressFamily.InterNetwork);
         public static IpAddressInfo IPv6Any = new IpAddressInfo("00000000000000000000", IpAddressFamily.InterNetworkV6);
         public static IpAddressInfo IPv6Any = new IpAddressInfo("00000000000000000000", IpAddressFamily.InterNetworkV6);
         public static IpAddressInfo Loopback = new IpAddressInfo("127.0.0.1", IpAddressFamily.InterNetwork);
         public static IpAddressInfo Loopback = new IpAddressInfo("127.0.0.1", IpAddressFamily.InterNetwork);
-        public static IpAddressInfo IPv6Loopback = new IpAddressInfo("IPv6Loopback", IpAddressFamily.InterNetworkV6);
+        public static IpAddressInfo IPv6Loopback = new IpAddressInfo("::1", IpAddressFamily.InterNetworkV6);
 
 
         public string Address { get; set; }
         public string Address { get; set; }
         public IpAddressFamily AddressFamily { get; set; }
         public IpAddressFamily AddressFamily { get; set; }

+ 3 - 40
MediaBrowser.Server.Implementations/HttpServer/HttpListenerHost.cs

@@ -106,27 +106,12 @@ namespace MediaBrowser.Server.Implementations.HttpServer
                 {typeof (NotSupportedException), 500}
                 {typeof (NotSupportedException), 500}
             };
             };
 
 
-            HostConfig.Instance.GlobalResponseHeaders = new Dictionary<string, string>();
-
             // The Markdown feature causes slow startup times (5 mins+) on cold boots for some users
             // The Markdown feature causes slow startup times (5 mins+) on cold boots for some users
             // Custom format allows images
             // Custom format allows images
             HostConfig.Instance.EnableFeatures = Feature.Html | Feature.Json | Feature.Xml | Feature.CustomFormat;
             HostConfig.Instance.EnableFeatures = Feature.Html | Feature.Json | Feature.Xml | Feature.CustomFormat;
 
 
             Container.Adapter = _containerAdapter;
             Container.Adapter = _containerAdapter;
 
 
-            //Plugins.Add(new AuthFeature(() => new AuthUserSession(), new IAuthProvider[] {
-            //    new SessionAuthProvider(_containerAdapter.Resolve<ISessionContext>()),
-            //}));
-
-            //PreRequestFilters.Add((httpReq, httpRes) =>
-            //{
-            //    //Handles Request and closes Responses after emitting global HTTP Headers
-            //    if (string.Equals(httpReq.Verb, "OPTIONS", StringComparison.OrdinalIgnoreCase))
-            //    {
-            //        httpRes.EndRequest(); //add a 'using ServiceStack;'
-            //    }
-            //});
-
             var requestFilters = _appHost.GetExports<IRequestFilter>().ToList();
             var requestFilters = _appHost.GetExports<IRequestFilter>().ToList();
             foreach (var filter in requestFilters)
             foreach (var filter in requestFilters)
             {
             {
@@ -144,13 +129,6 @@ namespace MediaBrowser.Server.Implementations.HttpServer
             }
             }
         }
         }
 
 
-        public override void OnAfterInit()
-        {
-            SetAppDomainData();
-
-            base.OnAfterInit();
-        }
-
         public override void OnConfigLoad()
         public override void OnConfigLoad()
         {
         {
             base.OnConfigLoad();
             base.OnConfigLoad();
@@ -167,23 +145,6 @@ namespace MediaBrowser.Server.Implementations.HttpServer
             return new ServiceController(this, () => types);
             return new ServiceController(this, () => types);
         }
         }
 
 
-        public virtual void SetAppDomainData()
-        {
-            //Required for Mono to resolve VirtualPathUtility and Url.Content urls
-            var domain = Thread.GetDomain(); // or AppDomain.Current
-            domain.SetData(".appDomain", "1");
-            domain.SetData(".appVPath", "/");
-            domain.SetData(".appPath", domain.BaseDirectory);
-            if (string.IsNullOrEmpty(domain.GetData(".appId") as string))
-            {
-                domain.SetData(".appId", "1");
-            }
-            if (string.IsNullOrEmpty(domain.GetData(".domainId") as string))
-            {
-                domain.SetData(".domainId", "1");
-            }
-        }
-
         public override ServiceStackHost Start(string listeningAtUrlBase)
         public override ServiceStackHost Start(string listeningAtUrlBase)
         {
         {
             StartListener();
             StartListener();
@@ -225,7 +186,9 @@ namespace MediaBrowser.Server.Implementations.HttpServer
                 ? GetCert(CertificatePath) :
                 ? GetCert(CertificatePath) :
                 null;
                 null;
 
 
-            return new WebSocketSharpListener(_logger, cert, _memoryStreamProvider, _textEncoding, _networkManager, _socketFactory, _cryptoProvider, new StreamFactory(), GetRequest);
+            var enableDualMode = Environment.OSVersion.Platform == PlatformID.Win32NT;
+
+            return new WebSocketSharpListener(_logger, cert, _memoryStreamProvider, _textEncoding, _networkManager, _socketFactory, _cryptoProvider, new StreamFactory(), enableDualMode, GetRequest);
         }
         }
 
 
         public static ICertificate GetCert(string certificateLocation)
         public static ICertificate GetCert(string certificateLocation)