From 5ba769f3b41283efb8e7fb3a2407aafe0d6541d4 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Fri, 5 Apr 2013 00:13:41 -0400 Subject: #79 - Music Image Extraction --- .../Library/LibraryManager.cs | 36 ++++++++++++++++++++-- 1 file changed, 33 insertions(+), 3 deletions(-) (limited to 'MediaBrowser.Server.Implementations/Library/LibraryManager.cs') diff --git a/MediaBrowser.Server.Implementations/Library/LibraryManager.cs b/MediaBrowser.Server.Implementations/Library/LibraryManager.cs index a57eb8eaa..9bc47a025 100644 --- a/MediaBrowser.Server.Implementations/Library/LibraryManager.cs +++ b/MediaBrowser.Server.Implementations/Library/LibraryManager.cs @@ -126,6 +126,9 @@ namespace MediaBrowser.Server.Implementations.Library } } + private ConcurrentDictionary _userRootFolders = + new ConcurrentDictionary(); + /// /// Initializes a new instance of the class. /// @@ -484,6 +487,16 @@ namespace MediaBrowser.Server.Implementations.Library return rootFolder; } + /// + /// Gets the user root folder. + /// + /// The user root path. + /// UserRootFolder. + public UserRootFolder GetUserRootFolder(string userRootPath) + { + return _userRootFolders.GetOrAdd(userRootPath, key => Kernel.ItemRepository.RetrieveItem(userRootPath.GetMBId(typeof(UserRootFolder))) as UserRootFolder ?? (UserRootFolder)ResolvePath(userRootPath)); + } + /// /// Gets a Person /// @@ -739,14 +752,31 @@ namespace MediaBrowser.Server.Implementations.Library // Start by just validating the children of the root, but go no further await RootFolder.ValidateChildren(new Progress { }, cancellationToken, recursive: false); - // Validate only the collection folders for each user, just to make them available as quickly as possible - var userCollectionFolderTasks = _userManager.Users.AsParallel().Select(user => user.ValidateCollectionFolders(new Progress { }, cancellationToken)); - await Task.WhenAll(userCollectionFolderTasks).ConfigureAwait(false); + foreach (var folder in _userManager.Users.Select(u => u.RootFolder).Distinct()) + { + await ValidateCollectionFolders(folder, cancellationToken).ConfigureAwait(false); + } // Now validate the entire media library await RootFolder.ValidateChildren(progress, cancellationToken, recursive: true).ConfigureAwait(false); } + /// + /// Validates only the collection folders for a User and goes no further + /// + /// The user root folder. + /// The cancellation token. + /// Task. + private async Task ValidateCollectionFolders(UserRootFolder userRootFolder, CancellationToken cancellationToken) + { + _logger.Info("Validating collection folders within {0}", userRootFolder.Path); + await userRootFolder.RefreshMetadata(cancellationToken).ConfigureAwait(false); + + cancellationToken.ThrowIfCancellationRequested(); + + await userRootFolder.ValidateChildren(new Progress { }, cancellationToken, recursive: false).ConfigureAwait(false); + } + /// /// Gets the default view. /// -- cgit v1.2.3