From 10caa7ff8371f726127cd11e36209a1e155fd3f3 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Sun, 23 Jun 2013 14:55:30 -0400 Subject: added artist/slbum xml savers --- .../Providers/ProviderManager.cs | 42 +++++++++++----------- 1 file changed, 20 insertions(+), 22 deletions(-) (limited to 'MediaBrowser.Server.Implementations') diff --git a/MediaBrowser.Server.Implementations/Providers/ProviderManager.cs b/MediaBrowser.Server.Implementations/Providers/ProviderManager.cs index 395a4298b..01c0659b6 100644 --- a/MediaBrowser.Server.Implementations/Providers/ProviderManager.cs +++ b/MediaBrowser.Server.Implementations/Providers/ProviderManager.cs @@ -83,40 +83,38 @@ namespace MediaBrowser.Server.Implementations.Providers libraryManager.ItemUpdated += libraryManager_ItemUpdated; } + private readonly ConcurrentDictionary _fileLocks = new ConcurrentDictionary(); + /// /// Handles the ItemUpdated event of the libraryManager control. /// /// The source of the event. /// The instance containing the event data. - void libraryManager_ItemUpdated(object sender, ItemChangeEventArgs e) + async void libraryManager_ItemUpdated(object sender, ItemChangeEventArgs e) { var item = e.Item; - if (ConfigurationManager.Configuration.SaveLocalMeta) + foreach (var saver in _savers.Where(i => i.Supports(item))) { - if (item.LocationType != LocationType.FileSystem) - { - return; - } + var path = saver.GetSavePath(item); - foreach (var saver in _savers.Where(i => i.Supports(item))) - { - var path = saver.GetSavePath(item); + var semaphore = _fileLocks.GetOrAdd(path, key => new SemaphoreSlim(1, 1)); - _directoryWatchers.TemporarilyIgnore(path); + await semaphore.WaitAsync().ConfigureAwait(false); - try - { - saver.Save(item, CancellationToken.None); - } - catch (Exception ex) - { - _logger.ErrorException("Error in metadata saver", ex); - } - finally - { - _directoryWatchers.RemoveTempIgnore(path); - } + try + { + _directoryWatchers.TemporarilyIgnore(path); + saver.Save(item, CancellationToken.None); + } + catch (Exception ex) + { + _logger.ErrorException("Error in metadata saver", ex); + } + finally + { + _directoryWatchers.RemoveTempIgnore(path); + semaphore.Release(); } } } -- cgit v1.2.3