diff --git a/MediaBrowser.Controller/Library/ILibraryManager.cs b/MediaBrowser.Controller/Library/ILibraryManager.cs
index f5abb8dcd9..ff859af9c1 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 9ea13ca9e4..29a85dd9c0 100644
--- a/MediaBrowser.Providers/MediaBrowser.Providers.csproj
+++ b/MediaBrowser.Providers/MediaBrowser.Providers.csproj
@@ -76,6 +76,7 @@
+
diff --git a/MediaBrowser.Server.Implementations/Savers/MovieXmlSaver.cs b/MediaBrowser.Providers/Savers/MovieXmlSaver.cs
similarity index 96%
rename from MediaBrowser.Server.Implementations/Savers/MovieXmlSaver.cs
rename to MediaBrowser.Providers/Savers/MovieXmlSaver.cs
index f536f94964..1bf0408491 100644
--- a/MediaBrowser.Server.Implementations/Savers/MovieXmlSaver.cs
+++ b/MediaBrowser.Providers/Savers/MovieXmlSaver.cs
@@ -5,7 +5,7 @@ using MediaBrowser.Model.Entities;
using System.Threading;
using System.Threading.Tasks;
-namespace MediaBrowser.Server.Implementations.Savers
+namespace MediaBrowser.Providers.Savers
{
///
/// Saves movie.xml for movies, trailers and music videos
diff --git a/MediaBrowser.Server.Implementations/Library/LibraryManager.cs b/MediaBrowser.Server.Implementations/Library/LibraryManager.cs
index 7d6abc70b4..0ba1499409 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 1f215dde0f..60afc8413d 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.ServerApplication/ApplicationHost.cs b/MediaBrowser.ServerApplication/ApplicationHost.cs
index 6f6d8e8c71..80f63df367 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());
}