From a508a997d9e7605c40f4442e367b9dd74e54f5e3 Mon Sep 17 00:00:00 2001 From: LukePulverenti Luke Pulverenti luke pulverenti Date: Sat, 18 Aug 2012 15:38:27 -0400 Subject: Added a VirtualFolder entity, a resolver, and a CollectionType property. --- .../Events/ItemResolveEventArgs.cs | 27 ++++++++++++++ MediaBrowser.Controller/Kernel.cs | 1 + .../MediaBrowser.Controller.csproj | 1 + .../Resolvers/FolderResolver.cs | 8 ++--- .../Resolvers/VirtualFolderResolver.cs | 41 ++++++++++++++++++++++ MediaBrowser.Controller/Xml/FolderXmlParser.cs | 2 +- 6 files changed, 75 insertions(+), 5 deletions(-) create mode 100644 MediaBrowser.Controller/Resolvers/VirtualFolderResolver.cs (limited to 'MediaBrowser.Controller') diff --git a/MediaBrowser.Controller/Events/ItemResolveEventArgs.cs b/MediaBrowser.Controller/Events/ItemResolveEventArgs.cs index 7c4af71eb..2fe557dbe 100644 --- a/MediaBrowser.Controller/Events/ItemResolveEventArgs.cs +++ b/MediaBrowser.Controller/Events/ItemResolveEventArgs.cs @@ -97,5 +97,32 @@ namespace MediaBrowser.Controller.Events } } + public VirtualFolder VirtualFolder + { + get + { + if (Parent != null) + { + return Parent.VirtualFolder; + } + + return null; + } + } + + public string VirtualFolderCollectionType + { + get + { + VirtualFolder vf = VirtualFolder; + + if (vf == null) + { + return null; + } + + return vf.CollectionType; + } + } } } diff --git a/MediaBrowser.Controller/Kernel.cs b/MediaBrowser.Controller/Kernel.cs index 22ccfecc1..2058f6d61 100644 --- a/MediaBrowser.Controller/Kernel.cs +++ b/MediaBrowser.Controller/Kernel.cs @@ -77,6 +77,7 @@ namespace MediaBrowser.Controller // Add the internal resolvers resolvers.Add(new VideoResolver()); resolvers.Add(new AudioResolver()); + resolvers.Add(new VirtualFolderResolver()); resolvers.Add(new FolderResolver()); EntityResolvers = resolvers; diff --git a/MediaBrowser.Controller/MediaBrowser.Controller.csproj b/MediaBrowser.Controller/MediaBrowser.Controller.csproj index ea5944126..5c6052971 100644 --- a/MediaBrowser.Controller/MediaBrowser.Controller.csproj +++ b/MediaBrowser.Controller/MediaBrowser.Controller.csproj @@ -60,6 +60,7 @@ + diff --git a/MediaBrowser.Controller/Resolvers/FolderResolver.cs b/MediaBrowser.Controller/Resolvers/FolderResolver.cs index bd91ec2ba..09d3cebe4 100644 --- a/MediaBrowser.Controller/Resolvers/FolderResolver.cs +++ b/MediaBrowser.Controller/Resolvers/FolderResolver.cs @@ -19,10 +19,10 @@ namespace MediaBrowser.Controller.Resolvers } } - public abstract class BaseFolderResolver : BaseItemResolver - where T : Folder, new () + public abstract class BaseFolderResolver : BaseItemResolver + where TItemType : Folder, new() { - protected override void SetItemValues(T item, ItemResolveEventArgs args) + protected override void SetItemValues(TItemType item, ItemResolveEventArgs args) { base.SetItemValues(item, args); @@ -32,7 +32,7 @@ namespace MediaBrowser.Controller.Resolvers PopulateFolderMetadata(item, args); } - private void PopulateFolderMetadata(Folder folder, ItemResolveEventArgs args) + private void PopulateFolderMetadata(TItemType folder, ItemResolveEventArgs args) { var metadataFile = args.GetFileByName("folder.xml"); diff --git a/MediaBrowser.Controller/Resolvers/VirtualFolderResolver.cs b/MediaBrowser.Controller/Resolvers/VirtualFolderResolver.cs new file mode 100644 index 000000000..51478fd02 --- /dev/null +++ b/MediaBrowser.Controller/Resolvers/VirtualFolderResolver.cs @@ -0,0 +1,41 @@ +using System.ComponentModel.Composition; +using System.IO; +using MediaBrowser.Controller.Events; +using MediaBrowser.Model.Entities; + +namespace MediaBrowser.Controller.Resolvers +{ + [Export(typeof(IBaseItemResolver))] + public class VirtualFolderResolver : BaseFolderResolver + { + protected override VirtualFolder Resolve(ItemResolveEventArgs args) + { + if (args.IsFolder && args.Parent != null && args.Parent.IsRoot) + { + return new VirtualFolder(); + } + + return null; + } + + protected override void SetItemValues(VirtualFolder item, ItemResolveEventArgs args) + { + // Set the name initially by stripping off the [CollectionType=...] + // The name can always be overridden later by folder.xml + string pathName = Path.GetFileNameWithoutExtension(args.Path); + + string srch = "[collectiontype="; + int index = pathName.IndexOf(srch, System.StringComparison.OrdinalIgnoreCase); + + if (index != -1) + { + item.Name = pathName.Substring(0, index).Trim(); + + item.CollectionType = pathName.Substring(index + srch.Length).TrimEnd(']'); + } + + base.SetItemValues(item, args); + } + + } +} diff --git a/MediaBrowser.Controller/Xml/FolderXmlParser.cs b/MediaBrowser.Controller/Xml/FolderXmlParser.cs index 94ff97f62..5ce3a10e5 100644 --- a/MediaBrowser.Controller/Xml/FolderXmlParser.cs +++ b/MediaBrowser.Controller/Xml/FolderXmlParser.cs @@ -3,7 +3,7 @@ namespace MediaBrowser.Controller.Xml { /// - /// Fetches metadata fro a folder. + /// Fetches metadata for a folder. /// Since folder.xml contains no folder-specific values, no overrides are needed /// public class FolderXmlParser : BaseItemXmlParser -- cgit v1.2.3