aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Controller
diff options
context:
space:
mode:
Diffstat (limited to 'MediaBrowser.Controller')
-rw-r--r--MediaBrowser.Controller/Events/ItemResolveEventArgs.cs27
-rw-r--r--MediaBrowser.Controller/Kernel.cs1
-rw-r--r--MediaBrowser.Controller/MediaBrowser.Controller.csproj1
-rw-r--r--MediaBrowser.Controller/Resolvers/FolderResolver.cs8
-rw-r--r--MediaBrowser.Controller/Resolvers/VirtualFolderResolver.cs41
-rw-r--r--MediaBrowser.Controller/Xml/FolderXmlParser.cs2
6 files changed, 75 insertions, 5 deletions
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 @@
<Compile Include="Resolvers\BaseItemResolver.cs" />
<Compile Include="Resolvers\FolderResolver.cs" />
<Compile Include="Resolvers\VideoResolver.cs" />
+ <Compile Include="Resolvers\VirtualFolderResolver.cs" />
<Compile Include="Xml\BaseItemXmlParser.cs" />
<Compile Include="Xml\FolderXmlParser.cs" />
<Compile Include="Xml\XmlExtensions.cs" />
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<T> : BaseItemResolver<T>
- where T : Folder, new ()
+ public abstract class BaseFolderResolver<TItemType> : BaseItemResolver<TItemType>
+ 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<VirtualFolder>
+ {
+ 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
{
/// <summary>
- /// Fetches metadata fro a folder.
+ /// Fetches metadata for a folder.
/// Since folder.xml contains no folder-specific values, no overrides are needed
/// </summary>
public class FolderXmlParser : BaseItemXmlParser<Folder>