1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using MediaBrowser.Controller.Resolvers;
- using MediaBrowser.Controller.Library;
- namespace MediaBrowser.Controller.IO
- {
- public static class FileSystemHelper
- {
- /// <summary>
- /// Transforms shortcuts into their actual paths and filters out items that should be ignored
- /// </summary>
- public static ItemResolveEventArgs FilterChildFileSystemEntries(ItemResolveEventArgs args, bool flattenShortcuts)
- {
-
- List<WIN32_FIND_DATA> returnChildren = new List<WIN32_FIND_DATA>();
- List<WIN32_FIND_DATA> resolvedShortcuts = new List<WIN32_FIND_DATA>();
- foreach (var file in args.FileSystemChildren)
- {
- // If it's a shortcut, resolve it
- if (Shortcut.IsShortcut(file.Path))
- {
- string newPath = Shortcut.ResolveShortcut(file.Path);
- WIN32_FIND_DATA newPathData = FileData.GetFileData(newPath);
- // Find out if the shortcut is pointing to a directory or file
- if (newPathData.IsDirectory)
- {
- // add to our physical locations
- args.AdditionalLocations.Add(newPath);
- // If we're flattening then get the shortcut's children
- if (flattenShortcuts)
- {
- returnChildren.Add(file);
- ItemResolveEventArgs newArgs = new ItemResolveEventArgs()
- {
- FileSystemChildren = FileData.GetFileSystemEntries(newPath, "*").ToArray()
- };
- resolvedShortcuts.AddRange(FilterChildFileSystemEntries(newArgs, false).FileSystemChildren);
- }
- else
- {
- returnChildren.Add(newPathData);
- }
- }
- else
- {
- returnChildren.Add(newPathData);
- }
- }
- else
- {
- //not a shortcut check to see if we should filter it out
- if (EntityResolutionHelper.ShouldResolvePath(file))
- {
- returnChildren.Add(file);
- }
- else
- {
- //filtered - see if it is one of our "indicator" folders and mark it now - no reason to search for it again
- args.IsBDFolder |= file.cFileName.Equals("bdmv", StringComparison.OrdinalIgnoreCase);
- args.IsDVDFolder |= file.cFileName.Equals("video_ts", StringComparison.OrdinalIgnoreCase);
- }
- }
- }
- if (resolvedShortcuts.Count > 0)
- {
- resolvedShortcuts.InsertRange(0, returnChildren);
- args.FileSystemChildren = resolvedShortcuts.ToArray();
- }
- else
- {
- args.FileSystemChildren = returnChildren.ToArray();
- }
- return args;
- }
- }
- }
|