Added some resolver improvements
This commit is contained in:
parent
b50f78e5da
commit
4c9f77eead
|
@ -26,7 +26,6 @@ namespace MediaBrowser.Controller
|
||||||
public string DataPath { get; private set; }
|
public string DataPath { get; private set; }
|
||||||
|
|
||||||
public HttpServer HttpServer { get; private set; }
|
public HttpServer HttpServer { get; private set; }
|
||||||
public ItemDataCache ItemDataCache { get; private set; }
|
|
||||||
public ItemController ItemController { get; private set; }
|
public ItemController ItemController { get; private set; }
|
||||||
public UserController UserController { get; private set; }
|
public UserController UserController { get; private set; }
|
||||||
public PluginController PluginController { get; private set; }
|
public PluginController PluginController { get; private set; }
|
||||||
|
@ -61,7 +60,6 @@ namespace MediaBrowser.Controller
|
||||||
UserController = new UserController(Path.Combine(DataPath, "Users"));
|
UserController = new UserController(Path.Combine(DataPath, "Users"));
|
||||||
PluginController = new PluginController(Path.Combine(DataPath, "Plugins"));
|
PluginController = new PluginController(Path.Combine(DataPath, "Plugins"));
|
||||||
DirectoryWatchers = new DirectoryWatchers();
|
DirectoryWatchers = new DirectoryWatchers();
|
||||||
ItemDataCache = new ItemDataCache();
|
|
||||||
|
|
||||||
ItemController.PreBeginResolvePath += ItemController_PreBeginResolvePath;
|
ItemController.PreBeginResolvePath += ItemController_PreBeginResolvePath;
|
||||||
ItemController.BeginResolvePath += ItemController_BeginResolvePath;
|
ItemController.BeginResolvePath += ItemController_BeginResolvePath;
|
||||||
|
@ -86,7 +84,6 @@ namespace MediaBrowser.Controller
|
||||||
// Get users from users folder
|
// Get users from users folder
|
||||||
// Load root media folder
|
// Load root media folder
|
||||||
Parallel.Invoke(ReloadUsers, ReloadRoot);
|
Parallel.Invoke(ReloadUsers, ReloadRoot);
|
||||||
var b = true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void ReloadConfiguration()
|
private void ReloadConfiguration()
|
||||||
|
|
|
@ -1,32 +0,0 @@
|
||||||
using System.Collections.Generic;
|
|
||||||
using MediaBrowser.Model.Entities;
|
|
||||||
|
|
||||||
namespace MediaBrowser.Controller.Library
|
|
||||||
{
|
|
||||||
public class ItemDataCache
|
|
||||||
{
|
|
||||||
private Dictionary<string, object> Data = new Dictionary<string, object>();
|
|
||||||
|
|
||||||
public void SetValue<T>(BaseItem item, string propertyName, T value)
|
|
||||||
{
|
|
||||||
Data[GetKey(item, propertyName)] = value;
|
|
||||||
}
|
|
||||||
|
|
||||||
public T GetValue<T>(BaseItem item, string propertyName)
|
|
||||||
{
|
|
||||||
string key = GetKey(item, propertyName);
|
|
||||||
|
|
||||||
if (Data.ContainsKey(key))
|
|
||||||
{
|
|
||||||
return (T)Data[key];
|
|
||||||
}
|
|
||||||
|
|
||||||
return default(T);
|
|
||||||
}
|
|
||||||
|
|
||||||
private string GetKey(BaseItem item, string propertyName)
|
|
||||||
{
|
|
||||||
return item.Id.ToString() + "-" + propertyName;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -51,7 +51,6 @@
|
||||||
<Compile Include="IO\Shortcut.cs" />
|
<Compile Include="IO\Shortcut.cs" />
|
||||||
<Compile Include="Library\ItemController.cs" />
|
<Compile Include="Library\ItemController.cs" />
|
||||||
<Compile Include="Kernel.cs" />
|
<Compile Include="Kernel.cs" />
|
||||||
<Compile Include="Library\ItemDataCache.cs" />
|
|
||||||
<Compile Include="Net\CollectionExtensions.cs" />
|
<Compile Include="Net\CollectionExtensions.cs" />
|
||||||
<Compile Include="Net\HttpServer.cs" />
|
<Compile Include="Net\HttpServer.cs" />
|
||||||
<Compile Include="Net\Request.cs" />
|
<Compile Include="Net\Request.cs" />
|
||||||
|
|
|
@ -146,16 +146,16 @@ namespace MediaBrowser.Controller.Xml
|
||||||
|
|
||||||
case "Director":
|
case "Director":
|
||||||
{
|
{
|
||||||
var list = (item.People ?? new Person[]{}).ToList();
|
var list = (item.People ?? new PersonInfo[]{}).ToList();
|
||||||
list.AddRange(GetSplitValues(node.InnerText, '|').Select(v => new Person() { Name = v, PersonType = PersonType.Director }));
|
list.AddRange(GetSplitValues(node.InnerText, '|').Select(v => new PersonInfo() { Name = v, PersonType = PersonType.Director }));
|
||||||
|
|
||||||
item.People = list;
|
item.People = list;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case "Writer":
|
case "Writer":
|
||||||
{
|
{
|
||||||
var list = (item.People ?? new Person[] { }).ToList();
|
var list = (item.People ?? new PersonInfo[] { }).ToList();
|
||||||
list.AddRange(GetSplitValues(node.InnerText, '|').Select(v => new Person() { Name = v, PersonType = PersonType.Writer }));
|
list.AddRange(GetSplitValues(node.InnerText, '|').Select(v => new PersonInfo() { Name = v, PersonType = PersonType.Writer }));
|
||||||
|
|
||||||
item.People = list;
|
item.People = list;
|
||||||
break;
|
break;
|
||||||
|
@ -164,8 +164,8 @@ namespace MediaBrowser.Controller.Xml
|
||||||
case "Actors":
|
case "Actors":
|
||||||
case "GuestStars":
|
case "GuestStars":
|
||||||
{
|
{
|
||||||
var list = (item.People ?? new Person[] { }).ToList();
|
var list = (item.People ?? new PersonInfo[] { }).ToList();
|
||||||
list.AddRange(GetSplitValues(node.InnerText, '|').Select(v => new Person() { Name = v, PersonType = PersonType.Actor }));
|
list.AddRange(GetSplitValues(node.InnerText, '|').Select(v => new PersonInfo() { Name = v, PersonType = PersonType.Actor }));
|
||||||
|
|
||||||
item.People = list;
|
item.People = list;
|
||||||
break;
|
break;
|
||||||
|
@ -450,7 +450,7 @@ namespace MediaBrowser.Controller.Xml
|
||||||
|
|
||||||
protected virtual void FetchDataFromPersonsNode(XmlNode node, T item)
|
protected virtual void FetchDataFromPersonsNode(XmlNode node, T item)
|
||||||
{
|
{
|
||||||
List<Person> list = (item.People ?? new Person[] { }).ToList();
|
List<PersonInfo> list = (item.People ?? new PersonInfo[] { }).ToList();
|
||||||
|
|
||||||
foreach (XmlNode childNode in node.ChildNodes)
|
foreach (XmlNode childNode in node.ChildNodes)
|
||||||
{
|
{
|
||||||
|
@ -542,9 +542,9 @@ namespace MediaBrowser.Controller.Xml
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private Person GetPersonFromXmlNode(XmlNode node)
|
private PersonInfo GetPersonFromXmlNode(XmlNode node)
|
||||||
{
|
{
|
||||||
Person person = new Person();
|
PersonInfo person = new PersonInfo();
|
||||||
|
|
||||||
foreach (XmlNode childNode in node.ChildNodes)
|
foreach (XmlNode childNode in node.ChildNodes)
|
||||||
{
|
{
|
||||||
|
@ -570,7 +570,7 @@ namespace MediaBrowser.Controller.Xml
|
||||||
}
|
}
|
||||||
|
|
||||||
case "Role":
|
case "Role":
|
||||||
person.Description = childNode.InnerText ?? string.Empty;
|
person.Overview = childNode.InnerText ?? string.Empty;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
|
|
@ -38,7 +38,8 @@ namespace MediaBrowser.Model.Entities
|
||||||
public string Overview { get; set; }
|
public string Overview { get; set; }
|
||||||
public string Tagline { get; set; }
|
public string Tagline { get; set; }
|
||||||
|
|
||||||
public IEnumerable<Person> People { get; set; }
|
[JsonIgnore]
|
||||||
|
public IEnumerable<PersonInfo> People { get; set; }
|
||||||
|
|
||||||
public IEnumerable<string> Studios { get; set; }
|
public IEnumerable<string> Studios { get; set; }
|
||||||
|
|
||||||
|
|
|
@ -6,10 +6,21 @@ using System.Threading.Tasks;
|
||||||
|
|
||||||
namespace MediaBrowser.Model.Entities
|
namespace MediaBrowser.Model.Entities
|
||||||
{
|
{
|
||||||
public class Person
|
/// <summary>
|
||||||
|
/// This is the full Person object that can be retrieved with all of it's data.
|
||||||
|
/// </summary>
|
||||||
|
public class Person : BaseItem
|
||||||
|
{
|
||||||
|
public PersonType PersonType { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// This is the small Person stub that is attached to BaseItems
|
||||||
|
/// </summary>
|
||||||
|
public class PersonInfo
|
||||||
{
|
{
|
||||||
public string Name { get; set; }
|
public string Name { get; set; }
|
||||||
public string Description { get; set; }
|
public string Overview { get; set; }
|
||||||
public PersonType PersonType { get; set; }
|
public PersonType PersonType { get; set; }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -23,6 +23,8 @@ namespace MediaBrowser.Movies.Resolvers
|
||||||
{
|
{
|
||||||
return GetMovie(args);
|
return GetMovie(args);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// There's no metadata or [tmdb in the path, now we will have to work some magic to see if this is a Movie
|
||||||
}
|
}
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
|
|
|
@ -14,9 +14,15 @@ namespace MediaBrowser.TV.Resolvers
|
||||||
{
|
{
|
||||||
if (args.IsFolder)
|
if (args.IsFolder)
|
||||||
{
|
{
|
||||||
|
// Optimization to avoid running these tests against Seasons
|
||||||
|
if (args.Parent is Series)
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
var metadataFile = args.GetFileByName("series.xml");
|
var metadataFile = args.GetFileByName("series.xml");
|
||||||
|
|
||||||
if (metadataFile.HasValue || Path.GetFileName(args.Path).IndexOf("[tvdbid=", StringComparison.OrdinalIgnoreCase) != -1)
|
if (metadataFile.HasValue || Path.GetFileName(args.Path).IndexOf("[tvdbid=", StringComparison.OrdinalIgnoreCase) != -1 || TVUtils.IsSeriesFolder(args.Path, args.FileSystemChildren))
|
||||||
{
|
{
|
||||||
return new Series();
|
return new Series();
|
||||||
}
|
}
|
||||||
|
|
|
@ -52,14 +52,27 @@ namespace MediaBrowser.TV
|
||||||
return seasonPathExpressions.Any(r => r.IsMatch(path));
|
return seasonPathExpressions.Any(r => r.IsMatch(path));
|
||||||
}
|
}
|
||||||
|
|
||||||
public static bool IsSeriesFolder(string path, IEnumerable<string> files, IEnumerable<string> folders)
|
public static bool IsSeriesFolder(string path, IEnumerable<KeyValuePair<string, FileAttributes>> fileSystemChildren)
|
||||||
{
|
{
|
||||||
if (folders.Any(f => IsSeasonFolder(f)))
|
foreach (var child in fileSystemChildren)
|
||||||
{
|
{
|
||||||
return true;
|
if (child.Value.HasFlag(FileAttributes.Directory))
|
||||||
|
{
|
||||||
|
if (IsSeasonFolder(child.Key))
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (!string.IsNullOrEmpty(EpisodeNumberFromFile(child.Key, false)))
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return files.Any(f => !string.IsNullOrEmpty(EpisodeNumberFromFile(f, false)));
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static bool IsEpisode(string fullPath)
|
public static bool IsEpisode(string fullPath)
|
||||||
|
|
Loading…
Reference in New Issue
Block a user