diff --git a/MediaBrowser.Server.Implementations/Library/LibraryManager.cs b/MediaBrowser.Server.Implementations/Library/LibraryManager.cs index 91187b687a..d397b15480 100644 --- a/MediaBrowser.Server.Implementations/Library/LibraryManager.cs +++ b/MediaBrowser.Server.Implementations/Library/LibraryManager.cs @@ -516,10 +516,11 @@ namespace MediaBrowser.Server.Implementations.Library /// The name. /// The cancellation token. /// if set to true [allow slow providers]. + /// if set to true [force creation]. /// Task{Person}. - private Task GetPerson(string name, CancellationToken cancellationToken, bool allowSlowProviders = false) + private Task GetPerson(string name, CancellationToken cancellationToken, bool allowSlowProviders = false, bool forceCreation = false) { - return GetImagesByNameItem(ConfigurationManager.ApplicationPaths.PeoplePath, name, cancellationToken, allowSlowProviders); + return GetImagesByNameItem(ConfigurationManager.ApplicationPaths.PeoplePath, name, cancellationToken, allowSlowProviders, forceCreation); } /// @@ -579,9 +580,11 @@ namespace MediaBrowser.Server.Implementations.Library /// The name. /// The cancellation token. /// if set to true [allow slow providers]. + /// if set to true [force creation]. /// Task{``0}. - /// - private Task GetImagesByNameItem(string path, string name, CancellationToken cancellationToken, bool allowSlowProviders = true) + /// + /// + private Task GetImagesByNameItem(string path, string name, CancellationToken cancellationToken, bool allowSlowProviders = true, bool forceCreation = false) where T : BaseItem, new() { if (string.IsNullOrEmpty(path)) @@ -596,6 +599,15 @@ namespace MediaBrowser.Server.Implementations.Library var key = Path.Combine(path, FileSystem.GetValidFilename(name)); + if (forceCreation) + { + var task = CreateImagesByNameItem(path, name, cancellationToken, allowSlowProviders); + + _imagesByNameItemCache.AddOrUpdate(key, task, (keyName, oldValue) => task); + + return task; + } + var obj = _imagesByNameItemCache.GetOrAdd(key, keyname => CreateImagesByNameItem(path, name, cancellationToken, allowSlowProviders)); return obj as Task; @@ -676,9 +688,6 @@ namespace MediaBrowser.Server.Implementations.Library /// Task. public async Task ValidatePeople(CancellationToken cancellationToken, IProgress progress) { - // Clear the IBN cache - _imagesByNameItemCache.Clear(); - const int maxTasks = 250; var tasks = new List(); @@ -713,7 +722,7 @@ namespace MediaBrowser.Server.Implementations.Library try { - await GetPerson(currentPerson.Name, cancellationToken, allowSlowProviders: true).ConfigureAwait(false); + await GetPerson(currentPerson.Name, cancellationToken, true, true).ConfigureAwait(false); } catch (IOException ex) {