jellyfin/MediaBrowser.Movies/Resolvers/MovieResolver.cs

95 lines
3.2 KiB
C#
Raw Normal View History

2012-07-12 06:55:27 +00:00
using System;
using System.ComponentModel.Composition;
2012-07-12 06:55:27 +00:00
using System.IO;
using System.Linq;
using MediaBrowser.Controller;
using MediaBrowser.Controller.Events;
using MediaBrowser.Controller.IO;
2012-07-12 06:55:27 +00:00
using MediaBrowser.Controller.Resolvers;
using MediaBrowser.Model.Entities;
using MediaBrowser.Movies.Entities;
namespace MediaBrowser.Movies.Resolvers
{
[Export(typeof(IBaseItemResolver))]
2012-07-12 06:55:27 +00:00
public class MovieResolver : BaseVideoResolver<Movie>
{
protected override Movie Resolve(ItemResolveEventArgs args)
{
if (args.IsFolder && (args.VirtualFolderCollectionType ?? string.Empty).Equals("Movies", StringComparison.OrdinalIgnoreCase))
2012-07-12 06:55:27 +00:00
{
var metadataFile = args.GetFileSystemEntryByName("movie.xml");
2012-07-12 06:55:27 +00:00
if (metadataFile.HasValue || Path.GetFileName(args.Path).IndexOf("[tmdbid=", StringComparison.OrdinalIgnoreCase) != -1)
{
return GetMovie(args) ?? new Movie();
}
// If it's not a boxset, the only other allowed parent type is Folder
if (!(args.Parent is BoxSet))
{
if (args.Parent != null && args.Parent.GetType() != typeof(Folder))
{
return null;
}
2012-07-12 06:55:27 +00:00
}
2012-07-12 17:09:35 +00:00
// There's no metadata or [tmdb in the path, now we will have to work some magic to see if this is a Movie
if (args.Parent != null)
{
return GetMovie(args);
}
2012-07-12 06:55:27 +00:00
}
return null;
}
private Movie GetMovie(ItemResolveEventArgs args)
{
for (var i = 0; i < args.FileSystemChildren.Length; i++)
2012-07-12 06:55:27 +00:00
{
var child = args.FileSystemChildren[i];
2012-07-12 06:55:27 +00:00
ItemResolveEventArgs childArgs = new ItemResolveEventArgs()
{
Path = child.Path,
FileData = child.FileInfo,
FileSystemChildren = new LazyFileInfo[] { }
2012-07-12 06:55:27 +00:00
};
var item = base.Resolve(childArgs);
if (item != null)
{
return new Movie()
{
Path = item.Path,
VideoType = item.VideoType
};
}
}
return null;
2012-07-12 06:55:27 +00:00
}
private void PopulateBonusFeatures(Movie item, ItemResolveEventArgs args)
{
var trailerPath = args.GetFileSystemEntryByName("specials", true);
2012-07-12 06:55:27 +00:00
if (trailerPath.HasValue)
{
string[] allFiles = Directory.GetFileSystemEntries(trailerPath.Value.Path, "*", SearchOption.TopDirectoryOnly);
2012-07-12 06:55:27 +00:00
2012-08-21 01:21:03 +00:00
item.SpecialFeatures = allFiles.Select(f => Kernel.Instance.ItemController.GetItem(f)).OfType<Video>();
2012-07-12 06:55:27 +00:00
}
}
protected override void SetInitialItemValues(Movie item, ItemResolveEventArgs args)
2012-07-12 06:55:27 +00:00
{
base.SetInitialItemValues(item, args);
2012-07-12 06:55:27 +00:00
PopulateBonusFeatures(item, args);
}
}
}