2012-09-10 21:34:02 -04:00
|
|
|
|
using MediaBrowser.Controller.Entities;
|
|
|
|
|
|
using MediaBrowser.Controller.Library;
|
2012-07-12 02:55:27 -04:00
|
|
|
|
using MediaBrowser.Model.Entities;
|
2012-09-18 17:07:01 -04:00
|
|
|
|
using MediaBrowser.Controller.IO;
|
2012-09-09 14:32:51 -04:00
|
|
|
|
using System.ComponentModel.Composition;
|
|
|
|
|
|
using System.IO;
|
2012-07-12 02:55:27 -04:00
|
|
|
|
|
|
|
|
|
|
namespace MediaBrowser.Controller.Resolvers
|
|
|
|
|
|
{
|
2012-07-19 22:22:44 -04:00
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Resolves a Path into a Video
|
|
|
|
|
|
/// </summary>
|
2012-07-25 22:33:11 -04:00
|
|
|
|
[Export(typeof(IBaseItemResolver))]
|
2012-07-12 02:55:27 -04:00
|
|
|
|
public class VideoResolver : BaseVideoResolver<Video>
|
|
|
|
|
|
{
|
2012-08-20 11:55:05 -04:00
|
|
|
|
public override ResolverPriority Priority
|
|
|
|
|
|
{
|
|
|
|
|
|
get { return ResolverPriority.Last; }
|
|
|
|
|
|
}
|
2012-07-12 02:55:27 -04:00
|
|
|
|
}
|
|
|
|
|
|
|
2012-07-19 22:22:44 -04:00
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Resolves a Path into a Video or Video subclass
|
|
|
|
|
|
/// </summary>
|
2012-07-12 02:55:27 -04:00
|
|
|
|
public abstract class BaseVideoResolver<T> : BaseItemResolver<T>
|
|
|
|
|
|
where T : Video, new()
|
|
|
|
|
|
{
|
|
|
|
|
|
protected override T Resolve(ItemResolveEventArgs args)
|
|
|
|
|
|
{
|
2012-07-19 22:22:44 -04:00
|
|
|
|
// If the path is a file check for a matching extensions
|
2012-08-21 10:42:40 -04:00
|
|
|
|
if (!args.IsDirectory)
|
2012-07-12 02:55:27 -04:00
|
|
|
|
{
|
2012-09-18 17:07:01 -04:00
|
|
|
|
if (FileSystemHelper.IsVideoFile(args.Path))
|
2012-07-12 02:55:27 -04:00
|
|
|
|
{
|
2012-08-23 15:15:36 -04:00
|
|
|
|
VideoType type = Path.GetExtension(args.Path).EndsWith("iso", System.StringComparison.OrdinalIgnoreCase) ? VideoType.Iso : VideoType.VideoFile;
|
2012-08-23 08:59:40 -04:00
|
|
|
|
|
2012-09-11 14:20:12 -04:00
|
|
|
|
return new T
|
2012-07-12 02:55:27 -04:00
|
|
|
|
{
|
2012-08-23 08:59:40 -04:00
|
|
|
|
VideoType = type,
|
2012-07-12 02:55:27 -04:00
|
|
|
|
Path = args.Path
|
|
|
|
|
|
};
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
2012-07-19 22:22:44 -04:00
|
|
|
|
// If the path is a folder, check if it's bluray or dvd
|
2012-07-12 02:55:27 -04:00
|
|
|
|
T item = ResolveFromFolderName(args.Path);
|
|
|
|
|
|
|
|
|
|
|
|
if (item != null)
|
|
|
|
|
|
{
|
|
|
|
|
|
return item;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2012-07-19 22:22:44 -04:00
|
|
|
|
// Also check the subfolders for bluray or dvd
|
2012-08-20 21:51:00 -04:00
|
|
|
|
for (int i = 0; i < args.FileSystemChildren.Length; i++)
|
2012-07-12 02:55:27 -04:00
|
|
|
|
{
|
2012-08-20 21:51:00 -04:00
|
|
|
|
var folder = args.FileSystemChildren[i];
|
|
|
|
|
|
|
2012-08-23 01:45:26 -04:00
|
|
|
|
if (!folder.IsDirectory)
|
2012-07-12 02:55:27 -04:00
|
|
|
|
{
|
|
|
|
|
|
continue;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2012-08-20 23:56:28 -04:00
|
|
|
|
item = ResolveFromFolderName(folder.Path);
|
2012-07-12 02:55:27 -04:00
|
|
|
|
|
|
|
|
|
|
if (item != null)
|
|
|
|
|
|
{
|
|
|
|
|
|
return item;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return null;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private T ResolveFromFolderName(string folder)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (folder.IndexOf("video_ts", System.StringComparison.OrdinalIgnoreCase) != -1)
|
|
|
|
|
|
{
|
2012-09-11 14:20:12 -04:00
|
|
|
|
return new T
|
2012-07-12 02:55:27 -04:00
|
|
|
|
{
|
2012-09-11 14:20:12 -04:00
|
|
|
|
VideoType = VideoType.Dvd,
|
2012-07-12 02:55:27 -04:00
|
|
|
|
Path = Path.GetDirectoryName(folder)
|
|
|
|
|
|
};
|
|
|
|
|
|
}
|
|
|
|
|
|
if (folder.IndexOf("bdmv", System.StringComparison.OrdinalIgnoreCase) != -1)
|
|
|
|
|
|
{
|
2012-09-11 14:20:12 -04:00
|
|
|
|
return new T
|
2012-07-12 02:55:27 -04:00
|
|
|
|
{
|
|
|
|
|
|
VideoType = VideoType.BluRay,
|
|
|
|
|
|
Path = Path.GetDirectoryName(folder)
|
|
|
|
|
|
};
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return null;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|