Преглед на файлове

tighter control of shortcuts

Luke Pulverenti преди 12 години
родител
ревизия
6c1bfe661b

+ 4 - 2
MediaBrowser.Controller/Entities/BaseItem.cs

@@ -338,10 +338,12 @@ namespace MediaBrowser.Controller.Entities
 
 
             if (args.IsDirectory)
             if (args.IsDirectory)
             {
             {
+                var isPhysicalRoot = args.IsPhysicalRoot;
+
                 // When resolving the root, we need it's grandchildren (children of user views)
                 // When resolving the root, we need it's grandchildren (children of user views)
-                var flattenFolderDepth = args.IsPhysicalRoot ? 2 : 0;
+                var flattenFolderDepth = isPhysicalRoot ? 2 : 0;
 
 
-                args.FileSystemDictionary = FileData.GetFilteredFileSystemEntries(args.Path, Logger, flattenFolderDepth: flattenFolderDepth, args: args);
+                args.FileSystemDictionary = FileData.GetFilteredFileSystemEntries(args.Path, Logger, flattenFolderDepth: flattenFolderDepth, args: args, resolveShortcuts: isPhysicalRoot || args.IsVf);
             }
             }
 
 
             //update our dates
             //update our dates

+ 4 - 3
MediaBrowser.Controller/IO/FileData.cs

@@ -21,11 +21,12 @@ namespace MediaBrowser.Controller.IO
         /// <param name="includeFiles">if set to <c>true</c> [include files].</param>
         /// <param name="includeFiles">if set to <c>true</c> [include files].</param>
         /// <param name="includeDirectories">if set to <c>true</c> [include directories].</param>
         /// <param name="includeDirectories">if set to <c>true</c> [include directories].</param>
         /// <param name="flattenFolderDepth">The flatten folder depth.</param>
         /// <param name="flattenFolderDepth">The flatten folder depth.</param>
+        /// <param name="resolveShortcuts">if set to <c>true</c> [resolve shortcuts].</param>
         /// <param name="args">The args.</param>
         /// <param name="args">The args.</param>
         /// <returns>Dictionary{System.StringWIN32_FIND_DATA}.</returns>
         /// <returns>Dictionary{System.StringWIN32_FIND_DATA}.</returns>
         /// <exception cref="System.ArgumentNullException"></exception>
         /// <exception cref="System.ArgumentNullException"></exception>
         /// <exception cref="System.IO.IOException">GetFileSystemEntries failed</exception>
         /// <exception cref="System.IO.IOException">GetFileSystemEntries failed</exception>
-        public static Dictionary<string, WIN32_FIND_DATA> GetFilteredFileSystemEntries(string path, ILogger logger, string searchPattern = "*", bool includeFiles = true, bool includeDirectories = true, int flattenFolderDepth = 0, ItemResolveArgs args = null)
+        public static Dictionary<string, WIN32_FIND_DATA> GetFilteredFileSystemEntries(string path, ILogger logger, string searchPattern = "*", bool includeFiles = true, bool includeDirectories = true, int flattenFolderDepth = 0, bool resolveShortcuts = true, ItemResolveArgs args = null)
         {
         {
             if (string.IsNullOrEmpty(path))
             if (string.IsNullOrEmpty(path))
             {
             {
@@ -80,7 +81,7 @@ namespace MediaBrowser.Controller.IO
 
 
                 lpFindFileData.Path = Path.Combine(path, lpFindFileData.cFileName);
                 lpFindFileData.Path = Path.Combine(path, lpFindFileData.cFileName);
 
 
-                if (FileSystem.IsShortcut(lpFindFileData.Path))
+                if (resolveShortcuts && FileSystem.IsShortcut(lpFindFileData.Path))
                 {
                 {
                     var newPath = FileSystem.ResolveShortcut(lpFindFileData.Path);
                     var newPath = FileSystem.ResolveShortcut(lpFindFileData.Path);
                     if (string.IsNullOrWhiteSpace(newPath))
                     if (string.IsNullOrWhiteSpace(newPath))
@@ -110,7 +111,7 @@ namespace MediaBrowser.Controller.IO
                 }
                 }
                 else if (flattenFolderDepth > 0 && lpFindFileData.IsDirectory)
                 else if (flattenFolderDepth > 0 && lpFindFileData.IsDirectory)
                 {
                 {
-                    foreach (var child in GetFilteredFileSystemEntries(lpFindFileData.Path, logger, flattenFolderDepth: flattenFolderDepth - 1))
+                    foreach (var child in GetFilteredFileSystemEntries(lpFindFileData.Path, logger, flattenFolderDepth: flattenFolderDepth - 1, resolveShortcuts: resolveShortcuts))
                     {
                     {
                         dict[child.Key] = child.Value;
                         dict[child.Key] = child.Value;
                     }
                     }

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

@@ -413,10 +413,12 @@ namespace MediaBrowser.Server.Implementations.Library
             // Gather child folder and files
             // Gather child folder and files
             if (args.IsDirectory)
             if (args.IsDirectory)
             {
             {
+                var isPhysicalRoot = args.IsPhysicalRoot;
+
                 // When resolving the root, we need it's grandchildren (children of user views)
                 // When resolving the root, we need it's grandchildren (children of user views)
-                var flattenFolderDepth = args.IsPhysicalRoot ? 2 : 0;
+                var flattenFolderDepth = isPhysicalRoot ? 2 : 0;
 
 
-                args.FileSystemDictionary = FileData.GetFilteredFileSystemEntries(args.Path, _logger, flattenFolderDepth: flattenFolderDepth, args: args);
+                args.FileSystemDictionary = FileData.GetFilteredFileSystemEntries(args.Path, _logger, flattenFolderDepth: flattenFolderDepth, args: args, resolveShortcuts: isPhysicalRoot || args.IsVf);
             }
             }
 
 
             // Check to see if we should resolve based on our contents
             // Check to see if we should resolve based on our contents