| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123 | using System;using System.Linq;using DotNet.Globbing;namespace Emby.Server.Implementations.Library{    /// <summary>    /// Glob patterns for files to ignore.    /// </summary>    public static class IgnorePatterns    {        /// <summary>        /// Files matching these glob patterns will be ignored.        /// </summary>        private static readonly string[] _patterns =        {            "**/small.jpg",            "**/albumart.jpg",            // We have neither non-greedy matching or character group repetitions, working around that here.            // https://github.com/dazinator/DotNet.Glob#patterns            // .*/sample\..{1,5}            "**/sample.?",            "**/sample.??",            "**/sample.???", // Matches sample.mkv            "**/sample.????", // Matches sample.webm            "**/sample.?????",            "**/*.sample.?",            "**/*.sample.??",            "**/*.sample.???",            "**/*.sample.????",            "**/*.sample.?????",            "**/sample/*",            // Directories            "**/metadata/**",            "**/metadata",            "**/ps3_update/**",            "**/ps3_update",            "**/ps3_vprm/**",            "**/ps3_vprm",            "**/extrafanart/**",            "**/extrafanart",            "**/extrathumbs/**",            "**/extrathumbs",            "**/.actors/**",            "**/.actors",            "**/.wd_tv/**",            "**/.wd_tv",            "**/lost+found/**",            "**/lost+found",            // WMC temp recording directories that will constantly be written to            "**/TempRec/**",            "**/TempRec",            "**/TempSBE/**",            "**/TempSBE",            // Synology            "**/eaDir/**",            "**/eaDir",            "**/@eaDir/**",            "**/@eaDir",            "**/#recycle/**",            "**/#recycle",            // Qnap            "**/@Recycle/**",            "**/@Recycle",            "**/.@__thumb/**",            "**/.@__thumb",            "**/$RECYCLE.BIN/**",            "**/$RECYCLE.BIN",            "**/System Volume Information/**",            "**/System Volume Information",            "**/.grab/**",            "**/.grab",            // Unix hidden files            "**/.*",            // Mac - if you ever remove the above.            // "**/._*",            // "**/.DS_Store",            // thumbs.db            "**/thumbs.db",            // bts sync files            "**/*.bts",            "**/*.sync",        };        private static readonly GlobOptions _globOptions = new GlobOptions        {            Evaluation =            {                CaseInsensitive = true            }        };        private static readonly Glob[] _globs = _patterns.Select(p => Glob.Parse(p, _globOptions)).ToArray();        /// <summary>        /// Returns true if the supplied path should be ignored.        /// </summary>        /// <param name="path">The path to test.</param>        /// <returns>Whether to ignore the path.</returns>        public static bool ShouldIgnore(ReadOnlySpan<char> path)        {            int len = _globs.Length;            for (int i = 0; i < len; i++)            {                if (_globs[i].IsMatch(path))                {                    return true;                }            }            return false;        }    }}
 |