using MediaBrowser.Common.Extensions; using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Entities.Movies; using MediaBrowser.Controller.Library; using MediaBrowser.Model.Entities; using System; using System.IO; namespace MediaBrowser.Server.Implementations.Library.Resolvers.Movies { /// /// Class BoxSetResolver /// public class BoxSetResolver : FolderResolver { /// /// Resolves the specified args. /// /// The args. /// BoxSet. protected override BoxSet Resolve(ItemResolveArgs args) { // It's a boxset if all of the following conditions are met: // Is a Directory // Contains [boxset] in the path if (args.IsDirectory) { var filename = Path.GetFileName(args.Path); if (string.IsNullOrEmpty(filename)) { return null; } // This is a bit of a one-off but it's here to combat MCM's over-aggressive placement of collection.xml files where they don't belong, including in series folders. if (args.ContainsMetaFileByName("series.xml")) { return null; } if (filename.IndexOf("[boxset]", StringComparison.OrdinalIgnoreCase) != -1 || args.ContainsFileSystemEntryByName("collection.xml")) { return new BoxSet { Path = args.Path, Name = ResolverHelper.StripBrackets(Path.GetFileName(args.Path)) }; } } return null; } /// /// Sets the initial item values. /// /// The item. /// The args. protected override void SetInitialItemValues(BoxSet item, ItemResolveArgs args) { base.SetInitialItemValues(item, args); SetProviderIdFromPath(item); } /// /// Sets the provider id from path. /// /// The item. private void SetProviderIdFromPath(BaseItem item) { //we need to only look at the name of this actual item (not parents) var justName = Path.GetFileName(item.Path); var id = justName.GetAttributeValue("tmdbid"); if (!string.IsNullOrEmpty(id)) { item.SetProviderId(MetadataProviders.Tmdb, id); } } } }