| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171 | using System;using System.Collections.Generic;using System.IO;using System.Linq;using MediaBrowser.Controller.Entities;using MediaBrowser.Controller.Library;using MediaBrowser.Controller.Resolvers;using MediaBrowser.Model.Extensions;using MediaBrowser.Model.IO;using Microsoft.Extensions.Logging;namespace Emby.Server.Implementations.Library{    /// <summary>    /// Provides the core resolver ignore rules    /// </summary>    public class CoreResolutionIgnoreRule : IResolverIgnoreRule    {        private readonly IFileSystem _fileSystem;        private readonly ILibraryManager _libraryManager;        private readonly ILogger _logger;        private bool _ignoreDotPrefix;        /// <summary>        /// Any folder named in this list will be ignored - can be added to at runtime for extensibility        /// </summary>        public static readonly Dictionary<string, string> IgnoreFolders = new List<string>        {                "metadata",                "ps3_update",                "ps3_vprm",                "extrafanart",                "extrathumbs",                ".actors",                ".wd_tv",                // Synology                "@eaDir",                "eaDir",                "#recycle",                // Qnap                "@Recycle",                ".@__thumb",                "$RECYCLE.BIN",                "System Volume Information",                ".grab",                // macos                ".AppleDouble"        }.ToDictionary(i => i, StringComparer.OrdinalIgnoreCase);        public CoreResolutionIgnoreRule(IFileSystem fileSystem, ILibraryManager libraryManager, ILogger logger)        {            _fileSystem = fileSystem;            _libraryManager = libraryManager;            _logger = logger;            _ignoreDotPrefix = Environment.OSVersion.Platform != PlatformID.Win32NT;        }        /// <summary>        /// 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)        {            // Don't ignore top level folders            if (fileInfo.IsDirectory && parent is AggregateFolder)            {                return false;            }            var filename = fileInfo.Name;            var path = fileInfo.FullName;            // Handle mac .DS_Store            // https://github.com/MediaBrowser/MediaBrowser/issues/427            if (_ignoreDotPrefix)            {                if (filename.IndexOf('.') == 0)                {                    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)            {                // Ignore any folders in our list                if (IgnoreFolders.ContainsKey(filename))                {                    return true;                }                if (parent != null)                {                    // Ignore trailer folders but allow it at the collection level                    if (string.Equals(filename, BaseItem.TrailerFolderName, StringComparison.OrdinalIgnoreCase) &&                        !(parent is AggregateFolder) && !(parent is UserRootFolder))                    {                        return true;                    }                    if (string.Equals(filename, BaseItem.ThemeVideosFolderName, StringComparison.OrdinalIgnoreCase))                    {                        return true;                    }                    if (string.Equals(filename, BaseItem.ThemeSongsFolderName, StringComparison.OrdinalIgnoreCase))                    {                        return true;                    }                }            }            else            {                if (parent != null)                {                    // Don't resolve these into audio files                    if (string.Equals(Path.GetFileNameWithoutExtension(filename), BaseItem.ThemeSongFilename) && _libraryManager.IsAudioFile(filename))                    {                        return true;                    }                }                // Ignore samples                var sampleFilename = " " + filename.Replace(".", " ", StringComparison.OrdinalIgnoreCase)                    .Replace("-", " ", StringComparison.OrdinalIgnoreCase)                    .Replace("_", " ", StringComparison.OrdinalIgnoreCase)                    .Replace("!", " ", StringComparison.OrdinalIgnoreCase);                if (sampleFilename.IndexOf(" sample ", StringComparison.OrdinalIgnoreCase) != -1)                {                    return true;                }            }            return false;        }    }}
 |