diff options
| author | Luke Pulverenti <luke.pulverenti@gmail.com> | 2013-04-23 15:17:21 -0400 |
|---|---|---|
| committer | Luke Pulverenti <luke.pulverenti@gmail.com> | 2013-04-23 15:17:21 -0400 |
| commit | 4390e2f7108f24f89a1bf7ef9f6f7c9c57b4f221 (patch) | |
| tree | f0c18dd698667e186bffc6ab72509982d3122f3b /MediaBrowser.Server.Implementations | |
| parent | 0e7ad811acfa6a12555dfb205cd259584565b0e9 (diff) | |
#35 - Make IBN path configurable
Diffstat (limited to 'MediaBrowser.Server.Implementations')
3 files changed, 85 insertions, 20 deletions
diff --git a/MediaBrowser.Server.Implementations/Configuration/ServerConfigurationManager.cs b/MediaBrowser.Server.Implementations/Configuration/ServerConfigurationManager.cs index cb4c5a6cd..bdc4fcf45 100644 --- a/MediaBrowser.Server.Implementations/Configuration/ServerConfigurationManager.cs +++ b/MediaBrowser.Server.Implementations/Configuration/ServerConfigurationManager.cs @@ -1,4 +1,5 @@ -using MediaBrowser.Common.Configuration; +using System.IO; +using MediaBrowser.Common.Configuration; using MediaBrowser.Common.Implementations.Configuration; using MediaBrowser.Controller; using MediaBrowser.Controller.Configuration; @@ -23,6 +24,7 @@ namespace MediaBrowser.Server.Implementations.Configuration public ServerConfigurationManager(IApplicationPaths applicationPaths, ILogManager logManager, IXmlSerializer xmlSerializer) : base(applicationPaths, logManager, xmlSerializer) { + UpdateItemsByNamePath(); } /// <summary> @@ -51,5 +53,47 @@ namespace MediaBrowser.Server.Implementations.Configuration { get { return (ServerConfiguration)CommonConfiguration; } } + + /// <summary> + /// Called when [configuration updated]. + /// </summary> + protected override void OnConfigurationUpdated() + { + UpdateItemsByNamePath(); + + base.OnConfigurationUpdated(); + } + + /// <summary> + /// Updates the items by name path. + /// </summary> + private void UpdateItemsByNamePath() + { + if (!string.IsNullOrEmpty(Configuration.ItemsByNamePath)) + { + ApplicationPaths.ItemsByNamePath = Configuration.ItemsByNamePath; + } + } + + /// <summary> + /// Replaces the configuration. + /// </summary> + /// <param name="newConfiguration">The new configuration.</param> + /// <exception cref="System.IO.DirectoryNotFoundException"></exception> + public override void ReplaceConfiguration(BaseApplicationConfiguration newConfiguration) + { + var newConfig = (ServerConfiguration) newConfiguration; + + if (!string.Equals(Configuration.ItemsByNamePath, newConfig.ItemsByNamePath)) + { + // Validate + if (!Directory.Exists(newConfig.ItemsByNamePath)) + { + throw new DirectoryNotFoundException(string.Format("{0} does not exist.", newConfig.ItemsByNamePath)); + } + } + + base.ReplaceConfiguration(newConfiguration); + } } } diff --git a/MediaBrowser.Server.Implementations/Library/LibraryManager.cs b/MediaBrowser.Server.Implementations/Library/LibraryManager.cs index 315abd49d..132dca4e2 100644 --- a/MediaBrowser.Server.Implementations/Library/LibraryManager.cs +++ b/MediaBrowser.Server.Implementations/Library/LibraryManager.cs @@ -212,9 +212,11 @@ namespace MediaBrowser.Server.Implementations.Library private bool _internetProvidersEnabled; private bool _peopleImageFetchingEnabled; + private string _itemsByNamePath; private void RecordConfigurationValues(ServerConfiguration configuration) { + _itemsByNamePath = ConfigurationManager.ApplicationPaths.ItemsByNamePath; _internetProvidersEnabled = configuration.EnableInternetProviders; _peopleImageFetchingEnabled = configuration.InternetProviderExcludeTypes == null || !configuration.InternetProviderExcludeTypes.Contains(typeof(Person).Name, StringComparer.OrdinalIgnoreCase); } @@ -239,6 +241,13 @@ namespace MediaBrowser.Server.Implementations.Library refreshPeopleAfterUpdate = newConfigurationFetchesPeopleImages && !_peopleImageFetchingEnabled; } + var ibnPathChanged = !string.Equals(_itemsByNamePath, ConfigurationManager.ApplicationPaths.ItemsByNamePath); + + if (ibnPathChanged) + { + _itemsByName.Clear(); + } + RecordConfigurationValues(config); Task.Run(() => @@ -528,7 +537,7 @@ namespace MediaBrowser.Server.Implementations.Library /// <returns>Task{Person}.</returns> private Task<Person> GetPerson(string name, CancellationToken cancellationToken, bool allowSlowProviders = false, bool forceCreation = false) { - return GetImagesByNameItem<Person>(ConfigurationManager.ApplicationPaths.PeoplePath, name, cancellationToken, allowSlowProviders, forceCreation); + return GetItemByName<Person>(ConfigurationManager.ApplicationPaths.PeoplePath, name, cancellationToken, allowSlowProviders, forceCreation); } /// <summary> @@ -539,7 +548,7 @@ namespace MediaBrowser.Server.Implementations.Library /// <returns>Task{Studio}.</returns> public Task<Studio> GetStudio(string name, bool allowSlowProviders = false) { - return GetImagesByNameItem<Studio>(ConfigurationManager.ApplicationPaths.StudioPath, name, CancellationToken.None, allowSlowProviders); + return GetItemByName<Studio>(ConfigurationManager.ApplicationPaths.StudioPath, name, CancellationToken.None, allowSlowProviders); } /// <summary> @@ -550,7 +559,7 @@ namespace MediaBrowser.Server.Implementations.Library /// <returns>Task{Genre}.</returns> public Task<Genre> GetGenre(string name, bool allowSlowProviders = false) { - return GetImagesByNameItem<Genre>(ConfigurationManager.ApplicationPaths.GenrePath, name, CancellationToken.None, allowSlowProviders); + return GetItemByName<Genre>(ConfigurationManager.ApplicationPaths.GenrePath, name, CancellationToken.None, allowSlowProviders); } /// <summary> @@ -574,7 +583,7 @@ namespace MediaBrowser.Server.Implementations.Library /// <returns>Task{Artist}.</returns> private Task<Artist> GetArtist(string name, CancellationToken cancellationToken, bool allowSlowProviders = false, bool forceCreation = false) { - return GetImagesByNameItem<Artist>(ConfigurationManager.ApplicationPaths.ArtistsPath, name, cancellationToken, allowSlowProviders, forceCreation); + return GetItemByName<Artist>(ConfigurationManager.ApplicationPaths.ArtistsPath, name, cancellationToken, allowSlowProviders, forceCreation); } /// <summary> @@ -596,13 +605,13 @@ namespace MediaBrowser.Server.Implementations.Library throw new ArgumentOutOfRangeException(); } - return GetImagesByNameItem<Year>(ConfigurationManager.ApplicationPaths.YearPath, value.ToString(UsCulture), CancellationToken.None, allowSlowProviders); + return GetItemByName<Year>(ConfigurationManager.ApplicationPaths.YearPath, value.ToString(UsCulture), CancellationToken.None, allowSlowProviders); } /// <summary> /// The images by name item cache /// </summary> - private readonly ConcurrentDictionary<string, BaseItem> _imagesByNameItemCache = new ConcurrentDictionary<string, BaseItem>(StringComparer.OrdinalIgnoreCase); + private readonly ConcurrentDictionary<string, BaseItem> _itemsByName = new ConcurrentDictionary<string, BaseItem>(StringComparer.OrdinalIgnoreCase); /// <summary> /// Generically retrieves an IBN item @@ -616,7 +625,7 @@ namespace MediaBrowser.Server.Implementations.Library /// <returns>Task{``0}.</returns> /// <exception cref="System.ArgumentNullException"> /// </exception> - private async Task<T> GetImagesByNameItem<T>(string path, string name, CancellationToken cancellationToken, bool allowSlowProviders = true, bool forceCreation = false) + private async Task<T> GetItemByName<T>(string path, string name, CancellationToken cancellationToken, bool allowSlowProviders = true, bool forceCreation = false) where T : BaseItem, new() { if (string.IsNullOrEmpty(path)) @@ -633,11 +642,11 @@ namespace MediaBrowser.Server.Implementations.Library BaseItem obj; - if (forceCreation || !_imagesByNameItemCache.TryGetValue(key, out obj)) + if (forceCreation || !_itemsByName.TryGetValue(key, out obj)) { - obj = await CreateImagesByNameItem<T>(path, name, cancellationToken, allowSlowProviders).ConfigureAwait(false); + obj = await CreateItemByName<T>(path, name, cancellationToken, allowSlowProviders).ConfigureAwait(false); - _imagesByNameItemCache.AddOrUpdate(key, obj, (keyName, oldValue) => obj); + _itemsByName.AddOrUpdate(key, obj, (keyName, oldValue) => obj); } return obj as T; @@ -653,7 +662,7 @@ namespace MediaBrowser.Server.Implementations.Library /// <param name="allowSlowProviders">if set to <c>true</c> [allow slow providers].</param> /// <returns>Task{``0}.</returns> /// <exception cref="System.IO.IOException">Path not created: + path</exception> - private async Task<T> CreateImagesByNameItem<T>(string path, string name, CancellationToken cancellationToken, bool allowSlowProviders = true) + private async Task<T> CreateItemByName<T>(string path, string name, CancellationToken cancellationToken, bool allowSlowProviders = true) where T : BaseItem, new() { cancellationToken.ThrowIfCancellationRequested(); diff --git a/MediaBrowser.Server.Implementations/ServerApplicationPaths.cs b/MediaBrowser.Server.Implementations/ServerApplicationPaths.cs index a723eb38e..6d345a99c 100644 --- a/MediaBrowser.Server.Implementations/ServerApplicationPaths.cs +++ b/MediaBrowser.Server.Implementations/ServerApplicationPaths.cs @@ -106,7 +106,7 @@ namespace MediaBrowser.Server.Implementations /// Gets the path to the Images By Name directory /// </summary> /// <value>The images by name path.</value> - public string ImagesByNamePath + public string ItemsByNamePath { get { @@ -121,6 +121,18 @@ namespace MediaBrowser.Server.Implementations return _ibnPath; } + set + { + _ibnPath = value; + + _peoplePath = null; + _studioPath = null; + _genrePath = null; + _yearPath = null; + _musicArtistsPath = null; + _generalPath = null; + _ratingsPath = null; + } } /// <summary> @@ -137,7 +149,7 @@ namespace MediaBrowser.Server.Implementations { if (_peoplePath == null) { - _peoplePath = Path.Combine(ImagesByNamePath, "People"); + _peoplePath = Path.Combine(ItemsByNamePath, "People"); if (!Directory.Exists(_peoplePath)) { Directory.CreateDirectory(_peoplePath); @@ -162,7 +174,7 @@ namespace MediaBrowser.Server.Implementations { if (_genrePath == null) { - _genrePath = Path.Combine(ImagesByNamePath, "Genre"); + _genrePath = Path.Combine(ItemsByNamePath, "Genre"); if (!Directory.Exists(_genrePath)) { Directory.CreateDirectory(_genrePath); @@ -187,7 +199,7 @@ namespace MediaBrowser.Server.Implementations { if (_studioPath == null) { - _studioPath = Path.Combine(ImagesByNamePath, "Studio"); + _studioPath = Path.Combine(ItemsByNamePath, "Studio"); if (!Directory.Exists(_studioPath)) { Directory.CreateDirectory(_studioPath); @@ -212,7 +224,7 @@ namespace MediaBrowser.Server.Implementations { if (_yearPath == null) { - _yearPath = Path.Combine(ImagesByNamePath, "Year"); + _yearPath = Path.Combine(ItemsByNamePath, "Year"); if (!Directory.Exists(_yearPath)) { Directory.CreateDirectory(_yearPath); @@ -237,7 +249,7 @@ namespace MediaBrowser.Server.Implementations { if (_generalPath == null) { - _generalPath = Path.Combine(ImagesByNamePath, "General"); + _generalPath = Path.Combine(ItemsByNamePath, "General"); if (!Directory.Exists(_generalPath)) { Directory.CreateDirectory(_generalPath); @@ -262,7 +274,7 @@ namespace MediaBrowser.Server.Implementations { if (_ratingsPath == null) { - _ratingsPath = Path.Combine(ImagesByNamePath, "Ratings"); + _ratingsPath = Path.Combine(ItemsByNamePath, "Ratings"); if (!Directory.Exists(_ratingsPath)) { Directory.CreateDirectory(_ratingsPath); @@ -363,7 +375,7 @@ namespace MediaBrowser.Server.Implementations { if (_musicArtistsPath == null) { - _musicArtistsPath = Path.Combine(ImagesByNamePath, "Artists"); + _musicArtistsPath = Path.Combine(ItemsByNamePath, "Artists"); if (!Directory.Exists(_musicArtistsPath)) { Directory.CreateDirectory(_musicArtistsPath); |
