浏览代码

rework file system libs

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

+ 1 - 2
MediaBrowser.ServerApplication/Native/LnkShortcutHandler.cs → Emby.Common.Implementations/IO/LnkShortcutHandler.cs

@@ -6,7 +6,7 @@ using System.Security;
 using System.Text;
 using MediaBrowser.Model.IO;
 
-namespace MediaBrowser.ServerApplication.Native
+namespace Emby.Common.Implementations.IO
 {
     public class LnkShortcutHandler :IShortcutHandler
     {
@@ -35,7 +35,6 @@ namespace MediaBrowser.ServerApplication.Native
     /// <summary>
     /// Class NativeMethods
     /// </summary>
-    [SuppressUnmanagedCodeSecurity]
     public static class NativeMethods
     {
         /// <summary>

+ 6 - 5
Emby.Common.Implementations/IO/ManagedFileSystem.cs

@@ -5,6 +5,7 @@ using System.Linq;
 using System.Text;
 using MediaBrowser.Model.IO;
 using MediaBrowser.Model.Logging;
+using MediaBrowser.Model.System;
 
 namespace Emby.Common.Implementations.IO
 {
@@ -18,17 +19,17 @@ namespace Emby.Common.Implementations.IO
         private readonly bool _supportsAsyncFileStreams;
         private char[] _invalidFileNameChars;
         private readonly List<IShortcutHandler> _shortcutHandlers = new List<IShortcutHandler>();
-        private bool EnableFileSystemRequestConcat = true;
+        private bool EnableFileSystemRequestConcat;
 
         private string _tempPath;
 
-        public ManagedFileSystem(ILogger logger, bool supportsAsyncFileStreams, bool enableManagedInvalidFileNameChars, bool enableFileSystemRequestConcat, string tempPath)
+        public ManagedFileSystem(ILogger logger, IEnvironmentInfo environmentInfo, string tempPath)
         {
             Logger = logger;
-            _supportsAsyncFileStreams = supportsAsyncFileStreams;
+            _supportsAsyncFileStreams = true;
             _tempPath = tempPath;
-            EnableFileSystemRequestConcat = enableFileSystemRequestConcat;
-            SetInvalidFileNameChars(enableManagedInvalidFileNameChars);
+            EnableFileSystemRequestConcat = false;
+            SetInvalidFileNameChars(environmentInfo.OperatingSystem == MediaBrowser.Model.System.OperatingSystem.Windows);
         }
 
         public void AddShortcutHandler(IShortcutHandler handler)

+ 9 - 2
Emby.Server.Core/ApplicationHost.cs

@@ -61,7 +61,7 @@ using System.Threading;
 using System.Threading.Tasks;
 using Emby.Common.Implementations;
 using Emby.Common.Implementations.Archiving;
-using Emby.Common.Implementations.Networking;
+using Emby.Common.Implementations.IO;
 using Emby.Common.Implementations.Reflection;
 using Emby.Common.Implementations.Serialization;
 using Emby.Common.Implementations.TextEncoding;
@@ -93,7 +93,7 @@ using Emby.Server.Implementations.Social;
 using Emby.Server.Implementations.Channels;
 using Emby.Server.Implementations.Collections;
 using Emby.Server.Implementations.Dto;
-using Emby.Server.Implementations.EntryPoints;
+using Emby.Server.Implementations.IO;
 using Emby.Server.Implementations.FileOrganization;
 using Emby.Server.Implementations.HttpServer;
 using Emby.Server.Implementations.HttpServer.Security;
@@ -294,6 +294,13 @@ namespace Emby.Server.Core
             ImageEncoder = imageEncoder;
 
             SetBaseExceptionMessage();
+
+            if (environmentInfo.OperatingSystem == MediaBrowser.Model.System.OperatingSystem.Windows)
+            {
+                fileSystem.AddShortcutHandler(new LnkShortcutHandler());
+            }
+
+            fileSystem.AddShortcutHandler(new MbLinkShortcutHandler(fileSystem));
         }
 
         private Version _version;

+ 2 - 0
MediaBrowser.Model/IO/IFileSystem.cs

@@ -10,6 +10,8 @@ namespace MediaBrowser.Model.IO
     /// </summary>
     public interface IFileSystem
     {
+        void AddShortcutHandler(IShortcutHandler handler);
+
         /// <summary>
         /// Determines whether the specified filename is shortcut.
         /// </summary>

+ 3 - 4
MediaBrowser.Server.Mac/Main.cs

@@ -105,12 +105,11 @@ namespace MediaBrowser.Server.Mac
 			// Allow all https requests
 			ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(delegate { return true; });
 
-			var fileSystem = new MonoFileSystem(logManager.GetLogger("FileSystem"), false, false, appPaths.TempDirectory);
-            fileSystem.AddShortcutHandler(new MbLinkShortcutHandler(fileSystem));
+			var environmentInfo = GetEnvironmentInfo();
 
-			_fileSystem = fileSystem;
+			var fileSystem = new MonoFileSystem(logManager.GetLogger("FileSystem"), environmentInfo, appPaths.TempDirectory);
 
-			var environmentInfo = GetEnvironmentInfo();
+			_fileSystem = fileSystem;
 
 			var imageEncoder = ImageEncoderHelper.GetImageEncoder(_logger, 
 			                                                      logManager, 

+ 3 - 2
MediaBrowser.Server.Mono/Native/MonoFileSystem.cs

@@ -1,13 +1,14 @@
 using Emby.Common.Implementations.IO;
 using MediaBrowser.Model.Logging;
+using MediaBrowser.Model.System;
 using Mono.Unix.Native;
 
 namespace MediaBrowser.Server.Mono.Native
 {
     public class MonoFileSystem : ManagedFileSystem
     {
-        public MonoFileSystem(ILogger logger, bool supportsAsyncFileStreams, bool enableManagedInvalidFileNameChars, string tempPath)
-            : base(logger, supportsAsyncFileStreams, enableManagedInvalidFileNameChars, true, tempPath)
+        public MonoFileSystem(ILogger logger, IEnvironmentInfo environment, string tempPath)
+            : base(logger, environment, tempPath)
         {
         }
 

+ 3 - 4
MediaBrowser.Server.Mono/Program.cs

@@ -114,12 +114,11 @@ namespace MediaBrowser.Server.Mono
             // Allow all https requests
             ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(delegate { return true; });
 
-            var fileSystem = new MonoFileSystem(logManager.GetLogger("FileSystem"), false, false, appPaths.TempDirectory);
-            fileSystem.AddShortcutHandler(new MbLinkShortcutHandler(fileSystem));
+            var environmentInfo = GetEnvironmentInfo();
 
-            FileSystem = fileSystem;
+            var fileSystem = new MonoFileSystem(logManager.GetLogger("FileSystem"), environmentInfo, appPaths.TempDirectory);
 
-            var environmentInfo = GetEnvironmentInfo();
+            FileSystem = fileSystem;
 
             var imageEncoder = ImageEncoderHelper.GetImageEncoder(_logger, logManager, fileSystem, options, () => _appHost.HttpClient, appPaths);
 

+ 4 - 4
MediaBrowser.ServerApplication/MainStartup.cs

@@ -331,9 +331,9 @@ namespace MediaBrowser.ServerApplication
         /// <param name="options">The options.</param>
         private static void RunApplication(ServerApplicationPaths appPaths, ILogManager logManager, bool runService, StartupOptions options)
         {
-            var fileSystem = new ManagedFileSystem(logManager.GetLogger("FileSystem"), true, true, false, appPaths.TempDirectory);
-            fileSystem.AddShortcutHandler(new LnkShortcutHandler());
-            fileSystem.AddShortcutHandler(new MbLinkShortcutHandler(fileSystem));
+            var environmentInfo = new EnvironmentInfo();
+
+            var fileSystem = new ManagedFileSystem(logManager.GetLogger("FileSystem"), environmentInfo, appPaths.TempDirectory);
 
             var imageEncoder = ImageEncoderHelper.GetImageEncoder(_logger, logManager, fileSystem, options, () => _appHost.HttpClient, appPaths);
 
@@ -345,7 +345,7 @@ namespace MediaBrowser.ServerApplication
                 fileSystem,
                 new PowerManagement(),
                 "emby.windows.zip",
-                new EnvironmentInfo(),
+                environmentInfo,
                 imageEncoder,
                 new Server.Startup.Common.SystemEvents(logManager.GetLogger("SystemEvents")),
                 new RecyclableMemoryStreamProvider(),

+ 0 - 1
MediaBrowser.ServerApplication/MediaBrowser.ServerApplication.csproj

@@ -142,7 +142,6 @@
       <DependentUpon>MainForm.cs</DependentUpon>
     </Compile>
     <Compile Include="MainStartup.cs" />
-    <Compile Include="Native\LnkShortcutHandler.cs" />
     <Compile Include="Native\PowerManagement.cs" />
     <Compile Include="Native\Standby.cs" />
     <Compile Include="Native\ServerAuthorization.cs" />

+ 1 - 0
MediaBrowser.ServerApplication/WindowsAppHost.cs

@@ -4,6 +4,7 @@ using System.Diagnostics;
 using System.IO;
 using System.Reflection;
 using System.Runtime.InteropServices.ComTypes;
+using Emby.Common.Implementations.IO;
 using Emby.Server.CinemaMode;
 using Emby.Server.Connect;
 using Emby.Server.Core;