From 6edc836ce591c466743a1d94a75cb3537c4835bd Mon Sep 17 00:00:00 2001 From: ebr11 Eric Reed spam Date: Wed, 19 Sep 2012 10:22:53 -0400 Subject: [PATCH] I lied - re-worked metadata folder handling again. Should now really only hit once and is available for other item types --- MediaBrowser.Controller/Entities/TV/Season.cs | 8 +++++++- MediaBrowser.Controller/IO/FileSystemHelper.cs | 12 ++++++++++++ .../Library/ItemResolveEventArgs.cs | 11 ++++------- .../Resolvers/EntityResolutionHelper.cs | 6 +----- MediaBrowser.Controller/Resolvers/FolderResolver.cs | 2 +- .../Resolvers/TV/SeasonResolver.cs | 5 +---- 6 files changed, 26 insertions(+), 18 deletions(-) diff --git a/MediaBrowser.Controller/Entities/TV/Season.cs b/MediaBrowser.Controller/Entities/TV/Season.cs index 98ad31220f..f9c7fecb32 100644 --- a/MediaBrowser.Controller/Entities/TV/Season.cs +++ b/MediaBrowser.Controller/Entities/TV/Season.cs @@ -7,7 +7,13 @@ namespace MediaBrowser.Controller.Entities.TV /// /// Store these to reduce disk access in Episode Resolver /// - public string[] MetadataFiles { get; set; } + public string[] MetadataFiles + { + get + { + return ResolveArgs.MetadataFiles ?? new string[] { }; + } + } /// /// Determines if the metafolder contains a given file diff --git a/MediaBrowser.Controller/IO/FileSystemHelper.cs b/MediaBrowser.Controller/IO/FileSystemHelper.cs index 2897150a81..732cf0803e 100644 --- a/MediaBrowser.Controller/IO/FileSystemHelper.cs +++ b/MediaBrowser.Controller/IO/FileSystemHelper.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; +using System.IO; using System.Threading.Tasks; using MediaBrowser.Controller.Resolvers; using MediaBrowser.Controller.Library; @@ -67,6 +68,12 @@ namespace MediaBrowser.Controller.IO args.IsBDFolder |= file.cFileName.Equals("bdmv", StringComparison.OrdinalIgnoreCase); args.IsDVDFolder |= file.cFileName.Equals("video_ts", StringComparison.OrdinalIgnoreCase); args.IsHDDVDFolder |= file.cFileName.Equals("hvdvd_ts", StringComparison.OrdinalIgnoreCase); + + //and check to see if it is a metadata folder and collect contents now if so + if (IsMetadataFolder(file.cFileName)) + { + args.MetadataFiles = Directory.GetFiles(Path.Combine(args.Path, "metadata"), "*", SearchOption.TopDirectoryOnly); + } } } } @@ -83,6 +90,11 @@ namespace MediaBrowser.Controller.IO return args; } + public static bool IsMetadataFolder(string path) + { + return path.TrimEnd('\\').EndsWith("metadata", StringComparison.OrdinalIgnoreCase); + } + public static bool IsVideoFile(string path) { string extension = System.IO.Path.GetExtension(path).ToLower(); diff --git a/MediaBrowser.Controller/Library/ItemResolveEventArgs.cs b/MediaBrowser.Controller/Library/ItemResolveEventArgs.cs index 02cffcf0f8..32b8783dfd 100644 --- a/MediaBrowser.Controller/Library/ItemResolveEventArgs.cs +++ b/MediaBrowser.Controller/Library/ItemResolveEventArgs.cs @@ -39,13 +39,10 @@ namespace MediaBrowser.Controller.Library public bool IsDVDFolder { get; set; } public bool IsHDDVDFolder { get; set; } - public bool IsMetadataFolder - { - get - { - return this.FileInfo.cFileName.Equals("metadata", StringComparison.OrdinalIgnoreCase); - } - } + /// + /// Store these to reduce disk access in Resolvers + /// + public string[] MetadataFiles { get; set; } public WIN32_FIND_DATA? GetFileSystemEntry(string path) { diff --git a/MediaBrowser.Controller/Resolvers/EntityResolutionHelper.cs b/MediaBrowser.Controller/Resolvers/EntityResolutionHelper.cs index ebb1f4103c..b821f88018 100644 --- a/MediaBrowser.Controller/Resolvers/EntityResolutionHelper.cs +++ b/MediaBrowser.Controller/Resolvers/EntityResolutionHelper.cs @@ -18,6 +18,7 @@ namespace MediaBrowser.Controller.Resolvers public static List IgnoreFolders = new List() { "trailers", + "metadata", "bdmv", "certificate", "backup", @@ -62,11 +63,6 @@ namespace MediaBrowser.Controller.Resolvers // Ignore any folders containing a file called .ignore resolve = false; } - else if (args.IsMetadataFolder) - { - // I think this is redundant, but... - resolve = false; - } return resolve; } diff --git a/MediaBrowser.Controller/Resolvers/FolderResolver.cs b/MediaBrowser.Controller/Resolvers/FolderResolver.cs index b34d8163b6..408e513d44 100644 --- a/MediaBrowser.Controller/Resolvers/FolderResolver.cs +++ b/MediaBrowser.Controller/Resolvers/FolderResolver.cs @@ -14,7 +14,7 @@ namespace MediaBrowser.Controller.Resolvers protected override Folder Resolve(ItemResolveEventArgs args) { - if (args.IsDirectory && !args.IsMetadataFolder) + if (args.IsDirectory) { return new Folder() { PhysicalLocations = args.PhysicalLocations }; } diff --git a/MediaBrowser.Controller/Resolvers/TV/SeasonResolver.cs b/MediaBrowser.Controller/Resolvers/TV/SeasonResolver.cs index d01e1ce31f..0ad0782e07 100644 --- a/MediaBrowser.Controller/Resolvers/TV/SeasonResolver.cs +++ b/MediaBrowser.Controller/Resolvers/TV/SeasonResolver.cs @@ -10,15 +10,12 @@ namespace MediaBrowser.Controller.Resolvers.TV { protected override Season Resolve(ItemResolveEventArgs args) { - if (args.Parent is Series && args.IsDirectory && !args.IsMetadataFolder) + if (args.Parent is Series && args.IsDirectory) { var season = new Season { }; season.IndexNumber = TVUtils.GetSeasonNumberFromPath(args.Path); - // Gather these now so that the episode provider classes can utilize them instead of having to make their own file system calls - season.MetadataFiles = args.ContainsFolder("metadata") ? Directory.GetFiles(Path.Combine(args.Path, "metadata"), "*", SearchOption.TopDirectoryOnly) : new string[] { }; - return season; }