From 1141fcc3741e8c2195365f623854ff6ada7e6f99 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Fri, 24 May 2013 11:01:53 -0400 Subject: fixes #289 - Rename "Season 0" to "Specials"? --- .../Library/LibraryManager.cs | 78 ++++++++++++++++++---- 1 file changed, 65 insertions(+), 13 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 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 /// The resolvers. /// The intro providers. /// The item comparers. + /// The prescan tasks. public void AddParts(IEnumerable rules, IEnumerable pluginFolders, IEnumerable 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(); @@ -260,6 +272,27 @@ namespace MediaBrowser.Server.Implementations.Library }); } + /// + /// Updates the season zero names. + /// + /// The new name. + /// The cancellation token. + /// Task. + private Task UpdateSeasonZeroNames(string newName, CancellationToken cancellationToken) + { + var seasons = RootFolder.RecursiveChildren + .OfType() + .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); + } + /// /// Creates the library items cache. /// @@ -1075,30 +1108,49 @@ namespace MediaBrowser.Server.Implementations.Library } /// - /// Updates the item. + /// Updates the items. /// - /// The item. + /// The items. /// The cancellation token. /// Task. - public async Task UpdateItem(BaseItem item, CancellationToken cancellationToken) + private async Task UpdateItems(IEnumerable 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); + } } } } + /// + /// Updates the item. + /// + /// The item. + /// The cancellation token. + /// Task. + public Task UpdateItem(BaseItem item, CancellationToken cancellationToken) + { + return UpdateItems(new[] { item }, cancellationToken); + } + /// /// Reports the item removed. /// -- cgit v1.2.3