diff options
| author | Luke Pulverenti <luke.pulverenti@gmail.com> | 2014-09-26 22:28:13 -0400 |
|---|---|---|
| committer | Luke Pulverenti <luke.pulverenti@gmail.com> | 2014-09-26 22:28:13 -0400 |
| commit | eab030df7ff0f3a78b1aa01f06eb30f71df5a391 (patch) | |
| tree | 47ac0dbafd3812b51f4ffa595009813be3ea1a40 /MediaBrowser.Providers/Manager | |
| parent | a260432fdf15a762a371b6771a7f6556bdb49c2f (diff) | |
fixes #916 - Support reading playstate data from nfo's
Diffstat (limited to 'MediaBrowser.Providers/Manager')
| -rw-r--r-- | MediaBrowser.Providers/Manager/MetadataService.cs | 33 | ||||
| -rw-r--r-- | MediaBrowser.Providers/Manager/ProviderManager.cs | 36 |
2 files changed, 61 insertions, 8 deletions
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; } /// <summary> @@ -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<UserItemData>(); foreach (var provider in providers.OfType<ILocalMetadataProvider<TItemType>>()) { @@ -375,6 +378,8 @@ namespace MediaBrowser.Providers.Manager refreshResult.UpdateType = refreshResult.UpdateType | ItemUpdateType.ImageUpdate; } + userDataList = localItem.UserDataLIst; + MergeData(localItem.Item, temp, new List<MetadataFields>(), !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<UserItemData> 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<TItemType> 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<TIdType> CreateInitialLookupInfo(TItemType item, CancellationToken cancellationToken) { var info = item.GetLookupInfo(); - + var hasIdentity = info as IHasIdentities<IItemIdentity>; 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 /// <param name="item">The item.</param> /// <param name="updateType">Type of the update.</param> /// <returns>Task.</returns> - 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); + } + + /// <summary> + /// Saves the metadata. + /// </summary> + /// <param name="item">The item.</param> + /// <param name="updateType">Type of the update.</param> + /// <param name="savers">The savers.</param> + /// <returns>Task.</returns> + public Task SaveMetadata(IHasMetadata item, ItemUpdateType updateType, IEnumerable<string> savers) + { + return SaveMetadata(item, updateType, _savers.Where(i => savers.Contains(i.Name, StringComparer.OrdinalIgnoreCase))); + } + + /// <summary> + /// Saves the metadata. + /// </summary> + /// <param name="item">The item.</param> + /// <param name="updateType">Type of the update.</param> + /// <param name="savers">The savers.</param> + /// <returns>Task.</returns> + private async Task SaveMetadata(IHasMetadata item, ItemUpdateType updateType, IEnumerable<IMetadataSaver> 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 } } + /// <summary> + /// Determines whether [is saver enabled for item] [the specified saver]. + /// </summary> + /// <param name="saver">The saver.</param> + /// <param name="item">The item.</param> + /// <param name="updateType">Type of the update.</param> + /// <param name="includeDisabled">if set to <c>true</c> [include disabled].</param> + /// <returns><c>true</c> if [is saver enabled for item] [the specified saver]; otherwise, <c>false</c>.</returns> private bool IsSaverEnabledForItem(IMetadataSaver saver, IHasMetadata item, ItemUpdateType updateType, bool includeDisabled) { var options = GetMetadataOptions(item); |
