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 ++++++++++++++++++----- 1 file changed, 27 insertions(+), 6 deletions(-) (limited to 'MediaBrowser.Providers/Manager/MetadataService.cs') diff --git a/MediaBrowser.Providers/Manager/MetadataService.cs b/MediaBrowser.Providers/Manager/MetadataService.cs index 8657d568f..af1e69c1a 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) { -- cgit v1.2.3