@ -6,10 +6,10 @@ using MediaBrowser.Controller;
using MediaBrowser.Controller.Entities ;
using MediaBrowser.Controller.Entities ;
using MediaBrowser.Controller.IO ;
using MediaBrowser.Controller.IO ;
using MediaBrowser.Controller.Library ;
using MediaBrowser.Controller.Library ;
using MediaBrowser.Controller.Resolvers ;
using MediaBrowser.Controller.ScheduledTasks ;
using MediaBrowser.Controller.ScheduledTasks ;
using MediaBrowser.Model.Entities ;
using MediaBrowser.Model.Entities ;
using MediaBrowser.Model.Logging ;
using MediaBrowser.Model.Logging ;
using MediaBrowser.Server.Implementations.Library.Resolvers ;
using MoreLinq ;
using MoreLinq ;
using System ;
using System ;
using System.Collections.Concurrent ;
using System.Collections.Concurrent ;
@ -37,7 +37,7 @@ namespace MediaBrowser.Server.Implementations.Library
/// Gets the list of entity resolution ignore rules
/// Gets the list of entity resolution ignore rules
/// </summary>
/// </summary>
/// <value>The entity resolution ignore rules.</value>
/// <value>The entity resolution ignore rules.</value>
private IEnumerable < IResol ution IgnoreRule> EntityResolutionIgnoreRules { get ; set ; }
private IEnumerable < IResol ver IgnoreRule> EntityResolutionIgnoreRules { get ; set ; }
/// <summary>
/// <summary>
/// Gets the list of BasePluginFolders added by plugins
/// Gets the list of BasePluginFolders added by plugins
@ -49,7 +49,7 @@ namespace MediaBrowser.Server.Implementations.Library
/// Gets the list of currently registered entity resolvers
/// Gets the list of currently registered entity resolvers
/// </summary>
/// </summary>
/// <value>The entity resolvers enumerable.</value>
/// <value>The entity resolvers enumerable.</value>
private IEnumerable < I Base ItemResolver> EntityResolvers { get ; set ; }
private IEnumerable < I ItemResolver> EntityResolvers { get ; set ; }
#region LibraryChanged Event
#region LibraryChanged Event
/// <summary>
/// <summary>
@ -113,7 +113,7 @@ namespace MediaBrowser.Server.Implementations.Library
/// <param name="pluginFolders">The plugin folders.</param>
/// <param name="pluginFolders">The plugin folders.</param>
/// <param name="resolvers">The resolvers.</param>
/// <param name="resolvers">The resolvers.</param>
/// <param name="introProviders">The intro providers.</param>
/// <param name="introProviders">The intro providers.</param>
public void AddParts ( IEnumerable < IResol ution IgnoreRule> rules , IEnumerable < IVirtualFolderCreator > pluginFolders , IEnumerable < I Base ItemResolver> resolvers , IEnumerable < IIntroProvider > introProviders )
public void AddParts ( IEnumerable < IResol ver IgnoreRule> rules , IEnumerable < IVirtualFolderCreator > pluginFolders , IEnumerable < I ItemResolver> resolvers , IEnumerable < IIntroProvider > introProviders )
{
{
EntityResolutionIgnoreRules = rules ;
EntityResolutionIgnoreRules = rules ;
PluginFolderCreators = pluginFolders ;
PluginFolderCreators = pluginFolders ;
@ -189,7 +189,14 @@ namespace MediaBrowser.Server.Implementations.Library
/// <returns>BaseItem.</returns>
/// <returns>BaseItem.</returns>
public BaseItem ResolveItem ( ItemResolveArgs args )
public BaseItem ResolveItem ( ItemResolveArgs args )
{
{
return EntityResolvers . Select ( r = > r . ResolvePath ( args ) ) . FirstOrDefault ( i = > i ! = null ) ;
var item = EntityResolvers . Select ( r = > r . ResolvePath ( args ) ) . FirstOrDefault ( i = > i ! = null ) ;
if ( item ! = null )
{
ResolverHelper . SetInitialItemValues ( item , args ) ;
}
return item ;
}
}
/// <summary>
/// <summary>
@ -237,7 +244,7 @@ namespace MediaBrowser.Server.Implementations.Library
}
}
// Check to see if we should resolve based on our contents
// Check to see if we should resolve based on our contents
if ( args . IsDirectory & & ! EntityResolutionHelper. ShouldResolvePathContents( args ) )
if ( args . IsDirectory & & ! ShouldResolvePathContents( args ) )
{
{
return null ;
return null ;
}
}
@ -245,6 +252,17 @@ namespace MediaBrowser.Server.Implementations.Library
return ResolveItem ( args ) ;
return ResolveItem ( args ) ;
}
}
/// <summary>
/// Determines whether a path should be ignored based on its contents - called after the contents have been read
/// </summary>
/// <param name="args">The args.</param>
/// <returns><c>true</c> if XXXX, <c>false</c> otherwise</returns>
private static bool ShouldResolvePathContents ( ItemResolveArgs args )
{
// Ignore any folders containing a file called .ignore
return ! args . ContainsFileSystemEntryByName ( ".ignore" ) ;
}
/// <summary>
/// <summary>
/// Resolves a set of files into a list of BaseItem
/// Resolves a set of files into a list of BaseItem
/// </summary>
/// </summary>