Browse Source

update directory picker

Luke Pulverenti 8 years ago
parent
commit
6e4d234212

+ 16 - 12
Emby.Common.Implementations/IO/ManagedFileSystem.cs

@@ -69,14 +69,6 @@ namespace Emby.Common.Implementations.IO
             }
         }
 
-        public char PathSeparator
-        {
-            get
-            {
-                return Path.PathSeparator;
-            }
-        }
-
         public string GetFullPath(string path)
         {
             return Path.GetFullPath(path);
@@ -544,6 +536,16 @@ namespace Emby.Common.Implementations.IO
             CopyFile(temp1, file2, true);
         }
 
+        private char GetSeparatorChar(string path)
+        {
+            if (path.IndexOf('/') != -1)
+            {
+                return '/';
+            }
+
+            return '\\';
+        }
+
         public bool AreEqual(string path1, string path2)
         {
             if (path1 == null && path2 == null)
@@ -556,8 +558,8 @@ namespace Emby.Common.Implementations.IO
                 return false;
             }
 
-            path1 = path1.TrimEnd(DirectorySeparatorChar);
-            path2 = path2.TrimEnd(DirectorySeparatorChar);
+            path1 = path1.TrimEnd(GetSeparatorChar(path1));
+            path2 = path2.TrimEnd(GetSeparatorChar(path2));
 
             return string.Equals(path1, path2, StringComparison.OrdinalIgnoreCase);
         }
@@ -574,7 +576,9 @@ namespace Emby.Common.Implementations.IO
                 throw new ArgumentNullException("path");
             }
 
-            return path.IndexOf(parentPath.TrimEnd(Path.DirectorySeparatorChar) + Path.DirectorySeparatorChar, StringComparison.OrdinalIgnoreCase) != -1;
+            var separatorChar = GetSeparatorChar(parentPath);
+
+            return path.IndexOf(parentPath.TrimEnd(separatorChar) + separatorChar, StringComparison.OrdinalIgnoreCase) != -1;
         }
 
         public bool IsRootPath(string path)
@@ -606,7 +610,7 @@ namespace Emby.Common.Implementations.IO
                 return path;
             }
 
-            return path.TrimEnd(Path.DirectorySeparatorChar);
+            return path.TrimEnd(GetSeparatorChar(path));
         }
 
         public string GetFileNameWithoutExtension(FileSystemMetadata info)

+ 14 - 7
Emby.Common.Implementations/IO/SharpCifsFileSystem.cs

@@ -55,7 +55,7 @@ namespace Emby.Common.Implementations.IO
 
         private string GetReturnPath(SmbFile file)
         {
-            return file.GetCanonicalPath();
+            return file.GetCanonicalPath().TrimEnd('/');
             //return file.GetPath();
         }
 
@@ -419,9 +419,16 @@ namespace Emby.Common.Implementations.IO
             }
         }
 
+        private SmbFile CreateSmbDirectoryForListFiles(string path)
+        {
+            // In order to call ListFiles, it has to end with the separator
+
+            return CreateSmbFile(path.TrimEnd('/') + '/');
+        }
+
         public IEnumerable<FileSystemMetadata> GetDirectories(string path, bool recursive = false)
         {
-            var dir = CreateSmbFile(path);
+            var dir = CreateSmbDirectoryForListFiles(path);
             AssertDirectoryExists(dir, path);
 
             var list = ListFiles(dir, recursive);
@@ -437,7 +444,7 @@ namespace Emby.Common.Implementations.IO
 
         public IEnumerable<FileSystemMetadata> GetFiles(string path, string[] extensions, bool enableCaseSensitiveExtensions, bool recursive = false)
         {
-            var dir = CreateSmbFile(path);
+            var dir = CreateSmbDirectoryForListFiles(path);
             AssertDirectoryExists(dir, path);
 
             var list = ListFiles(dir, recursive);
@@ -459,7 +466,7 @@ namespace Emby.Common.Implementations.IO
 
         public IEnumerable<FileSystemMetadata> GetFileSystemEntries(string path, bool recursive = false)
         {
-            var dir = CreateSmbFile(path);
+            var dir = CreateSmbDirectoryForListFiles(path);
             AssertDirectoryExists(dir, path);
 
             var list = ListFiles(dir, recursive);
@@ -472,7 +479,7 @@ namespace Emby.Common.Implementations.IO
 
         public IEnumerable<string> GetFileSystemEntryPaths(string path, bool recursive = false)
         {
-            var dir = CreateSmbFile(path);
+            var dir = CreateSmbDirectoryForListFiles(path);
             AssertDirectoryExists(dir, path);
 
             var list = ListFiles(dir, recursive);
@@ -485,7 +492,7 @@ namespace Emby.Common.Implementations.IO
 
         public IEnumerable<string> GetFilePaths(string path, string[] extensions, bool enableCaseSensitiveExtensions, bool recursive = false)
         {
-            var dir = CreateSmbFile(path);
+            var dir = CreateSmbDirectoryForListFiles(path);
             AssertDirectoryExists(dir, path);
 
             var list = ListFiles(dir, recursive);
@@ -507,7 +514,7 @@ namespace Emby.Common.Implementations.IO
 
         public IEnumerable<string> GetDirectoryPaths(string path, bool recursive = false)
         {
-            var dir = CreateSmbFile(path);
+            var dir = CreateSmbDirectoryForListFiles(path);
             AssertDirectoryExists(dir, path);
 
             var list = ListFiles(dir, recursive);

+ 11 - 2
Emby.Server.Implementations/HttpServer/HttpListenerHost.cs

@@ -273,10 +273,19 @@ namespace Emby.Server.Implementations.HttpServer
                 return 400;
             }
 
+            var exceptionType = ex.GetType();
+
             int statusCode;
-            if (!_mapExceptionToStatusCode.TryGetValue(ex.GetType(), out statusCode))
+            if (!_mapExceptionToStatusCode.TryGetValue(exceptionType, out statusCode))
             {
-                statusCode = 500;
+                if (string.Equals(exceptionType.Name, "DirectoryNotFoundException", StringComparison.OrdinalIgnoreCase))
+                {
+                    statusCode = 404;
+                }
+                else
+                {
+                    statusCode = 500;
+                }
             }
 
             return statusCode;

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

@@ -312,7 +312,6 @@ namespace MediaBrowser.Model.IO
         void SetReadOnly(string path, bool isHidden);
 
         char DirectorySeparatorChar { get; }
-        char PathSeparator { get; }
 
         string GetFullPath(string path);