diff options
| author | Luke Pulverenti <luke.pulverenti@gmail.com> | 2013-05-24 11:01:53 -0400 |
|---|---|---|
| committer | Luke Pulverenti <luke.pulverenti@gmail.com> | 2013-05-24 11:01:53 -0400 |
| commit | 1141fcc3741e8c2195365f623854ff6ada7e6f99 (patch) | |
| tree | 20e5a069a55a8aae577d38833840ae7a514ae80e /MediaBrowser.Server.Implementations/Library/LibraryManager.cs | |
| parent | 6be50fefc1a9fac3b573e50feaa18dd1939f3fc6 (diff) | |
fixes #289 - Rename "Season 0" to "Specials"?
Diffstat (limited to 'MediaBrowser.Server.Implementations/Library/LibraryManager.cs')
| -rw-r--r-- | MediaBrowser.Server.Implementations/Library/LibraryManager.cs | 78 |
1 files changed, 65 insertions, 13 deletions
diff --git a/MediaBrowser.Server.Implementations/Library/LibraryManager.cs b/MediaBrowser.Server.Implementations/Library/LibraryManager.cs index fbf2dfc70..13857a656 100644 --- a/MediaBrowser.Server.Implementations/Library/LibraryManager.cs +++ b/MediaBrowser.Server.Implementations/Library/LibraryManager.cs @@ -4,6 +4,7 @@ using MediaBrowser.Common.ScheduledTasks; using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Entities.Audio; +using MediaBrowser.Controller.Entities.TV; using MediaBrowser.Controller.IO; using MediaBrowser.Controller.Library; using MediaBrowser.Controller.Persistence; @@ -159,6 +160,7 @@ 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> public void AddParts(IEnumerable<IResolverIgnoreRule> rules, IEnumerable<IVirtualFolderCreator> pluginFolders, IEnumerable<IItemResolver> resolvers, @@ -211,9 +213,11 @@ namespace MediaBrowser.Server.Implementations.Library private bool _internetProvidersEnabled; private bool _peopleImageFetchingEnabled; private string _itemsByNamePath; + private string _seasonZeroDisplayName; private void RecordConfigurationValues(ServerConfiguration configuration) { + _seasonZeroDisplayName = ConfigurationManager.Configuration.SeasonZeroDisplayName; _itemsByNamePath = ConfigurationManager.ApplicationPaths.ItemsByNamePath; _internetProvidersEnabled = configuration.EnableInternetProviders; _peopleImageFetchingEnabled = configuration.InternetProviderExcludeTypes == null || !configuration.InternetProviderExcludeTypes.Contains(typeof(Person).Name, StringComparer.OrdinalIgnoreCase); @@ -239,17 +243,25 @@ namespace MediaBrowser.Server.Implementations.Library refreshPeopleAfterUpdate = newConfigurationFetchesPeopleImages && !_peopleImageFetchingEnabled; } - var ibnPathChanged = !string.Equals(_itemsByNamePath, ConfigurationManager.ApplicationPaths.ItemsByNamePath); + var ibnPathChanged = !string.Equals(_itemsByNamePath, ConfigurationManager.ApplicationPaths.ItemsByNamePath, StringComparison.CurrentCulture); if (ibnPathChanged) { _itemsByName.Clear(); } + var newSeasonZeroName = ConfigurationManager.Configuration.SeasonZeroDisplayName; + var seasonZeroNameChanged = !string.Equals(_seasonZeroDisplayName, newSeasonZeroName, StringComparison.CurrentCulture); + RecordConfigurationValues(config); - Task.Run(() => + Task.Run(async () => { + if (seasonZeroNameChanged) + { + await UpdateSeasonZeroNames(newSeasonZeroName, CancellationToken.None).ConfigureAwait(false); + } + // Any number of configuration settings could change the way the library is refreshed, so do that now _taskManager.CancelIfRunningAndQueue<RefreshMediaLibraryTask>(); @@ -261,6 +273,27 @@ namespace MediaBrowser.Server.Implementations.Library } /// <summary> + /// Updates the season zero names. + /// </summary> + /// <param name="newName">The new name.</param> + /// <param name="cancellationToken">The cancellation token.</param> + /// <returns>Task.</returns> + private Task UpdateSeasonZeroNames(string newName, CancellationToken cancellationToken) + { + var seasons = RootFolder.RecursiveChildren + .OfType<Season>() + .Where(i => i.IndexNumber.HasValue && i.IndexNumber.Value == 0 && !string.Equals(i.Name, newName, StringComparison.CurrentCulture)) + .ToList(); + + foreach (var season in seasons) + { + season.Name = newName; + } + + return UpdateItems(seasons, cancellationToken); + } + + /// <summary> /// Creates the library items cache. /// </summary> /// <returns>ConcurrentDictionary{GuidBaseItem}.</returns> @@ -1075,31 +1108,50 @@ namespace MediaBrowser.Server.Implementations.Library } /// <summary> - /// Updates the item. + /// Updates the items. /// </summary> - /// <param name="item">The item.</param> + /// <param name="items">The items.</param> /// <param name="cancellationToken">The cancellation token.</param> /// <returns>Task.</returns> - public async Task UpdateItem(BaseItem item, CancellationToken cancellationToken) + private async Task UpdateItems(IEnumerable<BaseItem> items, CancellationToken cancellationToken) { - await ItemRepository.SaveItem(item, cancellationToken).ConfigureAwait(false); + var list = items.ToList(); + + await ItemRepository.SaveItems(list, cancellationToken).ConfigureAwait(false); - UpdateItemInLibraryCache(item); + foreach (var item in list) + { + UpdateItemInLibraryCache(item); + } if (ItemUpdated != null) { - try - { - ItemUpdated(this, new ItemChangeEventArgs { Item = item }); - } - catch (Exception ex) + foreach (var item in list) { - _logger.ErrorException("Error in ItemUpdated event handler", ex); + try + { + ItemUpdated(this, new ItemChangeEventArgs { Item = item }); + } + catch (Exception ex) + { + _logger.ErrorException("Error in ItemUpdated event handler", ex); + } } } } /// <summary> + /// Updates the item. + /// </summary> + /// <param name="item">The item.</param> + /// <param name="cancellationToken">The cancellation token.</param> + /// <returns>Task.</returns> + public Task UpdateItem(BaseItem item, CancellationToken cancellationToken) + { + return UpdateItems(new[] { item }, cancellationToken); + } + + /// <summary> /// Reports the item removed. /// </summary> /// <param name="item">The item.</param> |
