From fad1ac8e9fc0feff1936fce52ff46e91554ef2d7 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Sun, 9 Jun 2013 13:37:16 -0400 Subject: call metadata savers after items are updated --- MediaBrowser.Controller/Library/ILibraryManager.cs | 5 +- .../MediaBrowser.Providers.csproj | 1 + MediaBrowser.Providers/Savers/MovieXmlSaver.cs | 49 +++++++++++++++++ .../Library/LibraryManager.cs | 63 +++++++++++++++++----- .../MediaBrowser.Server.Implementations.csproj | 1 - .../Savers/MovieXmlSaver.cs | 49 ----------------- MediaBrowser.ServerApplication/ApplicationHost.cs | 3 +- 7 files changed, 105 insertions(+), 66 deletions(-) create mode 100644 MediaBrowser.Providers/Savers/MovieXmlSaver.cs delete mode 100644 MediaBrowser.Server.Implementations/Savers/MovieXmlSaver.cs diff --git a/MediaBrowser.Controller/Library/ILibraryManager.cs b/MediaBrowser.Controller/Library/ILibraryManager.cs index f5abb8dcd..ff859af9c 100644 --- a/MediaBrowser.Controller/Library/ILibraryManager.cs +++ b/MediaBrowser.Controller/Library/ILibraryManager.cs @@ -145,13 +145,16 @@ namespace MediaBrowser.Controller.Library /// The item comparers. /// The prescan tasks. /// The postscan tasks. + /// The savers. + /// The ?. void AddParts(IEnumerable rules, IEnumerable pluginFolders, IEnumerable resolvers, IEnumerable introProviders, IEnumerable itemComparers, IEnumerable prescanTasks, - IEnumerable postscanTasks); + IEnumerable postscanTasks, + IEnumerable savers); /// /// Sorts the specified items. diff --git a/MediaBrowser.Providers/MediaBrowser.Providers.csproj b/MediaBrowser.Providers/MediaBrowser.Providers.csproj index 9ea13ca9e..29a85dd9c 100644 --- a/MediaBrowser.Providers/MediaBrowser.Providers.csproj +++ b/MediaBrowser.Providers/MediaBrowser.Providers.csproj @@ -76,6 +76,7 @@ + diff --git a/MediaBrowser.Providers/Savers/MovieXmlSaver.cs b/MediaBrowser.Providers/Savers/MovieXmlSaver.cs new file mode 100644 index 000000000..1bf040849 --- /dev/null +++ b/MediaBrowser.Providers/Savers/MovieXmlSaver.cs @@ -0,0 +1,49 @@ +using MediaBrowser.Controller.Entities; +using MediaBrowser.Controller.Entities.Movies; +using MediaBrowser.Controller.Library; +using MediaBrowser.Model.Entities; +using System.Threading; +using System.Threading.Tasks; + +namespace MediaBrowser.Providers.Savers +{ + /// + /// Saves movie.xml for movies, trailers and music videos + /// + public class MovieXmlSaver : IMetadataSaver + { + /// + /// Supportses the specified item. + /// + /// The item. + /// true if XXXX, false otherwise + public bool Supports(BaseItem item) + { + if (item.LocationType != LocationType.FileSystem) + { + return false; + } + + var trailer = item as Trailer; + + if (trailer != null) + { + return !trailer.IsLocalTrailer; + } + + // Don't support local trailers + return item is Movie || item is MusicVideo; + } + + /// + /// Saves the specified item. + /// + /// The item. + /// The cancellation token. + /// Task. + public Task Save(BaseItem item, CancellationToken cancellationToken) + { + return Task.Run(() => { }); + } + } +} diff --git a/MediaBrowser.Server.Implementations/Library/LibraryManager.cs b/MediaBrowser.Server.Implementations/Library/LibraryManager.cs index 7d6abc70b..0ba149940 100644 --- a/MediaBrowser.Server.Implementations/Library/LibraryManager.cs +++ b/MediaBrowser.Server.Implementations/Library/LibraryManager.cs @@ -73,6 +73,12 @@ 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 /// @@ -191,13 +197,15 @@ 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 postscanTasks, + IEnumerable savers) { EntityResolutionIgnoreRules = rules; PluginFolderCreators = pluginFolders; @@ -206,6 +214,7 @@ namespace MediaBrowser.Server.Implementations.Library Comparers = itemComparers; PrescanTasks = prescanTasks; PostscanTasks = postscanTasks; + Savers = savers; } /// @@ -1259,7 +1268,7 @@ namespace MediaBrowser.Server.Implementations.Library } catch (Exception ex) { - _logger.ErrorException("Error in ItemUpdated event handler", ex); + _logger.ErrorException("Error in ItemAdded event handler", ex); } } } @@ -1282,19 +1291,9 @@ namespace MediaBrowser.Server.Implementations.Library UpdateItemInLibraryCache(item); } - if (ItemUpdated != null) + foreach (var item in list) { - foreach (var item in list) - { - try - { - ItemUpdated(this, new ItemChangeEventArgs { Item = item }); - } - catch (Exception ex) - { - _logger.ErrorException("Error in ItemUpdated event handler", ex); - } - } + await OnItemUpdated(item, CancellationToken.None).ConfigureAwait(false); } } @@ -1366,5 +1365,41 @@ namespace MediaBrowser.Server.Implementations.Library return children; } + + /// + /// Called when [item updated]. + /// + /// The item. + /// The cancellation token. + /// Task. + private async Task OnItemUpdated(BaseItem item, CancellationToken cancellationToken) + { + if (ConfigurationManager.Configuration.SaveLocalMeta) + { + 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 + { + ItemUpdated(this, new ItemChangeEventArgs { Item = item }); + } + catch (Exception ex) + { + _logger.ErrorException("Error in ItemUpdated event handler", ex); + } + } + } } } diff --git a/MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj b/MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj index 1f215dde0..60afc8413 100644 --- a/MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj +++ b/MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj @@ -143,7 +143,6 @@ - diff --git a/MediaBrowser.Server.Implementations/Savers/MovieXmlSaver.cs b/MediaBrowser.Server.Implementations/Savers/MovieXmlSaver.cs deleted file mode 100644 index f536f9496..000000000 --- a/MediaBrowser.Server.Implementations/Savers/MovieXmlSaver.cs +++ /dev/null @@ -1,49 +0,0 @@ -using MediaBrowser.Controller.Entities; -using MediaBrowser.Controller.Entities.Movies; -using MediaBrowser.Controller.Library; -using MediaBrowser.Model.Entities; -using System.Threading; -using System.Threading.Tasks; - -namespace MediaBrowser.Server.Implementations.Savers -{ - /// - /// Saves movie.xml for movies, trailers and music videos - /// - public class MovieXmlSaver : IMetadataSaver - { - /// - /// Supportses the specified item. - /// - /// The item. - /// true if XXXX, false otherwise - public bool Supports(BaseItem item) - { - if (item.LocationType != LocationType.FileSystem) - { - return false; - } - - var trailer = item as Trailer; - - if (trailer != null) - { - return !trailer.IsLocalTrailer; - } - - // Don't support local trailers - return item is Movie || item is MusicVideo; - } - - /// - /// Saves the specified item. - /// - /// The item. - /// The cancellation token. - /// Task. - public Task Save(BaseItem item, CancellationToken cancellationToken) - { - return Task.Run(() => { }); - } - } -} diff --git a/MediaBrowser.ServerApplication/ApplicationHost.cs b/MediaBrowser.ServerApplication/ApplicationHost.cs index 6f6d8e8c7..80f63df36 100644 --- a/MediaBrowser.ServerApplication/ApplicationHost.cs +++ b/MediaBrowser.ServerApplication/ApplicationHost.cs @@ -397,7 +397,8 @@ namespace MediaBrowser.ServerApplication GetExports(), GetExports(), GetExports(), - GetExports()); + GetExports(), + GetExports()); ProviderManager.AddMetadataProviders(GetExports().ToArray()); } -- cgit v1.2.3