2012-08-21 03:51:00 +02:00
|
|
|
|
using System.ComponentModel.Composition;
|
2012-07-20 04:22:44 +02:00
|
|
|
|
using System.IO;
|
2012-08-23 22:51:10 +02:00
|
|
|
|
using MediaBrowser.Controller.Library;
|
2012-07-12 08:55:27 +02:00
|
|
|
|
using MediaBrowser.Model.Entities;
|
|
|
|
|
|
|
|
|
|
namespace MediaBrowser.Controller.Resolvers
|
|
|
|
|
{
|
2012-07-20 04:22:44 +02:00
|
|
|
|
/// <summary>
|
|
|
|
|
/// Resolves a Path into a Video
|
|
|
|
|
/// </summary>
|
2012-07-26 04:33:11 +02:00
|
|
|
|
[Export(typeof(IBaseItemResolver))]
|
2012-07-12 08:55:27 +02:00
|
|
|
|
public class VideoResolver : BaseVideoResolver<Video>
|
|
|
|
|
{
|
2012-08-20 17:55:05 +02:00
|
|
|
|
public override ResolverPriority Priority
|
|
|
|
|
{
|
|
|
|
|
get { return ResolverPriority.Last; }
|
|
|
|
|
}
|
2012-07-12 08:55:27 +02:00
|
|
|
|
}
|
|
|
|
|
|
2012-07-20 04:22:44 +02:00
|
|
|
|
/// <summary>
|
|
|
|
|
/// Resolves a Path into a Video or Video subclass
|
|
|
|
|
/// </summary>
|
2012-07-12 08:55:27 +02:00
|
|
|
|
public abstract class BaseVideoResolver<T> : BaseItemResolver<T>
|
|
|
|
|
where T : Video, new()
|
|
|
|
|
{
|
|
|
|
|
protected override T Resolve(ItemResolveEventArgs args)
|
|
|
|
|
{
|
2012-07-20 04:22:44 +02:00
|
|
|
|
// If the path is a file check for a matching extensions
|
2012-08-21 16:42:40 +02:00
|
|
|
|
if (!args.IsDirectory)
|
2012-07-12 08:55:27 +02:00
|
|
|
|
{
|
|
|
|
|
if (IsVideoFile(args.Path))
|
|
|
|
|
{
|
2012-08-23 21:15:36 +02:00
|
|
|
|
VideoType type = Path.GetExtension(args.Path).EndsWith("iso", System.StringComparison.OrdinalIgnoreCase) ? VideoType.Iso : VideoType.VideoFile;
|
2012-08-23 14:59:40 +02:00
|
|
|
|
|
2012-07-12 08:55:27 +02:00
|
|
|
|
return new T()
|
|
|
|
|
{
|
2012-08-23 14:59:40 +02:00
|
|
|
|
VideoType = type,
|
2012-07-12 08:55:27 +02:00
|
|
|
|
Path = args.Path
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
else
|
|
|
|
|
{
|
2012-07-20 04:22:44 +02:00
|
|
|
|
// If the path is a folder, check if it's bluray or dvd
|
2012-07-12 08:55:27 +02:00
|
|
|
|
T item = ResolveFromFolderName(args.Path);
|
|
|
|
|
|
|
|
|
|
if (item != null)
|
|
|
|
|
{
|
|
|
|
|
return item;
|
|
|
|
|
}
|
|
|
|
|
|
2012-07-20 04:22:44 +02:00
|
|
|
|
// Also check the subfolders for bluray or dvd
|
2012-08-21 03:51:00 +02:00
|
|
|
|
for (int i = 0; i < args.FileSystemChildren.Length; i++)
|
2012-07-12 08:55:27 +02:00
|
|
|
|
{
|
2012-08-21 03:51:00 +02:00
|
|
|
|
var folder = args.FileSystemChildren[i];
|
|
|
|
|
|
2012-08-23 07:45:26 +02:00
|
|
|
|
if (!folder.IsDirectory)
|
2012-07-12 08:55:27 +02:00
|
|
|
|
{
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
|
2012-08-21 05:56:28 +02:00
|
|
|
|
item = ResolveFromFolderName(folder.Path);
|
2012-07-12 08:55:27 +02:00
|
|
|
|
|
|
|
|
|
if (item != null)
|
|
|
|
|
{
|
|
|
|
|
return item;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private T ResolveFromFolderName(string folder)
|
|
|
|
|
{
|
|
|
|
|
if (folder.IndexOf("video_ts", System.StringComparison.OrdinalIgnoreCase) != -1)
|
|
|
|
|
{
|
|
|
|
|
return new T()
|
|
|
|
|
{
|
|
|
|
|
VideoType = VideoType.DVD,
|
|
|
|
|
Path = Path.GetDirectoryName(folder)
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
if (folder.IndexOf("bdmv", System.StringComparison.OrdinalIgnoreCase) != -1)
|
|
|
|
|
{
|
|
|
|
|
return new T()
|
|
|
|
|
{
|
|
|
|
|
VideoType = VideoType.BluRay,
|
|
|
|
|
Path = Path.GetDirectoryName(folder)
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private static bool IsVideoFile(string path)
|
|
|
|
|
{
|
|
|
|
|
string extension = Path.GetExtension(path).ToLower();
|
|
|
|
|
|
|
|
|
|
switch (extension)
|
|
|
|
|
{
|
|
|
|
|
case ".mkv":
|
|
|
|
|
case ".m2ts":
|
|
|
|
|
case ".iso":
|
|
|
|
|
case ".ts":
|
|
|
|
|
case ".rmvb":
|
|
|
|
|
case ".mov":
|
|
|
|
|
case ".avi":
|
|
|
|
|
case ".mpg":
|
|
|
|
|
case ".mpeg":
|
|
|
|
|
case ".wmv":
|
|
|
|
|
case ".mp4":
|
|
|
|
|
case ".divx":
|
|
|
|
|
case ".dvr-ms":
|
|
|
|
|
case ".wtv":
|
|
|
|
|
case ".ogm":
|
|
|
|
|
case ".ogv":
|
|
|
|
|
case ".asf":
|
|
|
|
|
case ".m4v":
|
|
|
|
|
case ".flv":
|
|
|
|
|
case ".f4v":
|
|
|
|
|
case ".3gp":
|
|
|
|
|
return true;
|
|
|
|
|
|
|
|
|
|
default:
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|