Przeglądaj źródła

Remove FileSystem.GetStream

Bond-009 5 lat temu
rodzic
commit
c8409d2ea1
44 zmienionych plików z 128 dodań i 375 usunięć
  1. 2 2
      DvdLib/Ifo/Dvd.cs
  2. 1 1
      Emby.Dlna/DlnaManager.cs
  3. 1 2
      Emby.Drawing/ImageProcessor.cs
  4. 1 1
      Emby.Server.Implementations/ApplicationHost.cs
  5. 1 1
      Emby.Server.Implementations/Devices/DeviceManager.cs
  6. 2 2
      Emby.Server.Implementations/HttpClientManager/HttpClientManager.cs
  7. 7 7
      Emby.Server.Implementations/HttpServer/FileWriter.cs
  8. 0 81
      Emby.Server.Implementations/IO/ManagedFileSystem.cs
  9. 3 5
      Emby.Server.Implementations/LiveTv/EmbyTV/DirectRecorder.cs
  10. 4 4
      Emby.Server.Implementations/LiveTv/EmbyTV/EmbyTV.cs
  11. 1 5
      Emby.Server.Implementations/LiveTv/EmbyTV/EncodedRecorder.cs
  12. 2 2
      Emby.Server.Implementations/LiveTv/TunerHosts/LiveStream.cs
  13. 2 2
      Emby.Server.Implementations/LiveTv/TunerHosts/SharedHttpStream.cs
  14. 9 23
      Emby.Server.Implementations/Serialization/JsonSerializer.cs
  15. 1 1
      MediaBrowser.Api/Images/ImageService.cs
  16. 2 4
      MediaBrowser.Api/Images/RemoteImageService.cs
  17. 1 1
      MediaBrowser.Api/ItemLookupService.cs
  18. 1 1
      MediaBrowser.Api/Playback/BaseStreamingService.cs
  19. 4 4
      MediaBrowser.Api/Playback/Hls/BaseHlsService.cs
  20. 4 4
      MediaBrowser.Api/Playback/Hls/DynamicHlsService.cs
  21. 2 2
      MediaBrowser.Api/Playback/Hls/HlsSegmentService.cs
  22. 1 1
      MediaBrowser.Api/Playback/Progressive/BaseProgressiveStreamingService.cs
  23. 5 7
      MediaBrowser.Api/Playback/Progressive/ProgressiveStreamWriter.cs
  24. 2 2
      MediaBrowser.Api/System/SystemService.cs
  25. 14 14
      MediaBrowser.Controller/MediaEncoding/EncodingHelper.cs
  26. 1 1
      MediaBrowser.Controller/Net/IHttpResultFactory.cs
  27. 2 2
      MediaBrowser.Controller/Net/StaticResultOptions.cs
  28. 1 1
      MediaBrowser.LocalMetadata/Savers/BaseXmlSaver.cs
  29. 19 19
      MediaBrowser.MediaEncoding/BdInfo/BdInfoDirectoryInfo.cs
  30. 6 8
      MediaBrowser.MediaEncoding/BdInfo/BdInfoFileInfo.cs
  31. 1 1
      MediaBrowser.MediaEncoding/Subtitles/SubtitleEncoder.cs
  32. 0 138
      MediaBrowser.Model/IO/IFileSystem.cs
  33. 4 4
      MediaBrowser.Model/IO/IODefaults.cs
  34. 2 2
      MediaBrowser.Providers/Manager/ImageSaver.cs
  35. 2 4
      MediaBrowser.Providers/Manager/ItemImageProvider.cs
  36. 1 1
      MediaBrowser.Providers/Manager/MetadataService.cs
  37. 1 1
      MediaBrowser.Providers/Manager/ProviderManager.cs
  38. 3 3
      MediaBrowser.Providers/Music/AudioDbAlbumProvider.cs
  39. 3 2
      MediaBrowser.Providers/Music/AudioDbArtistProvider.cs
  40. 2 2
      MediaBrowser.Providers/Omdb/OmdbProvider.cs
  41. 3 3
      MediaBrowser.Providers/Studios/StudiosImageProvider.cs
  42. 2 2
      MediaBrowser.Providers/Subtitles/SubtitleManager.cs
  43. 1 1
      MediaBrowser.Providers/Tmdb/People/TmdbPersonProvider.cs
  44. 1 1
      MediaBrowser.WebDashboard/Api/DashboardService.cs

+ 2 - 2
DvdLib/Ifo/Dvd.cs

