From 9e0c1340fc3ad4b41e3c349b98ea71b708ade95a Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Sun, 2 Feb 2014 08:36:31 -0500 Subject: convert games to new providers --- .../Library/LibraryManager.cs | 58 +++------------------- 1 file changed, 7 insertions(+), 51 deletions(-) (limited to 'MediaBrowser.Server.Implementations/Library') diff --git a/MediaBrowser.Server.Implementations/Library/LibraryManager.cs b/MediaBrowser.Server.Implementations/Library/LibraryManager.cs index 17b5ea424..789cc1100 100644 --- a/MediaBrowser.Server.Implementations/Library/LibraryManager.cs +++ b/MediaBrowser.Server.Implementations/Library/LibraryManager.cs @@ -9,6 +9,7 @@ using MediaBrowser.Controller.Entities.TV; using MediaBrowser.Controller.IO; using MediaBrowser.Controller.Library; using MediaBrowser.Controller.Persistence; +using MediaBrowser.Controller.Providers; using MediaBrowser.Controller.Resolvers; using MediaBrowser.Controller.Sorting; using MediaBrowser.Model.Configuration; @@ -135,9 +136,8 @@ namespace MediaBrowser.Server.Implementations.Library /// The by reference items. private ConcurrentDictionary ByReferenceItems { get; set; } - private IEnumerable _savers; - private readonly Func _libraryMonitorFactory; + private readonly Func _providerManagerFactory; /// /// The _library items cache @@ -180,7 +180,7 @@ namespace MediaBrowser.Server.Implementations.Library /// The user manager. /// The configuration manager. /// The user data repository. - public LibraryManager(ILogger logger, ITaskManager taskManager, IUserManager userManager, IServerConfigurationManager configurationManager, IUserDataManager userDataRepository, Func libraryMonitorFactory, IFileSystem fileSystem) + public LibraryManager(ILogger logger, ITaskManager taskManager, IUserManager userManager, IServerConfigurationManager configurationManager, IUserDataManager userDataRepository, Func libraryMonitorFactory, IFileSystem fileSystem, Func providerManagerFactory) { _logger = logger; _taskManager = taskManager; @@ -189,6 +189,7 @@ namespace MediaBrowser.Server.Implementations.Library _userDataRepository = userDataRepository; _libraryMonitorFactory = libraryMonitorFactory; _fileSystem = fileSystem; + _providerManagerFactory = providerManagerFactory; ByReferenceItems = new ConcurrentDictionary(); ConfigurationManager.ConfigurationUpdated += ConfigurationUpdated; @@ -215,8 +216,7 @@ namespace MediaBrowser.Server.Implementations.Library IEnumerable itemComparers, IEnumerable prescanTasks, IEnumerable postscanTasks, - IEnumerable peoplePrescanTasks, - IEnumerable savers) + IEnumerable peoplePrescanTasks) { EntityResolutionIgnoreRules = rules.ToArray(); PluginFolderCreators = pluginFolders.ToArray(); @@ -226,7 +226,6 @@ namespace MediaBrowser.Server.Implementations.Library PrescanTasks = prescanTasks; PostscanTasks = postscanTasks; PeoplePrescanTasks = peoplePrescanTasks; - _savers = savers; } /// @@ -1375,9 +1374,9 @@ namespace MediaBrowser.Server.Implementations.Library { if (item.LocationType == LocationType.FileSystem) { - await SaveMetadata(item, updateReason).ConfigureAwait(false); + await _providerManagerFactory().SaveMetadata(item, updateReason).ConfigureAwait(false); } - + item.DateLastSaved = DateTime.UtcNow; await ItemRepository.SaveItem(item, cancellationToken).ConfigureAwait(false); @@ -1440,49 +1439,6 @@ namespace MediaBrowser.Server.Implementations.Library return ItemRepository.RetrieveItem(id); } - private readonly ConcurrentDictionary _fileLocks = new ConcurrentDictionary(); - - /// - /// Saves the metadata. - /// - /// The item. - /// Type of the update. - /// Task. - public async Task SaveMetadata(BaseItem item, ItemUpdateType updateType) - { - var locationType = item.LocationType; - if (locationType == LocationType.Remote || locationType == LocationType.Virtual) - { - throw new ArgumentException("Only file-system based items can save metadata."); - } - - foreach (var saver in _savers.Where(i => i.IsEnabledFor(item, updateType))) - { - var path = saver.GetSavePath(item); - - var semaphore = _fileLocks.GetOrAdd(path, key => new SemaphoreSlim(1, 1)); - - var libraryMonitor = _libraryMonitorFactory(); - - await semaphore.WaitAsync().ConfigureAwait(false); - - try - { - libraryMonitor.ReportFileSystemChangeBeginning(path); - saver.Save(item, CancellationToken.None); - } - catch (Exception ex) - { - _logger.ErrorException("Error in metadata saver", ex); - } - finally - { - libraryMonitor.ReportFileSystemChangeComplete(path, false); - semaphore.Release(); - } - } - } - /// /// Finds the type of the collection. /// -- cgit v1.2.3