diff --git a/MediaBrowser.Controller/IO/FileSystem.cs b/MediaBrowser.Controller/IO/FileSystem.cs index f31fc53de5..b08e8da274 100644 --- a/MediaBrowser.Controller/IO/FileSystem.cs +++ b/MediaBrowser.Controller/IO/FileSystem.cs @@ -30,27 +30,6 @@ namespace MediaBrowser.Controller.IO } } - /// - /// Gets the creation time UTC. - /// - /// The info. - /// The logger. - /// DateTime. - public static DateTime GetCreationTimeUtc(FileSystemInfo info, ILogger logger) - { - // This could throw an error on some file systems that have dates out of range - - try - { - return info.CreationTimeUtc; - } - catch (Exception ex) - { - logger.ErrorException("Error determining CreationTimeUtc for {0}", ex, info.FullName); - return DateTime.MinValue; - } - } - /// /// Copies all. /// diff --git a/MediaBrowser.Controller/IO/IFileSystem.cs b/MediaBrowser.Controller/IO/IFileSystem.cs index 2654c3235e..cbc5c7bf34 100644 --- a/MediaBrowser.Controller/IO/IFileSystem.cs +++ b/MediaBrowser.Controller/IO/IFileSystem.cs @@ -1,4 +1,5 @@ -using System.IO; +using System; +using System.IO; namespace MediaBrowser.Controller.IO { @@ -41,5 +42,12 @@ namespace MediaBrowser.Controller.IO /// The filename. /// System.String. string GetValidFilename(string filename); + + /// + /// Gets the creation time UTC. + /// + /// The info. + /// DateTime. + DateTime GetCreationTimeUtc(FileSystemInfo info); } } diff --git a/MediaBrowser.Controller/Resolvers/EntityResolutionHelper.cs b/MediaBrowser.Controller/Resolvers/EntityResolutionHelper.cs index 7961834d67..5d61e5eb9c 100644 --- a/MediaBrowser.Controller/Resolvers/EntityResolutionHelper.cs +++ b/MediaBrowser.Controller/Resolvers/EntityResolutionHelper.cs @@ -146,7 +146,7 @@ namespace MediaBrowser.Controller.Resolvers { if (includeCreationTime) { - item.DateCreated = childData.CreationTimeUtc; + item.DateCreated = fileSystem.GetCreationTimeUtc(childData); } item.DateModified = childData.LastWriteTimeUtc; @@ -159,7 +159,7 @@ namespace MediaBrowser.Controller.Resolvers { if (includeCreationTime) { - item.DateCreated = fileData.CreationTimeUtc; + item.DateCreated = fileSystem.GetCreationTimeUtc(fileData); } item.DateModified = fileData.LastWriteTimeUtc; } @@ -169,7 +169,7 @@ namespace MediaBrowser.Controller.Resolvers { if (includeCreationTime) { - item.DateCreated = args.FileInfo.CreationTimeUtc; + item.DateCreated = fileSystem.GetCreationTimeUtc(args.FileInfo); } item.DateModified = args.FileInfo.LastWriteTimeUtc; } diff --git a/MediaBrowser.Providers/ImagesByNameProvider.cs b/MediaBrowser.Providers/ImagesByNameProvider.cs index 2fdfe199ab..8c5b3635d1 100644 --- a/MediaBrowser.Providers/ImagesByNameProvider.cs +++ b/MediaBrowser.Providers/ImagesByNameProvider.cs @@ -114,7 +114,7 @@ namespace MediaBrowser.Providers return files.Select(f => { var lastWriteTime = FileSystem.GetLastWriteTimeUtc(f, Logger); - var creationTime = FileSystem.GetCreationTimeUtc(f, Logger); + var creationTime = _fileSystem.GetCreationTimeUtc(f); return creationTime > lastWriteTime ? creationTime : lastWriteTime; diff --git a/MediaBrowser.Server.Implementations/Library/LibraryManager.cs b/MediaBrowser.Server.Implementations/Library/LibraryManager.cs index eed191aab2..0c5d55a3b7 100644 --- a/MediaBrowser.Server.Implementations/Library/LibraryManager.cs +++ b/MediaBrowser.Server.Implementations/Library/LibraryManager.cs @@ -771,7 +771,7 @@ namespace MediaBrowser.Server.Implementations.Library { Name = name, Id = id, - DateCreated = fileInfo.CreationTimeUtc, + DateCreated = _fileSystem.GetCreationTimeUtc(fileInfo), DateModified = fileInfo.LastWriteTimeUtc, Path = path }; diff --git a/MediaBrowser.ServerApplication/ApplicationHost.cs b/MediaBrowser.ServerApplication/ApplicationHost.cs index 4aac1bb919..196d065805 100644 --- a/MediaBrowser.ServerApplication/ApplicationHost.cs +++ b/MediaBrowser.ServerApplication/ApplicationHost.cs @@ -249,7 +249,7 @@ namespace MediaBrowser.ServerApplication RegisterSingleInstance(() => new BdInfoExaminer()); - FileSystemManager = FileSystemFactory.CreateFileSystemManager(); + FileSystemManager = FileSystemFactory.CreateFileSystemManager(LogManager); RegisterSingleInstance(FileSystemManager); var mediaEncoderTask = RegisterMediaEncoder(); diff --git a/MediaBrowser.ServerApplication/IO/CommonFileSystem.cs b/MediaBrowser.ServerApplication/IO/CommonFileSystem.cs index b777930f3a..dee9bd9d77 100644 --- a/MediaBrowser.ServerApplication/IO/CommonFileSystem.cs +++ b/MediaBrowser.ServerApplication/IO/CommonFileSystem.cs @@ -1,4 +1,5 @@ using MediaBrowser.Controller.IO; +using MediaBrowser.Model.Logging; using System; using System.IO; using System.Text; @@ -10,6 +11,13 @@ namespace MediaBrowser.ServerApplication.IO /// public class CommonFileSystem : IFileSystem { + protected ILogger Logger; + + public CommonFileSystem(ILogger logger) + { + Logger = logger; + } + /// /// Determines whether the specified filename is shortcut. /// @@ -137,6 +145,25 @@ namespace MediaBrowser.ServerApplication.IO return builder.ToString(); } + + /// + /// Gets the creation time UTC. + /// + /// The info. + /// DateTime. + public DateTime GetCreationTimeUtc(FileSystemInfo info) + { + // This could throw an error on some file systems that have dates out of range + try + { + return info.CreationTimeUtc; + } + catch (Exception ex) + { + Logger.ErrorException("Error determining CreationTimeUtc for {0}", ex, info.FullName); + return DateTime.MinValue; + } + } } diff --git a/MediaBrowser.ServerApplication/IO/FileSystemFactory.cs b/MediaBrowser.ServerApplication/IO/FileSystemFactory.cs index 78a9338a4a..ab7802e17d 100644 --- a/MediaBrowser.ServerApplication/IO/FileSystemFactory.cs +++ b/MediaBrowser.ServerApplication/IO/FileSystemFactory.cs @@ -1,4 +1,5 @@ using MediaBrowser.Controller.IO; +using MediaBrowser.Model.Logging; namespace MediaBrowser.ServerApplication.IO { @@ -11,9 +12,9 @@ namespace MediaBrowser.ServerApplication.IO /// Creates the file system manager. /// /// IFileSystem. - public static IFileSystem CreateFileSystemManager() + public static IFileSystem CreateFileSystemManager(ILogManager logManager) { - return new NativeFileSystem(); + return new NativeFileSystem(logManager.GetLogger("FileSystem")); } } } diff --git a/MediaBrowser.ServerApplication/IO/NativeFileSystem.cs b/MediaBrowser.ServerApplication/IO/NativeFileSystem.cs index b5ceec6196..0101b42498 100644 --- a/MediaBrowser.ServerApplication/IO/NativeFileSystem.cs +++ b/MediaBrowser.ServerApplication/IO/NativeFileSystem.cs @@ -1,4 +1,5 @@ -using System; +using MediaBrowser.Model.Logging; +using System; using System.IO; using System.Runtime.InteropServices; using System.Security; @@ -8,6 +9,11 @@ namespace MediaBrowser.ServerApplication.IO { public class NativeFileSystem : CommonFileSystem { + public NativeFileSystem(ILogger logger) + : base(logger) + { + } + public override bool IsShortcut(string filename) { return base.IsShortcut(filename) ||