@@ -42,7 +42,7 @@ namespace DvdLib.Ifo
             }
             else
             {
-                using (var vmgFs = _fileSystem.GetFileStream(vmgPath.FullName, FileOpenMode.Open, FileAccessMode.Read, FileShareMode.Read))
+                using (var vmgFs = new FileStream(vmgPath.FullName, FileMode.Open, FileAccess.Read, FileShare.Read))
                 {
                     using (var vmgRead = new BigEndianBinaryReader(vmgFs))
                     {
@@ -95,7 +95,7 @@ namespace DvdLib.Ifo
         {
             VTSPaths[vtsNum] = vtsPath;
 
-            using (var vtsFs = _fileSystem.GetFileStream(vtsPath, FileOpenMode.Open, FileAccessMode.Read, FileShareMode.Read))
+            using (var vtsFs = new FileStream(vtsPath, FileMode.Open, FileAccess.Read, FileShare.Read))
             {
                 using (var vtsRead = new BigEndianBinaryReader(vtsFs))
                 {

+ 1 - 1
Emby.Dlna/DlnaManager.cs

@@ -385,7 +385,7 @@ namespace Emby.Dlna
                     {
                         Directory.CreateDirectory(systemProfilesPath);
 
-                        using (var fileStream = _fileSystem.GetFileStream(path, FileOpenMode.Create, FileAccessMode.Write, FileShareMode.Read))
+                        using (var fileStream = new FileStream(path, FileMode.Create, FileAccess.Write, FileShare.Read))
                         {
                             await stream.CopyToAsync(fileStream);
                         }

+ 1 - 2
Emby.Drawing/ImageProcessor.cs

@@ -14,7 +14,6 @@ using MediaBrowser.Controller.MediaEncoding;
 using MediaBrowser.Controller.Providers;
 using MediaBrowser.Model.Drawing;
 using MediaBrowser.Model.Entities;
-using MediaBrowser.Model.Extensions;
 using MediaBrowser.Model.IO;
 using MediaBrowser.Model.Net;
 using Microsoft.Extensions.Logging;
@@ -129,7 +128,7 @@ namespace Emby.Drawing
         {
             var file = await ProcessImage(options).ConfigureAwait(false);
 
-            using (var fileStream = _fileSystem.GetFileStream(file.Item1, FileOpenMode.Open, FileAccessMode.Read, FileShareMode.Read, true))
+            using (var fileStream = new FileStream(file.Item1, FileMode.Open, FileAccess.Read, FileShare.Read, IODefaults.FileStreamBufferSize, true))
             {
                 await fileStream.CopyToAsync(toStream).ConfigureAwait(false);
             }

+ 1 - 1
Emby.Server.Implementations/ApplicationHost.cs

@@ -599,7 +599,7 @@ namespace Emby.Server.Implementations
                 HttpsPort = ServerConfiguration.DefaultHttpsPort;
             }
 
-            JsonSerializer = new JsonSerializer(FileSystemManager);
+            JsonSerializer = new JsonSerializer();
 
             if (Plugins != null)
             {

+ 1 - 1
Emby.Server.Implementations/Devices/DeviceManager.cs

@@ -243,7 +243,7 @@ namespace Emby.Server.Implementations.Devices
 
             try
             {
-                using (var fs = _fileSystem.GetFileStream(path, FileOpenMode.Create, FileAccessMode.Write, FileShareMode.Read))
+                using (var fs = new FileStream(path, FileMode.Create, FileAccess.Write, FileShare.Read))
                 {
                     await stream.CopyToAsync(fs).ConfigureAwait(false);
                 }

+ 2 - 2
Emby.Server.Implementations/HttpClientManager/HttpClientManager.cs

@@ -197,7 +197,7 @@ namespace Emby.Server.Implementations.HttpClientManager
             if (File.Exists(responseCachePath)
                 && _fileSystem.GetLastWriteTimeUtc(responseCachePath).Add(cacheLength) > DateTime.UtcNow)
             {
-                var stream = _fileSystem.GetFileStream(responseCachePath, FileOpenMode.Open, FileAccessMode.Read, FileShareMode.Read, true);
+                var stream = new FileStream(responseCachePath, FileMode.Open, FileAccess.Read, FileShare.Read, IODefaults.FileStreamBufferSize, true);
 
                 return new HttpResponseInfo
                 {
@@ -220,7 +220,7 @@ namespace Emby.Server.Implementations.HttpClientManager
                 FileMode.Create,
                 FileAccess.Write,
                 FileShare.None,
-                StreamDefaults.DefaultFileStreamBufferSize,
+                IODefaults.FileStreamBufferSize,
                 true))
             {
                 await response.Content.CopyToAsync(fileStream).ConfigureAwait(false);

+ 7 - 7
Emby.Server.Implementations/HttpServer/FileWriter.cs

@@ -72,7 +72,7 @@ namespace Emby.Server.Implementations.HttpServer
                 SetRangeValues();
             }
 
-            FileShare = FileShareMode.Read;
+            FileShare = FileShare.Read;
             Cookies = new List<Cookie>();
         }
 
@@ -94,7 +94,7 @@ namespace Emby.Server.Implementations.HttpServer
 
         public List<Cookie> Cookies { get; private set; }
 
-        public FileShareMode FileShare { get; set; }
+        public FileShare FileShare { get; set; }
 
         /// <summary>
         /// Gets the options.
@@ -222,17 +222,17 @@ namespace Emby.Server.Implementations.HttpServer
             }
         }
 
-        public async Task TransmitFile(Stream stream, string path, long offset, long count, FileShareMode fileShareMode, CancellationToken cancellationToken)
+        public async Task TransmitFile(Stream stream, string path, long offset, long count, FileShare fileShare, CancellationToken cancellationToken)
         {
-            var fileOpenOptions = FileOpenOptions.SequentialScan;
+            var fileOptions = FileOptions.SequentialScan;
 
             // use non-async filestream along with read due to https://github.com/dotnet/corefx/issues/6039
             if (!RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
             {
-                fileOpenOptions |= FileOpenOptions.Asynchronous;
+                fileOptions |= FileOptions.Asynchronous;
             }
 
-            using (var fs = _fileSystem.GetFileStream(path, FileOpenMode.Open, FileAccessMode.Read, fileShareMode, fileOpenOptions))
+            using (var fs = new FileStream(path, FileMode.Open, FileAccess.Read, fileShare, IODefaults.FileStreamBufferSize, fileOptions))
             {
                 if (offset > 0)
                 {
@@ -245,7 +245,7 @@ namespace Emby.Server.Implementations.HttpServer
                 }
                 else
                 {
-                    await fs.CopyToAsync(stream, StreamDefaults.DefaultCopyToBufferSize, cancellationToken).ConfigureAwait(false);
+                    await fs.CopyToAsync(stream, IODefaults.CopyToBufferSize, cancellationToken).ConfigureAwait(false);
                 }
             }
         }

+ 0 - 81
Emby.Server.Implementations/IO/ManagedFileSystem.cs

@@ -365,87 +365,6 @@ namespace Emby.Server.Implementations.IO
             return GetLastWriteTimeUtc(GetFileSystemInfo(path));
         }
 
-        /// <summary>
-        /// Gets the file stream.
-        /// </summary>
-        /// <param name="path">The path.</param>
-        /// <param name="mode">The mode.</param>
-        /// <param name="access">The access.</param>
-        /// <param name="share">The share.</param>
-        /// <param name="isAsync">if set to <c>true</c> [is asynchronous].</param>
-        /// <returns>FileStream.</returns>
-        public virtual Stream GetFileStream(string path, FileOpenMode mode, FileAccessMode access, FileShareMode share, bool isAsync = false)
-        {
-            if (isAsync)
-            {
-                return GetFileStream(path, mode, access, share, FileOpenOptions.Asynchronous);
-            }
-
-            return GetFileStream(path, mode, access, share, FileOpenOptions.None);
-        }
-
-        public virtual Stream GetFileStream(string path, FileOpenMode mode, FileAccessMode access, FileShareMode share, FileOpenOptions fileOpenOptions)
-            => new FileStream(path, GetFileMode(mode), GetFileAccess(access), GetFileShare(share), 4096, GetFileOptions(fileOpenOptions));
-
-        private static FileOptions GetFileOptions(FileOpenOptions mode)
-        {
-            var val = (int)mode;
-            return (FileOptions)val;
-        }
-
-        private static FileMode GetFileMode(FileOpenMode mode)
-        {
-            switch (mode)
-            {
-                //case FileOpenMode.Append:
-                //    return FileMode.Append;
-                case FileOpenMode.Create:
-                    return FileMode.Create;
-                case FileOpenMode.CreateNew:
-                    return FileMode.CreateNew;
-                case FileOpenMode.Open:
-                    return FileMode.Open;
-                case FileOpenMode.OpenOrCreate:
-                    return FileMode.OpenOrCreate;
-                //case FileOpenMode.Truncate:
-                //    return FileMode.Truncate;
-                default:
-                    throw new Exception("Unrecognized FileOpenMode");
-            }
-        }
-
-        private static FileAccess GetFileAccess(FileAccessMode mode)
-        {
-            switch (mode)
-            {
-                //case FileAccessMode.ReadWrite:
-                //    return FileAccess.ReadWrite;
-                case FileAccessMode.Write:
-                    return FileAccess.Write;
-                case FileAccessMode.Read:
-                    return FileAccess.Read;
-                default:
-                    throw new Exception("Unrecognized FileAccessMode");
-            }
-        }
-
-        private static FileShare GetFileShare(FileShareMode mode)
-        {
-            switch (mode)
-            {
-                case FileShareMode.ReadWrite:
-                    return FileShare.ReadWrite;
-                case FileShareMode.Write:
-                    return FileShare.Write;
-                case FileShareMode.Read:
-                    return FileShare.Read;
-                case FileShareMode.None:
-                    return FileShare.None;
-                default:
-                    throw new Exception("Unrecognized FileShareMode");
-            }
-        }
-
         public virtual void SetHidden(string path, bool isHidden)
         {
             if (OperatingSystem.Id != OperatingSystemId.Windows)

+ 3 - 5
Emby.Server.Implementations/LiveTv/EmbyTV/DirectRecorder.cs

@@ -15,14 +15,12 @@ namespace Emby.Server.Implementations.LiveTv.EmbyTV
     {
         private readonly ILogger _logger;
         private readonly IHttpClient _httpClient;
-        private readonly IFileSystem _fileSystem;
         private readonly IStreamHelper _streamHelper;
 
-        public DirectRecorder(ILogger logger, IHttpClient httpClient, IFileSystem fileSystem, IStreamHelper streamHelper)
+        public DirectRecorder(ILogger logger, IHttpClient httpClient, IStreamHelper streamHelper)
         {
             _logger = logger;
             _httpClient = httpClient;
-            _fileSystem = fileSystem;
             _streamHelper = streamHelper;
         }
 
@@ -45,7 +43,7 @@ namespace Emby.Server.Implementations.LiveTv.EmbyTV
         {
             Directory.CreateDirectory(Path.GetDirectoryName(targetFile));
 
-            using (var output = _fileSystem.GetFileStream(targetFile, FileOpenMode.Create, FileAccessMode.Write, FileShareMode.Read))
+            using (var output = new FileStream(targetFile, FileMode.Create, FileAccess.Write, FileShare.Read))
             {
                 onStarted();
 
@@ -81,7 +79,7 @@ namespace Emby.Server.Implementations.LiveTv.EmbyTV
 
                 Directory.CreateDirectory(Path.GetDirectoryName(targetFile));
 
-                using (var output = _fileSystem.GetFileStream(targetFile, FileOpenMode.Create, FileAccessMode.Write, FileShareMode.Read))
+                using (var output = new FileStream(targetFile, FileMode.Create, FileAccess.Write, FileShare.Read))
                 {
                     onStarted();
 

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

@@ -1664,10 +1664,10 @@ namespace Emby.Server.Implementations.LiveTv.EmbyTV
         {
             if (mediaSource.RequiresLooping || !(mediaSource.Container ?? string.Empty).EndsWith("ts", StringComparison.OrdinalIgnoreCase) || (mediaSource.Protocol != MediaProtocol.File && mediaSource.Protocol != MediaProtocol.Http))
             {
-                return new EncodedRecorder(_logger, _fileSystem, _mediaEncoder, _config.ApplicationPaths, _jsonSerializer, _processFactory, _config);
+                return new EncodedRecorder(_logger, _mediaEncoder, _config.ApplicationPaths, _jsonSerializer, _processFactory, _config);
             }
 
-            return new DirectRecorder(_logger, _httpClient, _fileSystem, _streamHelper);
+            return new DirectRecorder(_logger, _httpClient, _streamHelper);
         }
 
         private void OnSuccessfulRecording(TimerInfo timer, string path)
@@ -1888,7 +1888,7 @@ namespace Emby.Server.Implementations.LiveTv.EmbyTV
                 return;
             }
 
-            using (var stream = _fileSystem.GetFileStream(nfoPath, FileOpenMode.Create, FileAccessMode.Write, FileShareMode.Read))
+            using (var stream = new FileStream(nfoPath, FileMode.Create, FileAccess.Write, FileShare.Read))
             {
                 var settings = new XmlWriterSettings
                 {
@@ -1952,7 +1952,7 @@ namespace Emby.Server.Implementations.LiveTv.EmbyTV
                 return;
             }
 
-            using (var stream = _fileSystem.GetFileStream(nfoPath, FileOpenMode.Create, FileAccessMode.Write, FileShareMode.Read))
+            using (var stream = new FileStream(nfoPath, FileMode.Create, FileAccess.Write, FileShare.Read))
             {
                 var settings = new XmlWriterSettings
                 {

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

@@ -14,7 +14,6 @@ using MediaBrowser.Controller.MediaEncoding;
 using MediaBrowser.Model.Configuration;
 using MediaBrowser.Model.Diagnostics;
 using MediaBrowser.Model.Dto;
-using MediaBrowser.Model.Entities;
 using MediaBrowser.Model.IO;
 using MediaBrowser.Model.Serialization;
 using Microsoft.Extensions.Logging;
@@ -24,7 +23,6 @@ namespace Emby.Server.Implementations.LiveTv.EmbyTV
     public class EncodedRecorder : IRecorder
     {
         private readonly ILogger _logger;
-        private readonly IFileSystem _fileSystem;
         private readonly IMediaEncoder _mediaEncoder;
         private readonly IServerApplicationPaths _appPaths;
         private bool _hasExited;
@@ -38,7 +36,6 @@ namespace Emby.Server.Implementations.LiveTv.EmbyTV
 
         public EncodedRecorder(
             ILogger logger,
-            IFileSystem fileSystem,
             IMediaEncoder mediaEncoder,
             IServerApplicationPaths appPaths,
             IJsonSerializer json,
@@ -46,7 +43,6 @@ namespace Emby.Server.Implementations.LiveTv.EmbyTV
             IServerConfigurationManager config)
         {
             _logger = logger;
-            _fileSystem = fileSystem;
             _mediaEncoder = mediaEncoder;
             _appPaths = appPaths;
             _json = json;
@@ -107,7 +103,7 @@ namespace Emby.Server.Implementations.LiveTv.EmbyTV
             Directory.CreateDirectory(Path.GetDirectoryName(logFilePath));
 
             // FFMpeg writes debug/error info to stderr. This is useful when debugging so let's put it in the log directory.
-            _logFileStream = _fileSystem.GetFileStream(logFilePath, FileOpenMode.Create, FileAccessMode.Write, FileShareMode.Read, true);
+            _logFileStream = new FileStream(logFilePath, FileMode.Create, FileAccess.Write, FileShare.Read, IODefaults.FileStreamBufferSize, true);
 
             var commandLineLogMessageBytes = Encoding.UTF8.GetBytes(_json.SerializeToString(mediaSource) + Environment.NewLine + Environment.NewLine + commandLineLogMessage + Environment.NewLine + Environment.NewLine);
             _logFileStream.Write(commandLineLogMessageBytes, 0, commandLineLogMessageBytes.Length);

+ 2 - 2
Emby.Server.Implementations/LiveTv/TunerHosts/LiveStream.cs

@@ -96,7 +96,7 @@ namespace Emby.Server.Implementations.LiveTv.TunerHosts
                 FileMode.Open,
                 FileAccess.Read,
                 FileShare.ReadWrite,
-                StreamDefaults.DefaultFileStreamBufferSize,
+                IODefaults.FileStreamBufferSize,
                 allowAsyncFileRead ? FileOptions.SequentialScan | FileOptions.Asynchronous : FileOptions.SequentialScan);
 
         public Task DeleteTempFiles()
@@ -199,7 +199,7 @@ namespace Emby.Server.Implementations.LiveTv.TunerHosts
                 await StreamHelper.CopyToAsync(
                     inputStream,
                     stream,
-                    StreamDefaults.DefaultCopyToBufferSize,
+                    IODefaults.CopyToBufferSize,
                     emptyReadLimit,
                     cancellationToken).ConfigureAwait(false);
             }

+ 2 - 2
Emby.Server.Implementations/LiveTv/TunerHosts/SharedHttpStream.cs

@@ -127,12 +127,12 @@ namespace Emby.Server.Implementations.LiveTv.TunerHosts
                     Logger.LogInformation("Beginning {0} stream to {1}", GetType().Name, TempFilePath);
                     using (response)
                     using (var stream = response.Content)
-                    using (var fileStream = FileSystem.GetFileStream(TempFilePath, FileOpenMode.Create, FileAccessMode.Write, FileShareMode.Read, FileOpenOptions.None))
+                    using (var fileStream = new FileStream(TempFilePath, FileMode.Create, FileAccess.Write, FileShare.Read))
                     {
                         await StreamHelper.CopyToAsync(
                             stream,
                             fileStream,
-                            StreamDefaults.DefaultCopyToBufferSize,
+                            IODefaults.CopyToBufferSize,
                             () => Resolve(openTaskCompletionSource),
                             cancellationToken).ConfigureAwait(false);
                     }

+ 9 - 23
Emby.Server.Implementations/Serialization/JsonSerializer.cs

@@ -2,7 +2,6 @@ using System;
 using System.Globalization;
 using System.IO;
 using System.Threading.Tasks;
-using MediaBrowser.Model.IO;
 using MediaBrowser.Model.Serialization;
 
 namespace Emby.Server.Implementations.Serialization
@@ -12,13 +11,15 @@ namespace Emby.Server.Implementations.Serialization
     /// </summary>
     public class JsonSerializer : IJsonSerializer
     {
-        private readonly IFileSystem _fileSystem;
-
-        public JsonSerializer(
-            IFileSystem fileSystem)
+        public JsonSerializer()
         {
-            _fileSystem = fileSystem;
-            Configure();
+            ServiceStack.Text.JsConfig.DateHandler = ServiceStack.Text.DateHandler.ISO8601;
+            ServiceStack.Text.JsConfig.ExcludeTypeInfo = true;
+            ServiceStack.Text.JsConfig.IncludeNullValues = false;
+            ServiceStack.Text.JsConfig.AlwaysUseUtc = true;
+            ServiceStack.Text.JsConfig.AssumeUtc = true;
+
+            ServiceStack.Text.JsConfig<Guid>.SerializeFn = SerializeGuid;
         }
 
         /// <summary>
@@ -81,7 +82,7 @@ namespace Emby.Server.Implementations.Serialization
                 throw new ArgumentNullException(nameof(file));
             }
 
-            using (var stream = _fileSystem.GetFileStream(file, FileOpenMode.Create, FileAccessMode.Write, FileShareMode.Read))
+            using (var stream = new FileStream(file, FileMode.Create, FileAccess.Write, FileShare.Read))
             {
                 SerializeToStream(obj, stream);
             }
@@ -162,7 +163,6 @@ namespace Emby.Server.Implementations.Serialization
                 throw new ArgumentNullException(nameof(stream));
             }
 
-
             return ServiceStack.Text.JsonSerializer.DeserializeFromStreamAsync<T>(stream);
         }
 
@@ -225,20 +225,6 @@ namespace Emby.Server.Implementations.Serialization
             }
         }
 
-        /// <summary>
-        /// Configures this instance.
-        /// </summary>
-        private void Configure()
-        {
-            ServiceStack.Text.JsConfig.DateHandler = ServiceStack.Text.DateHandler.ISO8601;
-            ServiceStack.Text.JsConfig.ExcludeTypeInfo = true;
-            ServiceStack.Text.JsConfig.IncludeNullValues = false;
-            ServiceStack.Text.JsConfig.AlwaysUseUtc = true;
-            ServiceStack.Text.JsConfig.AssumeUtc = true;
-
-            ServiceStack.Text.JsConfig<Guid>.SerializeFn = SerializeGuid;
-        }
-
         private static string SerializeGuid(Guid guid)
         {
             if (guid.Equals(Guid.Empty))

+ 1 - 1
MediaBrowser.Api/Images/ImageService.cs

@@ -656,7 +656,7 @@ namespace MediaBrowser.Api.Images
                 IsHeadRequest = isHeadRequest,
                 Path = imageResult.Item1,
 
-                FileShare = FileShareMode.Read
+                FileShare = FileShare.Read
 
             }).ConfigureAwait(false);
         }

+ 2 - 4
MediaBrowser.Api/Images/RemoteImageService.cs

@@ -274,11 +274,9 @@ namespace MediaBrowser.Api.Images
 
                 Directory.CreateDirectory(Path.GetDirectoryName(fullCachePath));
                 using (var stream = result.Content)
+                using (var filestream = new FileStream(fullCachePath, FileMode.Create, FileAccess.Write, FileShare.Read, IODefaults.FileStreamBufferSize, true))
                 {
-                    using (var filestream = _fileSystem.GetFileStream(fullCachePath, FileOpenMode.Create, FileAccessMode.Write, FileShareMode.Read, true))
-                    {
-                        await stream.CopyToAsync(filestream).ConfigureAwait(false);
-                    }
+                    await stream.CopyToAsync(filestream).ConfigureAwait(false);
                 }
 
                 Directory.CreateDirectory(Path.GetDirectoryName(pointerCachePath));

+ 1 - 1
MediaBrowser.Api/ItemLookupService.cs

@@ -305,7 +305,7 @@ namespace MediaBrowser.Api
 
             Directory.CreateDirectory(Path.GetDirectoryName(fullCachePath));
             using (var stream = result.Content)
-            using (var filestream = _fileSystem.GetFileStream(fullCachePath, FileOpenMode.Create, FileAccessMode.Write, FileShareMode.Read, true))
+            using (var filestream = new FileStream(fullCachePath, FileMode.Create, FileAccess.Write, FileShare.Read, IODefaults.FileStreamBufferSize, true))
             {
                 await stream.CopyToAsync(filestream).ConfigureAwait(false);
             }

+ 1 - 1
MediaBrowser.Api/Playback/BaseStreamingService.cs

@@ -261,7 +261,7 @@ namespace MediaBrowser.Api.Playback
             var logFilePath = Path.Combine(ServerConfigurationManager.ApplicationPaths.LogDirectoryPath, logFilePrefix + "-" + Guid.NewGuid() + ".txt");
 
             // FFMpeg writes debug/error info to stderr. This is useful when debugging so let's put it in the log directory.
-            Stream logStream = FileSystem.GetFileStream(logFilePath, FileOpenMode.Create, FileAccessMode.Write, FileShareMode.Read, true);
+            Stream logStream = new FileStream(logFilePath, FileMode.Create, FileAccess.Write, FileShare.Read, IODefaults.FileStreamBufferSize, true);
 
             var commandLineLogMessageBytes = Encoding.UTF8.GetBytes(Request.AbsoluteUri + Environment.NewLine + Environment.NewLine + JsonSerializer.SerializeToString(state.MediaSource) + Environment.NewLine + Environment.NewLine + commandLineLogMessage + Environment.NewLine + Environment.NewLine);
             await logStream.WriteAsync(commandLineLogMessageBytes, 0, commandLineLogMessageBytes.Length, cancellationTokenSource.Token).ConfigureAwait(false);

+ 4 - 4
MediaBrowser.Api/Playback/Hls/BaseHlsService.cs

@@ -168,7 +168,7 @@ namespace MediaBrowser.Api.Playback.Hls
 
         private string GetLivePlaylistText(string path, int segmentLength)
         {
-            using (var stream = FileSystem.GetFileStream(path, FileOpenMode.Open, FileAccessMode.Read, FileShareMode.ReadWrite))
+            using (var stream = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
             {
                 using (var reader = new StreamReader(stream))
                 {
@@ -211,7 +211,7 @@ namespace MediaBrowser.Api.Playback.Hls
             {
                 try
                 {
-                    // Need to use FileShareMode.ReadWrite because we're reading the file at the same time it's being written
+                    // Need to use FileShare.ReadWrite because we're reading the file at the same time it's being written
                     using (var fileStream = GetPlaylistFileStream(playlist))
                     {
                         using (var reader = new StreamReader(fileStream))
@@ -252,11 +252,11 @@ namespace MediaBrowser.Api.Playback.Hls
 
             try
             {
-                return FileSystem.GetFileStream(tmpPath, FileOpenMode.Open, FileAccessMode.Read, FileShareMode.ReadWrite, FileOpenOptions.SequentialScan);
+                return new FileStream(tmpPath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite, IODefaults.FileStreamBufferSize, FileOptions.SequentialScan);
             }
             catch (IOException)
             {
-                return FileSystem.GetFileStream(path, FileOpenMode.Open, FileAccessMode.Read, FileShareMode.ReadWrite, FileOpenOptions.SequentialScan);
+                return new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite, IODefaults.FileStreamBufferSize, FileOptions.SequentialScan);
             }
         }
 

+ 4 - 4
MediaBrowser.Api/Playback/Hls/DynamicHlsService.cs

@@ -537,7 +537,7 @@ namespace MediaBrowser.Api.Playback.Hls
             return ResultFactory.GetStaticFileResult(Request, new StaticFileResultOptions
             {
                 Path = segmentPath,
-                FileShare = FileShareMode.ReadWrite,
+                FileShare = FileShare.ReadWrite,
                 OnComplete = () =>
                 {
                     Logger.LogDebug("finished serving {0}", segmentPath);
@@ -954,12 +954,12 @@ namespace MediaBrowser.Api.Playback.Hls
                 // Unable to force key frames to h264_qsv transcode
                 if (string.Equals(codec, "h264_qsv", StringComparison.OrdinalIgnoreCase))
                 {
-                    Logger.LogInformation("Bug Workaround: Disabling force_key_frames for h264_qsv"); 
-                } 
+                    Logger.LogInformation("Bug Workaround: Disabling force_key_frames for h264_qsv");
+                }
                 else
                 {
                     args += " " + keyFrameArg;
-                } 
+                }
 
                 //args += " -mixed-refs 0 -refs 3 -x264opts b_pyramid=0:weightb=0:weightp=0";
 

+ 2 - 2
MediaBrowser.Api/Playback/Hls/HlsSegmentService.cs

@@ -140,7 +140,7 @@ namespace MediaBrowser.Api.Playback.Hls
             var file = request.SegmentId + Path.GetExtension(Request.PathInfo);
             file = Path.Combine(ServerConfigurationManager.GetTranscodePath(), file);
 
-            return ResultFactory.GetStaticFileResult(Request, file, FileShareMode.ReadWrite);
+            return ResultFactory.GetStaticFileResult(Request, file, FileShare.ReadWrite);
         }
 
         private Task<object> GetFileResult(string path, string playlistPath)
@@ -150,7 +150,7 @@ namespace MediaBrowser.Api.Playback.Hls
             return ResultFactory.GetStaticFileResult(Request, new StaticFileResultOptions
             {
                 Path = path,
-                FileShare = FileShareMode.ReadWrite,
+                FileShare = FileShare.ReadWrite,
                 OnComplete = () =>
                 {
                     if (transcodingJob != null)

+ 1 - 1
MediaBrowser.Api/Playback/Progressive/BaseProgressiveStreamingService.cs

@@ -248,7 +248,7 @@ namespace MediaBrowser.Api.Playback.Progressive
             //            ContentType = contentType,
             //            IsHeadRequest = isHeadRequest,
             //            Path = outputPath,
-            //            FileShare = FileShareMode.ReadWrite,
+            //            FileShare = FileShare.ReadWrite,
             //            OnComplete = () =>
             //            {
             //                if (transcodingJob != null)

+ 5 - 7
MediaBrowser.Api/Playback/Progressive/ProgressiveStreamWriter.cs

@@ -21,8 +21,6 @@ namespace MediaBrowser.Api.Playback.Progressive
         private readonly CancellationToken _cancellationToken;
         private readonly Dictionary<string, string> _outputHeaders;
 
-        const int StreamCopyToBufferSize = 81920;
-
         private long _bytesWritten = 0;
         public long StartPosition { get; set; }
         public bool AllowEndOfFile = true;
@@ -52,14 +50,14 @@ namespace MediaBrowser.Api.Playback.Progressive
 
         private Stream GetInputStream(bool allowAsyncFileRead)
         {
-            var fileOpenOptions = FileOpenOptions.SequentialScan;
+            var fileOptions = FileOptions.SequentialScan;
 
             if (allowAsyncFileRead)
             {
-                fileOpenOptions |= FileOpenOptions.Asynchronous;
+                fileOptions |= FileOptions.Asynchronous;
             }
 
-            return _fileSystem.GetFileStream(_path, FileOpenMode.Open, FileAccessMode.Read, FileShareMode.ReadWrite, fileOpenOptions);
+            return new FileStream(_path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite, IODefaults.FileStreamBufferSize, fileOptions);
         }
 
         public async Task WriteToAsync(Stream outputStream, CancellationToken cancellationToken)
@@ -127,7 +125,7 @@ namespace MediaBrowser.Api.Playback.Progressive
 
         private async Task<int> CopyToInternalAsyncWithSyncRead(Stream source, Stream destination, CancellationToken cancellationToken)
         {
-            var array = new byte[StreamCopyToBufferSize];
+            var array = new byte[IODefaults.CopyToBufferSize];
             int bytesRead;
             int totalBytesRead = 0;
 
@@ -154,7 +152,7 @@ namespace MediaBrowser.Api.Playback.Progressive
 
         private async Task<int> CopyToInternalAsync(Stream source, Stream destination, CancellationToken cancellationToken)
         {
-            var array = new byte[StreamCopyToBufferSize];
+            var array = new byte[IODefaults.CopyToBufferSize];
             int bytesRead;
             int totalBytesRead = 0;
 

+ 2 - 2
MediaBrowser.Api/System/SystemService.cs

@@ -170,10 +170,10 @@ namespace MediaBrowser.Api.System
             // For older files, assume fully static
             if (file.LastWriteTimeUtc < DateTime.UtcNow.AddHours(-1))
             {
-                return ResultFactory.GetStaticFileResult(Request, file.FullName, FileShareMode.Read);
+                return ResultFactory.GetStaticFileResult(Request, file.FullName, FileShare.Read);
             }
 
-            return ResultFactory.GetStaticFileResult(Request, file.FullName, FileShareMode.ReadWrite);
+            return ResultFactory.GetStaticFileResult(Request, file.FullName, FileShare.ReadWrite);
         }
 
         /// <summary>

+ 14 - 14
MediaBrowser.Controller/MediaEncoding/EncodingHelper.cs

@@ -475,7 +475,7 @@ namespace MediaBrowser.Controller.MediaEncoding
                     .Append(' ');
             }
 
-            if (state.IsVideoRequest 
+            if (state.IsVideoRequest
                 && string.Equals(encodingOptions.HardwareAccelerationType, "qsv", StringComparison.OrdinalIgnoreCase))
             {
                 var videoDecoder = GetHardwareAcceleratedVideoDecoder(state, encodingOptions);
@@ -486,11 +486,11 @@ namespace MediaBrowser.Controller.MediaEncoding
                     if (!string.IsNullOrEmpty(videoDecoder) && videoDecoder.Contains("qsv", StringComparison.OrdinalIgnoreCase))
                     {
                         arg.Append("-hwaccel qsv ");
-                    } 
-                    else 
+                    }
+                    else
                     {
                         arg.Append("-init_hw_device qsv=hw -filter_hw_device hw ");
-                    }	
+                    }
                 }
 
                 arg.Append(videoDecoder + " ");
@@ -653,7 +653,7 @@ namespace MediaBrowser.Controller.MediaEncoding
             //     _fileSystem.CreateDirectory(_fileSystem.GetDirectoryName(fallbackFontPath));
             //     using (var stream = _assemblyInfo.GetManifestResourceStream(GetType(), GetType().Namespace + ".DroidSansFallback.ttf"))
             //     {
-            //         using (var fileStream = _fileSystem.GetFileStream(fallbackFontPath, FileOpenMode.Create, FileAccessMode.Write, FileShareMode.Read))
+            //         using (var fileStream = new FileStream(fallbackFontPath, FileMode.Create, FileAccess.Write, FileShare.Read))
             //         {
             //             stream.CopyTo(fileStream);
             //         }
@@ -1624,22 +1624,22 @@ namespace MediaBrowser.Controller.MediaEncoding
             // Setup default filtergraph utilizing FFMpeg overlay() and FFMpeg scale() (see the return of this function for index reference)
             var retStr = " -filter_complex \"[{0}:{1}]{4}[sub];[0:{2}][sub]overlay{3}\"";
 
-            if (string.Equals(outputVideoCodec, "h264_qsv", StringComparison.OrdinalIgnoreCase)) 
+            if (string.Equals(outputVideoCodec, "h264_qsv", StringComparison.OrdinalIgnoreCase))
             {
                 /*
                     QSV in FFMpeg can now setup hardware overlay for transcodes.
                     For software decoding and hardware encoding option, frames must be hwuploaded into hardware
-                    with fixed frame size. 
+                    with fixed frame size.
                 */
                 if (!string.IsNullOrEmpty(videoDecoder) && videoDecoder.Contains("qsv", StringComparison.OrdinalIgnoreCase))
                 {
                     retStr = " -filter_complex \"[{0}:{1}]{4}[sub];[0:{2}][sub]overlay_qsv=x=(W-w)/2:y=(H-h)/2{3}\"";
-                } 
-                else 
+                }
+                else
                 {
                     retStr = " -filter_complex \"[{0}:{1}]{4}[sub];[0:{2}]hwupload=extra_hw_frames=64[v];[v][sub]overlay_qsv=x=(W-w)/2:y=(H-h)/2{3}\"";
                 }
-            } 
+            }
 
             return string.Format(
                 CultureInfo.InvariantCulture,
@@ -1731,8 +1731,8 @@ namespace MediaBrowser.Controller.MediaEncoding
                             vaapi_or_qsv,
                             outputWidth,
                             outputHeight));
-                } 
-                else 
+                }
+                else
                 {
                     filters.Add(string.Format(CultureInfo.InvariantCulture, "scale_{0}=format=nv12", vaapi_or_qsv));
                 }
@@ -1979,8 +1979,8 @@ namespace MediaBrowser.Controller.MediaEncoding
 
             var videoDecoder = GetHardwareAcceleratedVideoDecoder(state, options);
 
-            // If we are software decoding, and hardware encoding	  
-            if (string.Equals(outputVideoCodec, "h264_qsv", StringComparison.OrdinalIgnoreCase) 
+            // If we are software decoding, and hardware encoding
+            if (string.Equals(outputVideoCodec, "h264_qsv", StringComparison.OrdinalIgnoreCase)
                 && (string.IsNullOrEmpty(videoDecoder) || !videoDecoder.Contains("qsv", StringComparison.OrdinalIgnoreCase)))
             {
                 filters.Add("format=nv12|qsv");

+ 1 - 1
MediaBrowser.Controller/Net/IHttpResultFactory.cs

@@ -66,7 +66,7 @@ namespace MediaBrowser.Controller.Net
         /// <param name="path">The path.</param>
         /// <param name="fileShare">The file share.</param>
         /// <returns>System.Object.</returns>
-        Task<object> GetStaticFileResult(IRequest requestContext, string path, FileShareMode fileShare = FileShareMode.Read);
+        Task<object> GetStaticFileResult(IRequest requestContext, string path, FileShare fileShare = FileShare.Read);
 
         /// <summary>
         /// Gets the static file result.

+ 2 - 2
MediaBrowser.Controller/Net/StaticResultOptions.cs

@@ -24,12 +24,12 @@ namespace MediaBrowser.Controller.Net
         public string Path { get; set; }
         public long? ContentLength { get; set; }
 
-        public FileShareMode FileShare { get; set; }
+        public FileShare FileShare { get; set; }
 
         public StaticResultOptions()
         {
             ResponseHeaders = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase);
-            FileShare = FileShareMode.Read;
+            FileShare = FileShare.Read;
         }
     }
 

+ 1 - 1
MediaBrowser.LocalMetadata/Savers/BaseXmlSaver.cs

@@ -93,7 +93,7 @@ namespace MediaBrowser.LocalMetadata.Savers
             // On Windows, savint the file will fail if the file is hidden or readonly
             FileSystem.SetAttributes(path, false, false);
 
-            using (var filestream = FileSystem.GetFileStream(path, FileOpenMode.Create, FileAccessMode.Write, FileShareMode.Read))
+            using (var filestream = new FileStream(path, FileMode.Create, FileAccess.Write, FileShare.Read))
             {
                 stream.CopyTo(filestream);
             }

+ 19 - 19
MediaBrowser.MediaEncoding/BdInfo/BdInfoDirectoryInfo.cs

@@ -1,16 +1,27 @@
 using System;
-using System.Collections.Generic;
 using System.Linq;
 using BDInfo.IO;
 using MediaBrowser.Model.IO;
 
 namespace MediaBrowser.MediaEncoding.BdInfo
 {
-    class BdInfoDirectoryInfo : BDInfo.IO.IDirectoryInfo
+    class BdInfoDirectoryInfo : IDirectoryInfo
     {
-        IFileSystem _fileSystem = null;
+        private readonly IFileSystem _fileSystem = null;
 
-        FileSystemMetadata _impl = null;
+        private readonly FileSystemMetadata _impl = null;
+
+        public BdInfoDirectoryInfo(IFileSystem fileSystem, string path)
+        {
+            _fileSystem = fileSystem;
+            _impl = _fileSystem.GetDirectoryInfo(path);
+        }
+
+        private BdInfoDirectoryInfo(IFileSystem fileSystem, FileSystemMetadata impl)
+        {
+            _fileSystem = fileSystem;
+            _impl = impl;
+        }
 
         public string Name => _impl.Name;
 
@@ -25,22 +36,11 @@ namespace MediaBrowser.MediaEncoding.BdInfo
                 {
                     return new BdInfoDirectoryInfo(_fileSystem, parentFolder);
                 }
+
                 return null;
             }
         }
 
-        public BdInfoDirectoryInfo(IFileSystem fileSystem, string path)
-        {
-            _fileSystem = fileSystem;
-            _impl = _fileSystem.GetDirectoryInfo(path);
-        }
-
-        private BdInfoDirectoryInfo(IFileSystem fileSystem, FileSystemMetadata impl)
-        {
-            _fileSystem = fileSystem;
-            _impl = impl;
-        }
-
         public IDirectoryInfo[] GetDirectories()
         {
             return Array.ConvertAll(_fileSystem.GetDirectories(_impl.FullName).ToArray(),
@@ -50,20 +50,20 @@ namespace MediaBrowser.MediaEncoding.BdInfo
         public IFileInfo[] GetFiles()
         {
             return Array.ConvertAll(_fileSystem.GetFiles(_impl.FullName).ToArray(),
-                x => new BdInfoFileInfo(_fileSystem, x));
+                x => new BdInfoFileInfo(x));
         }
 
         public IFileInfo[] GetFiles(string searchPattern)
         {
             return Array.ConvertAll(_fileSystem.GetFiles(_impl.FullName, new[] { searchPattern }, false, false).ToArray(),
-                x => new BdInfoFileInfo(_fileSystem, x));
+                x => new BdInfoFileInfo(x));
         }
 
         public IFileInfo[] GetFiles(string searchPattern, System.IO.SearchOption searchOption)
         {
             return Array.ConvertAll(_fileSystem.GetFiles(_impl.FullName, new[] { searchPattern }, false,
                     searchOption.HasFlag(System.IO.SearchOption.AllDirectories)).ToArray(),
-                x => new BdInfoFileInfo(_fileSystem, x));
+                x => new BdInfoFileInfo(x));
         }
 
         public static IDirectoryInfo FromFileSystemPath(Model.IO.IFileSystem fs, string path)

+ 6 - 8
MediaBrowser.MediaEncoding/BdInfo/BdInfoFileInfo.cs

@@ -1,11 +1,10 @@
+using System.IO;
 using MediaBrowser.Model.IO;
 
 namespace MediaBrowser.MediaEncoding.BdInfo
 {
     class BdInfoFileInfo : BDInfo.IO.IFileInfo
     {
-        IFileSystem _fileSystem = null;
-
         FileSystemMetadata _impl = null;
 
         public string Name => _impl.Name;
@@ -18,18 +17,17 @@ namespace MediaBrowser.MediaEncoding.BdInfo
 
         public bool IsDir => _impl.IsDirectory;
 
-        public BdInfoFileInfo(IFileSystem fileSystem, FileSystemMetadata impl)
+        public BdInfoFileInfo(FileSystemMetadata impl)
         {
-            _fileSystem = fileSystem;
             _impl = impl;
         }
 
         public System.IO.Stream OpenRead()
         {
-            return _fileSystem.GetFileStream(FullName,
-                FileOpenMode.Open,
-                FileAccessMode.Read,
-                FileShareMode.Read);
+            return new FileStream(FullName,
+                FileMode.Open,
+                FileAccess.Read,
+                FileShare.Read);
         }
 
         public System.IO.StreamReader OpenText()

+ 1 - 1
MediaBrowser.MediaEncoding/Subtitles/SubtitleEncoder.cs

@@ -691,7 +691,7 @@ namespace MediaBrowser.MediaEncoding.Subtitles
 
             if (!string.Equals(text, newText))
             {
-                using (var fileStream = _fileSystem.GetFileStream(file, FileOpenMode.Create, FileAccessMode.Write, FileShareMode.Read))
+                using (var fileStream = new FileStream(file, FileMode.Create, FileAccess.Write, FileShare.Read))
                 using (var writer = new StreamWriter(fileStream, encoding))
                 {
                     writer.Write(newText);

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

@@ -98,20 +98,6 @@ namespace MediaBrowser.Model.IO
         /// <returns>DateTime.</returns>
         DateTime GetLastWriteTimeUtc(string path);
 
-        /// <summary>
-        /// Gets the file stream.
-        /// </summary>
-        /// <param name="path">The path.</param>
-        /// <param name="mode">The mode.</param>
-        /// <param name="access">The access.</param>
-        /// <param name="share">The share.</param>
-        /// <param name="isAsync">if set to <c>true</c> [is asynchronous].</param>
-        /// <returns>FileStream.</returns>
-        Stream GetFileStream(string path, FileOpenMode mode, FileAccessMode access, FileShareMode share, bool isAsync = false);
-
-        Stream GetFileStream(string path, FileOpenMode mode, FileAccessMode access, FileShareMode share,
-            FileOpenOptions fileOpenOptions);
-
         /// <summary>
         /// Swaps the files.
         /// </summary>
@@ -218,128 +204,4 @@ namespace MediaBrowser.Model.IO
         List<FileSystemMetadata> GetDrives();
         void SetExecutable(string path);
     }
-
-    //TODO Investigate if can be replaced by the one from System.IO ?
-    public enum FileOpenMode
-    {
-        //
-        // Summary:
-        //     Specifies that the operating system should create a new file. This requires System.Security.Permissions.FileIOPermissionAccess.Write
-        //     permission. If the file already exists, an System.IO.IOException exception is
-        //     thrown.
-        CreateNew = 1,
-        //
-        // Summary:
-        //     Specifies that the operating system should create a new file. If the file already
-        //     exists, it will be overwritten. This requires System.Security.Permissions.FileIOPermissionAccess.Write
-        //     permission. FileMode.Create is equivalent to requesting that if the file does
-        //     not exist, use System.IO.FileMode.CreateNew; otherwise, use System.IO.FileMode.Truncate.
-        //     If the file already exists but is a hidden file, an System.UnauthorizedAccessException
-        //     exception is thrown.
-        Create = 2,
-        //
-        // Summary:
-        //     Specifies that the operating system should open an existing file. The ability
-        //     to open the file is dependent on the value specified by the System.IO.FileAccess
-        //     enumeration. A System.IO.FileNotFoundException exception is thrown if the file
-        //     does not exist.
-        Open = 3,
-        //
-        // Summary:
-        //     Specifies that the operating system should open a file if it exists; otherwise,
-        //     a new file should be created. If the file is opened with FileAccess.Read, System.Security.Permissions.FileIOPermissionAccess.Read
-        //     permission is required. If the file access is FileAccess.Write, System.Security.Permissions.FileIOPermissionAccess.Write
-        //     permission is required. If the file is opened with FileAccess.ReadWrite, both
-        //     System.Security.Permissions.FileIOPermissionAccess.Read and System.Security.Permissions.FileIOPermissionAccess.Write
-        //     permissions are required.
-        OpenOrCreate = 4
-    }
-
-    public enum FileAccessMode
-    {
-        //
-        // Summary:
-        //     Read access to the file. Data can be read from the file. Combine with Write for
-        //     read/write access.
-        Read = 1,
-        //
-        // Summary:
-        //     Write access to the file. Data can be written to the file. Combine with Read
-        //     for read/write access.
-        Write = 2
-    }
-
-    public enum FileShareMode
-    {
-        //
-        // Summary:
-        //     Declines sharing of the current file. Any request to open the file (by this process
-        //     or another process) will fail until the file is closed.
-        None = 0,
-        //
-        // Summary:
-        //     Allows subsequent opening of the file for reading. If this flag is not specified,
-        //     any request to open the file for reading (by this process or another process)
-        //     will fail until the file is closed. However, even if this flag is specified,
-        //     additional permissions might still be needed to access the file.
-        Read = 1,
-        //
-        // Summary:
-        //     Allows subsequent opening of the file for writing. If this flag is not specified,
-        //     any request to open the file for writing (by this process or another process)
-        //     will fail until the file is closed. However, even if this flag is specified,
-        //     additional permissions might still be needed to access the file.
-        Write = 2,
-        //
-        // Summary:
-        //     Allows subsequent opening of the file for reading or writing. If this flag is
-        //     not specified, any request to open the file for reading or writing (by this process
-        //     or another process) will fail until the file is closed. However, even if this
-        //     flag is specified, additional permissions might still be needed to access the
-        //     file.
-        ReadWrite = 3
-    }
-
-    //
-    // Summary:
-    //     Represents advanced options for creating a System.IO.FileStream object.
-    [Flags]
-    public enum FileOpenOptions
-    {
-        //
-        // Summary:
-        //     Indicates that the system should write through any intermediate cache and go
-        //     directly to disk.
-        WriteThrough = int.MinValue,
-        //
-        // Summary:
-        //     Indicates that no additional options should be used when creating a System.IO.FileStream
-        //     object.
-        None = 0,
-        //
-        // Summary:
-        //     Indicates that a file is encrypted and can be decrypted only by using the same
-        //     user account used for encryption.
-        Encrypted = 16384,
-        //
-        // Summary:
-        //     Indicates that a file is automatically deleted when it is no longer in use.
-        DeleteOnClose = 67108864,
-        //
-        // Summary:
-        //     Indicates that the file is to be accessed sequentially from beginning to end.
-        //     The system can use this as a hint to optimize file caching. If an application
-        //     moves the file pointer for random access, optimum caching may not occur; however,
-        //     correct operation is still guaranteed.
-        SequentialScan = 134217728,
-        //
-        // Summary:
-        //     Indicates that the file is accessed randomly. The system can use this as a hint
-        //     to optimize file caching.
-        RandomAccess = 268435456,
-        //
-        // Summary:
-        //     Indicates that a file can be used for asynchronous reading and writing.
-        Asynchronous = 1073741824
-    }
 }

+ 4 - 4
MediaBrowser.Model/IO/StreamDefaults.cs → MediaBrowser.Model/IO/IODefaults.cs

@@ -1,18 +1,18 @@
 namespace MediaBrowser.Model.IO
 {
     /// <summary>
-    /// Class StreamDefaults.
+    /// Class IODefaults.
     /// </summary>
-    public static class StreamDefaults
+    public static class IODefaults
     {
         /// <summary>
         /// The default copy to buffer size.
         /// </summary>
-        public const int DefaultCopyToBufferSize = 81920;
+        public const int CopyToBufferSize = 81920;
 
         /// <summary>
         /// The default file stream buffer size.
         /// </summary>
-        public const int DefaultFileStreamBufferSize = 4096;
+        public const int FileStreamBufferSize = 4096;
     }
 }

+ 2 - 2
MediaBrowser.Providers/Manager/ImageSaver.cs

@@ -244,9 +244,9 @@ namespace MediaBrowser.Providers.Manager
 
                 _fileSystem.SetAttributes(path, false, false);
 
-                using (var fs = _fileSystem.GetFileStream(path, FileOpenMode.Create, FileAccessMode.Write, FileShareMode.Read, FileOpenOptions.Asynchronous))
+                using (var fs = new FileStream(path, FileMode.Create, FileAccess.Write, FileShare.Read, IODefaults.FileStreamBufferSize, FileOptions.Asynchronous))
                 {
-                    await source.CopyToAsync(fs, StreamDefaults.DefaultCopyToBufferSize, cancellationToken).ConfigureAwait(false);
+                    await source.CopyToAsync(fs, IODefaults.CopyToBufferSize, cancellationToken).ConfigureAwait(false);
                 }
 
                 if (_config.Configuration.SaveMetadataHidden)

+ 2 - 4
MediaBrowser.Providers/Manager/ItemImageProvider.cs

@@ -25,14 +25,12 @@ namespace MediaBrowser.Providers.Manager
     {
         private readonly ILogger _logger;
         private readonly IProviderManager _providerManager;
-        private readonly IServerConfigurationManager _config;
         private readonly IFileSystem _fileSystem;
 
-        public ItemImageProvider(ILogger logger, IProviderManager providerManager, IServerConfigurationManager config, IFileSystem fileSystem)
+        public ItemImageProvider(ILogger logger, IProviderManager providerManager, IFileSystem fileSystem)
         {
             _logger = logger;
             _providerManager = providerManager;
-            _config = config;
             _fileSystem = fileSystem;
         }
 
@@ -141,7 +139,7 @@ namespace MediaBrowser.Providers.Manager
                                 {
                                     var mimeType = MimeTypes.GetMimeType(response.Path);
 
-                                    var stream = _fileSystem.GetFileStream(response.Path, FileOpenMode.Open, FileAccessMode.Read, FileShareMode.Read, true);
+                                    var stream = new FileStream(response.Path, FileMode.Open, FileAccess.Read, FileShare.Read, IODefaults.FileStreamBufferSize, true);
 
                                     await _providerManager.SaveImage(item, stream, mimeType, imageType, null, cancellationToken).ConfigureAwait(false);
                                 }

+ 1 - 1
MediaBrowser.Providers/Manager/MetadataService.cs

@@ -73,7 +73,7 @@ namespace MediaBrowser.Providers.Manager
                 }
             }
 
-            var itemImageProvider = new ItemImageProvider(Logger, ProviderManager, ServerConfigurationManager, FileSystem);
+            var itemImageProvider = new ItemImageProvider(Logger, ProviderManager, FileSystem);
             var localImagesFailed = false;
 
             var allImageProviders = ((ProviderManager)ProviderManager).GetImageProviders(item, refreshOptions).ToList();

+ 1 - 1
MediaBrowser.Providers/Manager/ProviderManager.cs

@@ -182,7 +182,7 @@ namespace MediaBrowser.Providers.Manager
                 throw new ArgumentNullException(nameof(source));
             }
 
-            var fileStream = _fileSystem.GetFileStream(source, FileOpenMode.Open, FileAccessMode.Read, FileShareMode.ReadWrite, true);
+            var fileStream = new FileStream(source, FileMode.Open, FileAccess.Read, FileShare.ReadWrite, IODefaults.FileStreamBufferSize, true);
 
             return new ImageSaver(ConfigurationManager, _libraryMonitor, _fileSystem, _logger).SaveImage(item, fileStream, mimeType, type, imageIndex, saveLocallyWithMedia, cancellationToken);
         }

+ 3 - 3
MediaBrowser.Providers/Music/AudioDbAlbumProvider.cs

@@ -3,6 +3,7 @@ using System.Collections.Generic;
 using System.Globalization;
 using System.IO;
 using System.Linq;
+using System.Net.Http;
 using System.Threading;
 using System.Threading.Tasks;
 using MediaBrowser.Common.Configuration;
@@ -164,11 +165,10 @@ namespace MediaBrowser.Providers.Music
                 {
                     Url = url,
                     CancellationToken = cancellationToken
-
                 },
-                "GET").ConfigureAwait(false))
+                HttpMethod.Get).ConfigureAwait(false))
             using (var response = httpResponse.Content)
-            using (var xmlFileStream = _fileSystem.GetFileStream(path, FileOpenMode.Create, FileAccessMode.Write, FileShareMode.Read, true))
+            using (var xmlFileStream = new FileStream(path, FileMode.Create, FileAccess.Write, FileShare.Read, IODefaults.FileStreamBufferSize, true))
             {
                 await response.CopyToAsync(xmlFileStream).ConfigureAwait(false);
             }

+ 3 - 2
MediaBrowser.Providers/Music/AudioDbArtistProvider.cs

@@ -2,6 +2,7 @@ using System;
 using System.Collections.Generic;
 using System.IO;
 using System.Linq;
+using System.Net.Http;
 using System.Threading;
 using System.Threading.Tasks;
 using MediaBrowser.Common.Configuration;
@@ -152,12 +153,12 @@ namespace MediaBrowser.Providers.Music
                     CancellationToken = cancellationToken,
                     BufferContent = true
                 },
-                "GET").ConfigureAwait(false))
+                HttpMethod.Get).ConfigureAwait(false))
             using (var response = httpResponse.Content)
             {
                 Directory.CreateDirectory(Path.GetDirectoryName(path));
 
-                using (var xmlFileStream = _fileSystem.GetFileStream(path, FileOpenMode.Create, FileAccessMode.Write, FileShareMode.Read, true))
+                using (var xmlFileStream = new FileStream(path, FileMode.Create, FileAccess.Write, FileShare.Read, IODefaults.FileStreamBufferSize, true))
                 {
                     await response.CopyToAsync(xmlFileStream).ConfigureAwait(false);
                 }

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

@@ -209,7 +209,7 @@ namespace MediaBrowser.Providers.Omdb
 
             string resultString;
 
-            using (var stream = _fileSystem.GetFileStream(path, FileOpenMode.Open, FileAccessMode.Read, FileShareMode.Read))
+            using (var stream = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.Read))
             {
                 using (var reader = new StreamReader(stream, new UTF8Encoding(false)))
                 {
@@ -228,7 +228,7 @@ namespace MediaBrowser.Providers.Omdb
 
             string resultString;
 
-            using (var stream = _fileSystem.GetFileStream(path, FileOpenMode.Open, FileAccessMode.Read, FileShareMode.Read))
+            using (var stream = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.Read))
             {
                 using (var reader = new StreamReader(stream, new UTF8Encoding(false)))
                 {

+ 3 - 3
MediaBrowser.Providers/Studios/StudiosImageProvider.cs

@@ -78,7 +78,7 @@ namespace MediaBrowser.Providers.Studios
 
         private RemoteImageInfo GetImage(BaseItem item, string filename, ImageType type, string remoteFilename)
         {
-            var list = GetAvailableImages(filename, _fileSystem);
+            var list = GetAvailableImages(filename);
 
             var match = FindMatch(item, list);
 
@@ -179,9 +179,9 @@ namespace MediaBrowser.Providers.Studios
                 .Replace("/", string.Empty);
         }
 
-        public IEnumerable<string> GetAvailableImages(string file, IFileSystem fileSystem)
+        public IEnumerable<string> GetAvailableImages(string file)
         {
-            using (var fileStream = fileSystem.GetFileStream(file, FileOpenMode.Open, FileAccessMode.Read, FileShareMode.Read))
+            using (var fileStream = new FileStream(file, FileMode.Open, FileAccess.Read, FileShare.Read))
             {
                 using (var reader = new StreamReader(fileStream))
                 {

+ 2 - 2
MediaBrowser.Providers/Subtitles/SubtitleManager.cs

@@ -19,7 +19,7 @@ using MediaBrowser.Model.Globalization;
 using MediaBrowser.Model.IO;
 using MediaBrowser.Model.Providers;
 using Microsoft.Extensions.Logging;
-using static MediaBrowser.Model.IO.StreamDefaults;
+using static MediaBrowser.Model.IO.IODefaults;
 
 namespace MediaBrowser.Providers.Subtitles
 {
@@ -210,7 +210,7 @@ namespace MediaBrowser.Providers.Subtitles
                 {
                     Directory.CreateDirectory(Path.GetDirectoryName(savePath));
 
-                    using (var fs = new FileStream(savePath, FileMode.Create, FileAccess.Write, FileShare.Read, DefaultFileStreamBufferSize, true))
+                    using (var fs = new FileStream(savePath, FileMode.Create, FileAccess.Write, FileShare.Read, FileStreamBufferSize, true))
                     {
                         await stream.CopyToAsync(fs).ConfigureAwait(false);
                     }

+ 1 - 1
MediaBrowser.Providers/Tmdb/People/TmdbPersonProvider.cs

@@ -234,7 +234,7 @@ namespace MediaBrowser.Providers.Tmdb.People
                 {
                     Directory.CreateDirectory(Path.GetDirectoryName(dataFilePath));
 
-                    using (var fs = _fileSystem.GetFileStream(dataFilePath, FileOpenMode.Create, FileAccessMode.Write, FileShareMode.Read, true))
+                    using (var fs = new FileStream(dataFilePath, FileMode.Create, FileAccess.Write, FileShare.Read, IODefaults.FileStreamBufferSize, true))
                     {
                         await json.CopyToAsync(fs).ConfigureAwait(false);
                     }

+ 1 - 1
MediaBrowser.WebDashboard/Api/DashboardService.cs

@@ -425,7 +425,7 @@ namespace MediaBrowser.WebDashboard.Api
         private async Task DumpFile(PackageCreator packageCreator, string resourceVirtualPath, string destinationFilePath, string mode, string appVersion)
         {
             using (var stream = await packageCreator.GetResource(resourceVirtualPath, mode, null, appVersion).ConfigureAwait(false))
-            using (var fs = _fileSystem.GetFileStream(destinationFilePath, FileOpenMode.Create, FileAccessMode.Write, FileShareMode.Read))
+            using (var fs = new FileStream(destinationFilePath, FileMode.Create, FileAccess.Write, FileShare.Read))
             {
                 await stream.CopyToAsync(fs);
             }