mirror of
https://github.com/jellyfin/jellyfin.git
synced 2026-06-02 13:58:29 +01:00
Merge with default
This commit is contained in:
@@ -1,4 +1,6 @@
|
||||
using MediaBrowser.Controller.Entities;
|
||||
using MediaBrowser.Common.Logging;
|
||||
using MediaBrowser.Common.Extensions;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
@@ -26,23 +28,18 @@ namespace MediaBrowser.Controller.IO
|
||||
|
||||
foreach (Folder folder in rootFolder.Children.OfType<Folder>())
|
||||
{
|
||||
foreach (Folder subFolder in folder.Children.OfType<Folder>())
|
||||
foreach (string path in folder.PhysicalLocations)
|
||||
{
|
||||
if (Path.IsPathRooted(subFolder.Path))
|
||||
if (Path.IsPathRooted(path) && !pathsToWatch.ContainsStartsWith(path))
|
||||
{
|
||||
string parent = Path.GetDirectoryName(subFolder.Path);
|
||||
|
||||
if (!pathsToWatch.Contains(parent))
|
||||
{
|
||||
pathsToWatch.Add(parent);
|
||||
}
|
||||
pathsToWatch.Add(path);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
foreach (string path in pathsToWatch)
|
||||
{
|
||||
var watcher = new FileSystemWatcher(path, "*") { };
|
||||
Logger.LogInfo("Watching directory " + path + " for changes.");
|
||||
|
||||
watcher.IncludeSubdirectories = true;
|
||||
|
||||
|
||||
86
MediaBrowser.Controller/IO/FileSystemHelper.cs
Normal file
86
MediaBrowser.Controller/IO/FileSystemHelper.cs
Normal file
@@ -0,0 +1,86 @@
|
||||
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;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -179,7 +179,7 @@ namespace MediaBrowser.Controller.IO
|
||||
|
||||
public static bool IsShortcut(string filename)
|
||||
{
|
||||
return Path.GetExtension(filename).EndsWith("lnk", StringComparison.OrdinalIgnoreCase);
|
||||
return filename != null ? Path.GetExtension(filename).EndsWith("lnk", StringComparison.OrdinalIgnoreCase) : false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user