aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Server.Implementations/Library/LibraryManager.cs
diff options
context:
space:
mode:
Diffstat (limited to 'MediaBrowser.Server.Implementations/Library/LibraryManager.cs')
-rw-r--r--MediaBrowser.Server.Implementations/Library/LibraryManager.cs120
1 files changed, 21 insertions, 99 deletions
diff --git a/MediaBrowser.Server.Implementations/Library/LibraryManager.cs b/MediaBrowser.Server.Implementations/Library/LibraryManager.cs
index 813d279ab..735565e25 100644
--- a/MediaBrowser.Server.Implementations/Library/LibraryManager.cs
+++ b/MediaBrowser.Server.Implementations/Library/LibraryManager.cs
@@ -38,24 +38,13 @@ namespace MediaBrowser.Server.Implementations.Library
/// Gets or sets the postscan tasks.
/// </summary>
/// <value>The postscan tasks.</value>
- private IEnumerable<ILibraryPostScanTask> PostscanTasks { get; set; }
- /// <summary>
- /// Gets or sets the prescan tasks.
- /// </summary>
- /// <value>The prescan tasks.</value>
- private IEnumerable<ILibraryPrescanTask> PrescanTasks { get; set; }
-
- /// <summary>
- /// Gets or sets the people prescan tasks.
- /// </summary>
- /// <value>The people prescan tasks.</value>
- private IEnumerable<IPeoplePrescanTask> PeoplePrescanTasks { get; set; }
+ private ILibraryPostScanTask[] PostscanTasks { get; set; }
/// <summary>
/// Gets the intro providers.
/// </summary>
/// <value>The intro providers.</value>
- private IEnumerable<IIntroProvider> IntroProviders { get; set; }
+ private IIntroProvider[] IntroProviders { get; set; }
/// <summary>
/// Gets the list of entity resolution ignore rules
@@ -205,26 +194,27 @@ namespace MediaBrowser.Server.Implementations.Library
/// <param name="resolvers">The resolvers.</param>
/// <param name="introProviders">The intro providers.</param>
/// <param name="itemComparers">The item comparers.</param>
- /// <param name="prescanTasks">The prescan tasks.</param>
/// <param name="postscanTasks">The postscan tasks.</param>
- /// <param name="peoplePrescanTasks">The people prescan tasks.</param>
public void AddParts(IEnumerable<IResolverIgnoreRule> rules,
IEnumerable<IVirtualFolderCreator> pluginFolders,
IEnumerable<IItemResolver> resolvers,
IEnumerable<IIntroProvider> introProviders,
IEnumerable<IBaseItemComparer> itemComparers,
- IEnumerable<ILibraryPrescanTask> prescanTasks,
- IEnumerable<ILibraryPostScanTask> postscanTasks,
- IEnumerable<IPeoplePrescanTask> peoplePrescanTasks)
+ IEnumerable<ILibraryPostScanTask> postscanTasks)
{
EntityResolutionIgnoreRules = rules.ToArray();
PluginFolderCreators = pluginFolders.ToArray();
EntityResolvers = resolvers.OrderBy(i => i.Priority).ToArray();
- IntroProviders = introProviders;
+ IntroProviders = introProviders.ToArray();
Comparers = itemComparers.ToArray();
- PrescanTasks = prescanTasks;
- PostscanTasks = postscanTasks;
- PeoplePrescanTasks = peoplePrescanTasks;
+
+ PostscanTasks = postscanTasks.OrderBy(i =>
+ {
+ var hasOrder = i as IHasOrder;
+
+ return hasOrder == null ? 0 : hasOrder.Order;
+
+ }).ToArray();
}
/// <summary>
@@ -507,7 +497,9 @@ namespace MediaBrowser.Server.Implementations.Library
// When resolving the root, we need it's grandchildren (children of user views)
var flattenFolderDepth = isPhysicalRoot ? 2 : 0;
- var fileSystemDictionary = FileData.GetFilteredFileSystemEntries(args.Path, _fileSystem, _logger, args, flattenFolderDepth: flattenFolderDepth, resolveShortcuts: isPhysicalRoot || args.IsVf);
+ var directoryService = new DirectoryService(_logger);
+
+ var fileSystemDictionary = FileData.GetFilteredFileSystemEntries(directoryService, args.Path, _fileSystem, _logger, args, flattenFolderDepth: flattenFolderDepth, resolveShortcuts: isPhysicalRoot || args.IsVf);
// Need to remove subpaths that may have been resolved from shortcuts
// Example: if \\server\movies exists, then strip out \\server\movies\action
@@ -845,7 +837,7 @@ namespace MediaBrowser.Server.Implementations.Library
/// <returns>Task.</returns>
public Task ValidatePeople(CancellationToken cancellationToken, IProgress<double> progress)
{
- return new PeopleValidator(this, PeoplePrescanTasks, _logger).ValidatePeople(cancellationToken, progress);
+ return new PeopleValidator(this, _logger).ValidatePeople(cancellationToken, progress);
}
/// <summary>
@@ -955,7 +947,7 @@ namespace MediaBrowser.Server.Implementations.Library
progress.Report(.5);
// Start by just validating the children of the root, but go no further
- await RootFolder.ValidateChildren(new Progress<double>(), cancellationToken, recursive: false);
+ await RootFolder.ValidateChildren(new Progress<double>(), cancellationToken, new MetadataRefreshOptions(), recursive: false);
progress.Report(1);
@@ -970,17 +962,12 @@ namespace MediaBrowser.Server.Implementations.Library
innerProgress.RegisterAction(pct => progress.Report(2 + pct * .13));
- // Run prescan tasks
- await RunPrescanTasks(innerProgress, cancellationToken).ConfigureAwait(false);
-
- progress.Report(15);
-
innerProgress = new ActionableProgress<double>();
- innerProgress.RegisterAction(pct => progress.Report(15 + pct * .6));
+ innerProgress.RegisterAction(pct => progress.Report(2 + pct * .73));
// Now validate the entire media library
- await RootFolder.ValidateChildren(innerProgress, cancellationToken, recursive: true).ConfigureAwait(false);
+ await RootFolder.ValidateChildren(innerProgress, cancellationToken, new MetadataRefreshOptions(), recursive: true).ConfigureAwait(false);
progress.Report(75);
@@ -999,55 +986,6 @@ namespace MediaBrowser.Server.Implementations.Library
}
/// <summary>
- /// Runs the prescan tasks.
- /// </summary>
- /// <param name="progress">The progress.</param>
- /// <param name="cancellationToken">The cancellation token.</param>
- /// <returns>Task.</returns>
- private async Task RunPrescanTasks(IProgress<double> progress, CancellationToken cancellationToken)
- {
- var tasks = PrescanTasks.ToList();
-
- var numComplete = 0;
- var numTasks = tasks.Count;
-
- foreach (var task in tasks)
- {
- var innerProgress = new ActionableProgress<double>();
-
- // Prevent access to modified closure
- var currentNumComplete = numComplete;
-
- innerProgress.RegisterAction(pct =>
- {
- double innerPercent = (currentNumComplete * 100) + pct;
- innerPercent /= numTasks;
- progress.Report(innerPercent);
- });
-
- try
- {
- await task.Run(innerProgress, cancellationToken);
- }
- catch (OperationCanceledException)
- {
- _logger.Info("Pre-scan task cancelled: {0}", task.GetType().Name);
- }
- catch (Exception ex)
- {
- _logger.ErrorException("Error running pre-scan task", ex);
- }
-
- numComplete++;
- double percent = numComplete;
- percent /= numTasks;
- progress.Report(percent * 100);
- }
-
- progress.Report(100);
- }
-
- /// <summary>
/// Runs the post scan tasks.
/// </summary>
/// <param name="progress">The progress.</param>
@@ -1109,8 +1047,7 @@ namespace MediaBrowser.Server.Implementations.Library
cancellationToken.ThrowIfCancellationRequested();
- await userRootFolder.ValidateChildren(new Progress<double>(), cancellationToken, recursive: false).ConfigureAwait(false);
- var b = true;
+ await userRootFolder.ValidateChildren(new Progress<double>(), cancellationToken, new MetadataRefreshOptions(), recursive: false).ConfigureAwait(false);
}
/// <summary>
@@ -1464,22 +1401,7 @@ namespace MediaBrowser.Server.Implementations.Library
.Distinct()
.SelectMany(i => i.Children)
.OfType<CollectionFolder>()
- .Where(i =>
- {
- var locationType = i.LocationType;
-
- if (locationType == LocationType.Remote || locationType == LocationType.Virtual)
- {
- return false;
- }
-
- if (string.Equals(i.Path, item.Path, StringComparison.OrdinalIgnoreCase))
- {
- return true;
- }
-
- return i.PhysicalLocations.Contains(item.Path);
- })
+ .Where(i => string.Equals(i.Path, item.Path, StringComparison.OrdinalIgnoreCase) || i.PhysicalLocations.Contains(item.Path))
.Select(i => i.CollectionType)
.Where(i => !string.IsNullOrEmpty(i))
.Distinct()