From d6cf7b51acda145d32c9944f1b66728c7e09a9f8 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Sun, 23 Jun 2013 13:48:30 -0400 Subject: added movie, series, folder and episode xml saving support --- .../Library/LibraryManager.cs | 45 ++++------------------ .../Providers/ProviderManager.cs | 43 ++++++++++++++++++++- 2 files changed, 49 insertions(+), 39 deletions(-) (limited to 'MediaBrowser.Server.Implementations') diff --git a/MediaBrowser.Server.Implementations/Library/LibraryManager.cs b/MediaBrowser.Server.Implementations/Library/LibraryManager.cs index e174b9a23..d1b7634fb 100644 --- a/MediaBrowser.Server.Implementations/Library/LibraryManager.cs +++ b/MediaBrowser.Server.Implementations/Library/LibraryManager.cs @@ -73,12 +73,6 @@ namespace MediaBrowser.Server.Implementations.Library /// The comparers. private IEnumerable Comparers { get; set; } - /// - /// Gets or sets the savers. - /// - /// The savers. - private IEnumerable Savers { get; set; } - /// /// Gets the active item repository /// @@ -197,15 +191,13 @@ namespace MediaBrowser.Server.Implementations.Library /// The item comparers. /// The prescan tasks. /// The postscan tasks. - /// The savers. public void AddParts(IEnumerable rules, IEnumerable pluginFolders, IEnumerable resolvers, IEnumerable introProviders, IEnumerable itemComparers, IEnumerable prescanTasks, - IEnumerable postscanTasks, - IEnumerable savers) + IEnumerable postscanTasks) { EntityResolutionIgnoreRules = rules; PluginFolderCreators = pluginFolders; @@ -214,7 +206,6 @@ namespace MediaBrowser.Server.Implementations.Library Comparers = itemComparers; PrescanTasks = prescanTasks; PostscanTasks = postscanTasks; - Savers = savers; } /// @@ -589,7 +580,7 @@ namespace MediaBrowser.Server.Implementations.Library /// UserRootFolder. public UserRootFolder GetUserRootFolder(string userRootPath) { - return _userRootFolders.GetOrAdd(userRootPath, key => RetrieveItem(userRootPath.GetMBId(typeof(UserRootFolder)), typeof(UserRootFolder)) as UserRootFolder ?? + return _userRootFolders.GetOrAdd(userRootPath, key => RetrieveItem(userRootPath.GetMBId(typeof(UserRootFolder)), typeof(UserRootFolder)) as UserRootFolder ?? (UserRootFolder)ResolvePath(new DirectoryInfo(userRootPath))); } @@ -649,7 +640,7 @@ namespace MediaBrowser.Server.Implementations.Library { return GetItemByName(ConfigurationManager.ApplicationPaths.MusicGenrePath, name, CancellationToken.None, allowSlowProviders); } - + /// /// Gets a Genre /// @@ -1001,7 +992,7 @@ namespace MediaBrowser.Server.Implementations.Library await RunPrescanTasks(progress, cancellationToken).ConfigureAwait(false); progress.Report(15); - + var innerProgress = new ActionableProgress(); innerProgress.RegisterAction(pct => progress.Report(15 + pct * .65)); @@ -1010,7 +1001,7 @@ namespace MediaBrowser.Server.Implementations.Library await RootFolder.ValidateChildren(innerProgress, cancellationToken, recursive: true).ConfigureAwait(false); progress.Report(80); - + // Run post-scan tasks await RunPostScanTasks(progress, cancellationToken).ConfigureAwait(false); @@ -1044,7 +1035,7 @@ namespace MediaBrowser.Server.Implementations.Library progress.Report(2 + percent * .13); } }); - + try { await i.Run(innerProgress, cancellationToken); @@ -1301,11 +1292,7 @@ namespace MediaBrowser.Server.Implementations.Library foreach (var item in list) { UpdateItemInLibraryCache(item); - } - - foreach (var item in list) - { - await OnItemUpdated(item, CancellationToken.None).ConfigureAwait(false); + OnItemUpdated(item); } } @@ -1354,25 +1341,9 @@ namespace MediaBrowser.Server.Implementations.Library /// Called when [item updated]. /// /// The item. - /// The cancellation token. /// Task. - private async Task OnItemUpdated(BaseItem item, CancellationToken cancellationToken) + private void OnItemUpdated(BaseItem item) { - if (ConfigurationManager.Configuration.SaveLocalMeta && item.LocationType == LocationType.FileSystem) - { - foreach (var saver in Savers.Where(i => i.Supports(item))) - { - try - { - await saver.Save(item, cancellationToken).ConfigureAwait(false); - } - catch (Exception ex) - { - _logger.ErrorException("Error in metadata saver", ex); - } - } - } - if (ItemUpdated != null) { try diff --git a/MediaBrowser.Server.Implementations/Providers/ProviderManager.cs b/MediaBrowser.Server.Implementations/Providers/ProviderManager.cs index beab6200f..3c1a7aa1e 100644 --- a/MediaBrowser.Server.Implementations/Providers/ProviderManager.cs +++ b/MediaBrowser.Server.Implementations/Providers/ProviderManager.cs @@ -3,7 +3,9 @@ using MediaBrowser.Common.Net; using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.IO; +using MediaBrowser.Controller.Library; using MediaBrowser.Controller.Providers; +using MediaBrowser.Model.Entities; using MediaBrowser.Model.Logging; using System; using System.Collections.Concurrent; @@ -58,6 +60,8 @@ namespace MediaBrowser.Server.Implementations.Providers /// The metadata providers enumerable. private BaseMetadataProvider[] MetadataProviders { get; set; } + private IEnumerable _savers; + /// /// Initializes a new instance of the class. /// @@ -65,7 +69,8 @@ namespace MediaBrowser.Server.Implementations.Providers /// The configuration manager. /// The directory watchers. /// The log manager. - public ProviderManager(IHttpClient httpClient, IServerConfigurationManager configurationManager, IDirectoryWatchers directoryWatchers, ILogManager logManager) + /// The library manager. + public ProviderManager(IHttpClient httpClient, IServerConfigurationManager configurationManager, IDirectoryWatchers directoryWatchers, ILogManager logManager, ILibraryManager libraryManager) { _logger = logManager.GetLogger("ProviderManager"); _httpClient = httpClient; @@ -74,6 +79,37 @@ namespace MediaBrowser.Server.Implementations.Providers _remoteImageCache = new FileSystemRepository(configurationManager.ApplicationPaths.DownloadedImagesDataPath); configurationManager.ConfigurationUpdated += configurationManager_ConfigurationUpdated; + + libraryManager.ItemUpdated += libraryManager_ItemUpdated; + } + + void libraryManager_ItemUpdated(object sender, ItemChangeEventArgs e) + { + var item = e.Item; + + if (ConfigurationManager.Configuration.SaveLocalMeta && item.LocationType == LocationType.FileSystem) + { + foreach (var saver in _savers.Where(i => i.Supports(item))) + { + var path = saver.GetSavePath(item); + + _directoryWatchers.TemporarilyIgnore(path); + + try + { + saver.Save(item, CancellationToken.None); + } + catch (Exception ex) + { + _logger.ErrorException("Error in metadata saver", ex); + } + finally + { + _directoryWatchers.RemoveTempIgnore(path); + } + } + } + } /// @@ -91,9 +127,12 @@ namespace MediaBrowser.Server.Implementations.Providers /// Adds the metadata providers. /// /// The providers. - public void AddMetadataProviders(IEnumerable providers) + /// The savers. + public void AddParts(IEnumerable providers, + IEnumerable savers) { MetadataProviders = providers.OrderBy(e => e.Priority).ToArray(); + _savers = savers; } /// -- cgit v1.2.3