From eab030df7ff0f3a78b1aa01f06eb30f71df5a391 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Fri, 26 Sep 2014 22:28:13 -0400 Subject: fixes #916 - Support reading playstate data from nfo's --- MediaBrowser.Providers/Manager/MetadataService.cs | 33 +++++++++++++++++---- MediaBrowser.Providers/Manager/ProviderManager.cs | 36 +++++++++++++++++++++-- 2 files changed, 61 insertions(+), 8 deletions(-) (limited to 'MediaBrowser.Providers/Manager') diff --git a/MediaBrowser.Providers/Manager/MetadataService.cs b/MediaBrowser.Providers/Manager/MetadataService.cs index 8657d568f2..af1e69c1a9 100644 --- a/MediaBrowser.Providers/Manager/MetadataService.cs +++ b/MediaBrowser.Providers/Manager/MetadataService.cs @@ -24,14 +24,16 @@ namespace MediaBrowser.Providers.Manager protected readonly IProviderManager ProviderManager; protected readonly IProviderRepository ProviderRepo; protected readonly IFileSystem FileSystem; + protected readonly IUserDataManager UserDataManager; - protected MetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem) + protected MetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, IUserDataManager userDataManager) { ServerConfigurationManager = serverConfigurationManager; Logger = logger; ProviderManager = providerManager; ProviderRepo = providerRepo; FileSystem = fileSystem; + UserDataManager = userDataManager; } /// @@ -304,7 +306,7 @@ namespace MediaBrowser.Providers.Manager { return HasChanged(item, hasFileChangeMonitor, status, options.DirectoryService); } - + return false; }) .ToList(); @@ -356,6 +358,7 @@ namespace MediaBrowser.Providers.Manager } var hasLocalMetadata = false; + var userDataList = new List(); foreach (var provider in providers.OfType>()) { @@ -375,6 +378,8 @@ namespace MediaBrowser.Providers.Manager refreshResult.UpdateType = refreshResult.UpdateType | ItemUpdateType.ImageUpdate; } + userDataList = localItem.UserDataLIst; + MergeData(localItem.Item, temp, new List(), !options.ReplaceAllMetadata, true); refreshResult.UpdateType = refreshResult.UpdateType | ItemUpdateType.MetadataImport; @@ -393,9 +398,9 @@ namespace MediaBrowser.Providers.Manager catch (Exception ex) { failedProviderCount++; - + Logger.ErrorException("Error in {0}", ex, provider.Name); - + // If a local provider fails, consider that a failure refreshResult.Status = ProviderRefreshStatus.Failure; refreshResult.ErrorMessage = ex.Message; @@ -441,9 +446,25 @@ namespace MediaBrowser.Providers.Manager await RunCustomProvider(provider, item, options, refreshResult, cancellationToken).ConfigureAwait(false); } + await ImportUserData(item, userDataList, cancellationToken).ConfigureAwait(false); + return refreshResult; } + private async Task ImportUserData(TItemType item, List userDataList, CancellationToken cancellationToken) + { + var hasUserData = item as IHasUserData; + + if (hasUserData != null) + { + foreach (var userData in userDataList) + { + await UserDataManager.SaveUserData(userData.UserId, hasUserData, userData, UserDataSaveReason.Import, cancellationToken) + .ConfigureAwait(false); + } + } + } + private async Task RunCustomProvider(ICustomMetadataProvider provider, TItemType item, MetadataRefreshOptions options, RefreshResult refreshResult, CancellationToken cancellationToken) { Logger.Debug("Running {0} for {1}", provider.GetType().Name, item.Path ?? item.Name); @@ -539,13 +560,13 @@ namespace MediaBrowser.Providers.Manager protected virtual void AfterRemoteRefresh(TItemType item) { - + } private async Task CreateInitialLookupInfo(TItemType item, CancellationToken cancellationToken) { var info = item.GetLookupInfo(); - + var hasIdentity = info as IHasIdentities; if (hasIdentity != null) { diff --git a/MediaBrowser.Providers/Manager/ProviderManager.cs b/MediaBrowser.Providers/Manager/ProviderManager.cs index f2ec85cfac..6cdfef1433 100644 --- a/MediaBrowser.Providers/Manager/ProviderManager.cs +++ b/MediaBrowser.Providers/Manager/ProviderManager.cs @@ -570,9 +570,33 @@ namespace MediaBrowser.Providers.Manager /// The item. /// Type of the update. /// Task. - public async Task SaveMetadata(IHasMetadata item, ItemUpdateType updateType) + public Task SaveMetadata(IHasMetadata item, ItemUpdateType updateType) { - foreach (var saver in _savers.Where(i => IsSaverEnabledForItem(i, item, updateType, false))) + return SaveMetadata(item, updateType, _savers); + } + + /// + /// Saves the metadata. + /// + /// The item. + /// Type of the update. + /// The savers. + /// Task. + public Task SaveMetadata(IHasMetadata item, ItemUpdateType updateType, IEnumerable savers) + { + return SaveMetadata(item, updateType, _savers.Where(i => savers.Contains(i.Name, StringComparer.OrdinalIgnoreCase))); + } + + /// + /// Saves the metadata. + /// + /// The item. + /// Type of the update. + /// The savers. + /// Task. + private async Task SaveMetadata(IHasMetadata item, ItemUpdateType updateType, IEnumerable savers) + { + foreach (var saver in savers.Where(i => IsSaverEnabledForItem(i, item, updateType, false))) { _logger.Debug("Saving {0} to {1}.", item.Path ?? item.Name, saver.Name); @@ -625,6 +649,14 @@ namespace MediaBrowser.Providers.Manager } } + /// + /// Determines whether [is saver enabled for item] [the specified saver]. + /// + /// The saver. + /// The item. + /// Type of the update. + /// if set to true [include disabled]. + /// true if [is saver enabled for item] [the specified saver]; otherwise, false. private bool IsSaverEnabledForItem(IMetadataSaver saver, IHasMetadata item, ItemUpdateType updateType, bool includeDisabled) { var options = GetMetadataOptions(item); -- cgit v1.2.3