mirror of
https://github.com/jellyfin/jellyfin.git
synced 2024-09-07 03:48:06 +02:00
commit
e4644599af
3 changed files with 35 additions and 67 deletions
|
@ -5,7 +5,6 @@ using System.Text.RegularExpressions;
|
||||||
using MediaBrowser.Controller.Entities;
|
using MediaBrowser.Controller.Entities;
|
||||||
using MediaBrowser.Controller.Library;
|
using MediaBrowser.Controller.Library;
|
||||||
using MediaBrowser.Controller.Resolvers;
|
using MediaBrowser.Controller.Resolvers;
|
||||||
using MediaBrowser.Model.Extensions;
|
|
||||||
using MediaBrowser.Model.IO;
|
using MediaBrowser.Model.IO;
|
||||||
|
|
||||||
namespace Emby.Server.Implementations.Library
|
namespace Emby.Server.Implementations.Library
|
||||||
|
@ -17,12 +16,10 @@ namespace Emby.Server.Implementations.Library
|
||||||
{
|
{
|
||||||
private readonly ILibraryManager _libraryManager;
|
private readonly ILibraryManager _libraryManager;
|
||||||
|
|
||||||
private bool _ignoreDotPrefix;
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Any folder named in this list will be ignored - can be added to at runtime for extensibility
|
/// Any folder named in this list will be ignored
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static readonly string[] IgnoreFolders =
|
private static readonly string[] _ignoreFolders =
|
||||||
{
|
{
|
||||||
"metadata",
|
"metadata",
|
||||||
"ps3_update",
|
"ps3_update",
|
||||||
|
@ -43,25 +40,14 @@ namespace Emby.Server.Implementations.Library
|
||||||
"$RECYCLE.BIN",
|
"$RECYCLE.BIN",
|
||||||
"System Volume Information",
|
"System Volume Information",
|
||||||
".grab",
|
".grab",
|
||||||
|
|
||||||
// macos
|
|
||||||
".AppleDouble"
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
public CoreResolutionIgnoreRule(ILibraryManager libraryManager)
|
public CoreResolutionIgnoreRule(ILibraryManager libraryManager)
|
||||||
{
|
{
|
||||||
_libraryManager = libraryManager;
|
_libraryManager = libraryManager;
|
||||||
|
|
||||||
_ignoreDotPrefix = Environment.OSVersion.Platform != PlatformID.Win32NT;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <inheritdoc />
|
||||||
/// Shoulds the ignore.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="fileInfo">The file information.</param>
|
|
||||||
/// <param name="parent">The parent.</param>
|
|
||||||
/// <returns><c>true</c> if XXXX, <c>false</c> otherwise</returns>
|
|
||||||
public bool ShouldIgnore(FileSystemMetadata fileInfo, BaseItem parent)
|
public bool ShouldIgnore(FileSystemMetadata fileInfo, BaseItem parent)
|
||||||
{
|
{
|
||||||
// Don't ignore top level folders
|
// Don't ignore top level folders
|
||||||
|
@ -73,46 +59,17 @@ namespace Emby.Server.Implementations.Library
|
||||||
var filename = fileInfo.Name;
|
var filename = fileInfo.Name;
|
||||||
var path = fileInfo.FullName;
|
var path = fileInfo.FullName;
|
||||||
|
|
||||||
// Handle mac .DS_Store
|
// Ignore hidden files on UNIX
|
||||||
// https://github.com/MediaBrowser/MediaBrowser/issues/427
|
if (Environment.OSVersion.Platform != PlatformID.Win32NT
|
||||||
if (_ignoreDotPrefix)
|
&& filename[0] == '.')
|
||||||
{
|
|
||||||
if (filename.IndexOf('.') == 0)
|
|
||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
// Ignore hidden files and folders
|
|
||||||
//if (fileInfo.IsHidden)
|
|
||||||
//{
|
|
||||||
// if (parent == null)
|
|
||||||
// {
|
|
||||||
// var parentFolderName = Path.GetFileName(_fileSystem.GetDirectoryName(path));
|
|
||||||
|
|
||||||
// if (string.Equals(parentFolderName, BaseItem.ThemeSongsFolderName, StringComparison.OrdinalIgnoreCase))
|
|
||||||
// {
|
|
||||||
// return false;
|
|
||||||
// }
|
|
||||||
// if (string.Equals(parentFolderName, BaseItem.ThemeVideosFolderName, StringComparison.OrdinalIgnoreCase))
|
|
||||||
// {
|
|
||||||
// return false;
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
|
|
||||||
// // Sometimes these are marked hidden
|
|
||||||
// if (_fileSystem.IsRootPath(path))
|
|
||||||
// {
|
|
||||||
// return false;
|
|
||||||
// }
|
|
||||||
|
|
||||||
// return true;
|
|
||||||
//}
|
|
||||||
|
|
||||||
if (fileInfo.IsDirectory)
|
if (fileInfo.IsDirectory)
|
||||||
{
|
{
|
||||||
// Ignore any folders in our list
|
// Ignore any folders in our list
|
||||||
if (IgnoreFolders.Contains(filename, StringComparer.OrdinalIgnoreCase))
|
if (_ignoreFolders.Contains(filename, StringComparer.OrdinalIgnoreCase))
|
||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -120,8 +77,9 @@ namespace Emby.Server.Implementations.Library
|
||||||
if (parent != null)
|
if (parent != null)
|
||||||
{
|
{
|
||||||
// Ignore trailer folders but allow it at the collection level
|
// Ignore trailer folders but allow it at the collection level
|
||||||
if (string.Equals(filename, BaseItem.TrailerFolderName, StringComparison.OrdinalIgnoreCase) &&
|
if (string.Equals(filename, BaseItem.TrailerFolderName, StringComparison.OrdinalIgnoreCase)
|
||||||
!(parent is AggregateFolder) && !(parent is UserRootFolder))
|
&& !(parent is AggregateFolder)
|
||||||
|
&& !(parent is UserRootFolder))
|
||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -142,14 +100,15 @@ namespace Emby.Server.Implementations.Library
|
||||||
if (parent != null)
|
if (parent != null)
|
||||||
{
|
{
|
||||||
// Don't resolve these into audio files
|
// Don't resolve these into audio files
|
||||||
if (string.Equals(Path.GetFileNameWithoutExtension(filename), BaseItem.ThemeSongFilename) && _libraryManager.IsAudioFile(filename))
|
if (string.Equals(Path.GetFileNameWithoutExtension(filename), BaseItem.ThemeSongFilename)
|
||||||
|
&& _libraryManager.IsAudioFile(filename))
|
||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Ignore samples
|
// Ignore samples
|
||||||
Match m = Regex.Match(filename,@"\bsample\b",RegexOptions.IgnoreCase);
|
Match m = Regex.Match(filename, @"\bsample\b", RegexOptions.IgnoreCase);
|
||||||
|
|
||||||
return m.Success;
|
return m.Success;
|
||||||
}
|
}
|
||||||
|
|
|
@ -12,7 +12,6 @@ using MediaBrowser.Controller.Library;
|
||||||
using MediaBrowser.Controller.Providers;
|
using MediaBrowser.Controller.Providers;
|
||||||
using MediaBrowser.Controller.Resolvers;
|
using MediaBrowser.Controller.Resolvers;
|
||||||
using MediaBrowser.Model.Entities;
|
using MediaBrowser.Model.Entities;
|
||||||
using MediaBrowser.Model.Extensions;
|
|
||||||
using MediaBrowser.Model.IO;
|
using MediaBrowser.Model.IO;
|
||||||
|
|
||||||
namespace Emby.Server.Implementations.Library.Resolvers.Movies
|
namespace Emby.Server.Implementations.Library.Resolvers.Movies
|
||||||
|
@ -28,7 +27,8 @@ namespace Emby.Server.Implementations.Library.Resolvers.Movies
|
||||||
/// <value>The priority.</value>
|
/// <value>The priority.</value>
|
||||||
public override ResolverPriority Priority => ResolverPriority.Third;
|
public override ResolverPriority Priority => ResolverPriority.Third;
|
||||||
|
|
||||||
public MultiItemResolverResult ResolveMultiple(Folder parent,
|
public MultiItemResolverResult ResolveMultiple(
|
||||||
|
Folder parent,
|
||||||
List<FileSystemMetadata> files,
|
List<FileSystemMetadata> files,
|
||||||
string collectionType,
|
string collectionType,
|
||||||
IDirectoryService directoryService)
|
IDirectoryService directoryService)
|
||||||
|
@ -46,7 +46,8 @@ namespace Emby.Server.Implementations.Library.Resolvers.Movies
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
private MultiItemResolverResult ResolveMultipleInternal(Folder parent,
|
private MultiItemResolverResult ResolveMultipleInternal(
|
||||||
|
Folder parent,
|
||||||
List<FileSystemMetadata> files,
|
List<FileSystemMetadata> files,
|
||||||
string collectionType,
|
string collectionType,
|
||||||
IDirectoryService directoryService)
|
IDirectoryService directoryService)
|
||||||
|
@ -91,7 +92,13 @@ namespace Emby.Server.Implementations.Library.Resolvers.Movies
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
private MultiItemResolverResult ResolveVideos<T>(Folder parent, IEnumerable<FileSystemMetadata> fileSystemEntries, IDirectoryService directoryService, bool suppportMultiEditions, string collectionType, bool parseName)
|
private MultiItemResolverResult ResolveVideos<T>(
|
||||||
|
Folder parent,
|
||||||
|
IEnumerable<FileSystemMetadata> fileSystemEntries,
|
||||||
|
IDirectoryService directoryService,
|
||||||
|
bool suppportMultiEditions,
|
||||||
|
string collectionType,
|
||||||
|
bool parseName)
|
||||||
where T : Video, new()
|
where T : Video, new()
|
||||||
{
|
{
|
||||||
var files = new List<FileSystemMetadata>();
|
var files = new List<FileSystemMetadata>();
|
||||||
|
@ -104,8 +111,8 @@ namespace Emby.Server.Implementations.Library.Resolvers.Movies
|
||||||
// This is a hack but currently no better way to resolve a sometimes ambiguous situation
|
// This is a hack but currently no better way to resolve a sometimes ambiguous situation
|
||||||
if (string.IsNullOrEmpty(collectionType))
|
if (string.IsNullOrEmpty(collectionType))
|
||||||
{
|
{
|
||||||
if (string.Equals(child.Name, "tvshow.nfo", StringComparison.OrdinalIgnoreCase) ||
|
if (string.Equals(child.Name, "tvshow.nfo", StringComparison.OrdinalIgnoreCase)
|
||||||
string.Equals(child.Name, "season.nfo", StringComparison.OrdinalIgnoreCase))
|
|| string.Equals(child.Name, "season.nfo", StringComparison.OrdinalIgnoreCase))
|
||||||
{
|
{
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
@ -115,11 +122,7 @@ namespace Emby.Server.Implementations.Library.Resolvers.Movies
|
||||||
{
|
{
|
||||||
leftOver.Add(child);
|
leftOver.Add(child);
|
||||||
}
|
}
|
||||||
else if (IsIgnored(child.Name))
|
else if (!IsIgnored(child.Name))
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
{
|
||||||
files.Add(child);
|
files.Add(child);
|
||||||
}
|
}
|
||||||
|
@ -168,7 +171,7 @@ namespace Emby.Server.Implementations.Library.Resolvers.Movies
|
||||||
private static bool IsIgnored(string filename)
|
private static bool IsIgnored(string filename)
|
||||||
{
|
{
|
||||||
// Ignore samples
|
// Ignore samples
|
||||||
Match m = Regex.Match(filename,@"\bsample\b",RegexOptions.IgnoreCase);
|
Match m = Regex.Match(filename, @"\bsample\b", RegexOptions.IgnoreCase);
|
||||||
|
|
||||||
return m.Success;
|
return m.Success;
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,6 +8,12 @@ namespace MediaBrowser.Controller.Resolvers
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public interface IResolverIgnoreRule
|
public interface IResolverIgnoreRule
|
||||||
{
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Checks whether or not the file should be ignored.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="fileInfo">The file information.</param>
|
||||||
|
/// <param name="parent">The parent BaseItem.</param>
|
||||||
|
/// <returns>True if the file should be ignored.</returns>
|
||||||
bool ShouldIgnore(FileSystemMetadata fileInfo, BaseItem parent);
|
bool ShouldIgnore(FileSystemMetadata fileInfo, BaseItem parent);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue