aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Providers/Manager/MetadataService.cs
diff options
context:
space:
mode:
Diffstat (limited to 'MediaBrowser.Providers/Manager/MetadataService.cs')
-rw-r--r--MediaBrowser.Providers/Manager/MetadataService.cs52
1 files changed, 35 insertions, 17 deletions
diff --git a/MediaBrowser.Providers/Manager/MetadataService.cs b/MediaBrowser.Providers/Manager/MetadataService.cs
index bc0b1bcb2..de41a0f96 100644
--- a/MediaBrowser.Providers/Manager/MetadataService.cs
+++ b/MediaBrowser.Providers/Manager/MetadataService.cs
@@ -24,8 +24,9 @@ namespace MediaBrowser.Providers.Manager
protected readonly IProviderRepository ProviderRepo;
protected readonly IFileSystem FileSystem;
protected readonly IUserDataManager UserDataManager;
+ protected readonly ILibraryManager LibraryManager;
- protected MetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, IUserDataManager userDataManager)
+ protected MetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, IUserDataManager userDataManager, ILibraryManager libraryManager)
{
ServerConfigurationManager = serverConfigurationManager;
Logger = logger;
@@ -33,6 +34,7 @@ namespace MediaBrowser.Providers.Manager
ProviderRepo = providerRepo;
FileSystem = fileSystem;
UserDataManager = userDataManager;
+ LibraryManager = libraryManager;
}
/// <summary>
@@ -118,6 +120,11 @@ namespace MediaBrowser.Providers.Manager
refreshResult.AddStatus(ProviderRefreshStatus.Failure, ex.Message);
}
+ var metadataResult = new MetadataResult<TItemType>
+ {
+ Item = itemOfType
+ };
+
// Next run metadata providers
if (refreshOptions.MetadataRefreshMode != MetadataRefreshMode.None)
{
@@ -136,7 +143,7 @@ namespace MediaBrowser.Providers.Manager
{
var id = await CreateInitialLookupInfo(itemOfType, cancellationToken).ConfigureAwait(false);
- var result = await RefreshWithProviders(itemOfType, id, refreshOptions, providers, itemImageProvider, cancellationToken).ConfigureAwait(false);
+ var result = await RefreshWithProviders(metadataResult, id, refreshOptions, providers, itemImageProvider, cancellationToken).ConfigureAwait(false);
updateType = updateType | result.UpdateType;
refreshResult.AddStatus(result.Status, result.ErrorMessage);
@@ -174,7 +181,7 @@ namespace MediaBrowser.Providers.Manager
}
// Save to database
- await SaveItem(itemOfType, updateType, cancellationToken);
+ await SaveItem(metadataResult, updateType, cancellationToken).ConfigureAwait(false);
}
if (updateType > ItemUpdateType.None || refreshResult.IsDirty)
@@ -321,9 +328,14 @@ namespace MediaBrowser.Providers.Manager
return providers;
}
- protected Task SaveItem(TItemType item, ItemUpdateType reason, CancellationToken cancellationToken)
+ protected async Task SaveItem(MetadataResult<TItemType> result, ItemUpdateType reason, CancellationToken cancellationToken)
{
- return item.UpdateToRepository(reason, cancellationToken);
+ await result.Item.UpdateToRepository(reason, cancellationToken).ConfigureAwait(false);
+
+ if (result.Item.SupportsPeople)
+ {
+ await LibraryManager.UpdatePeople(result.Item as BaseItem, result.People);
+ }
}
public bool CanRefresh(IHasMetadata item)
@@ -331,7 +343,7 @@ namespace MediaBrowser.Providers.Manager
return item is TItemType;
}
- protected virtual async Task<RefreshResult> RefreshWithProviders(TItemType item,
+ protected virtual async Task<RefreshResult> RefreshWithProviders(MetadataResult<TItemType> metadata,
TIdType id,
MetadataRefreshOptions options,
List<IMetadataProvider> providers,
@@ -344,6 +356,8 @@ namespace MediaBrowser.Providers.Manager
Providers = providers.Select(i => i.GetType().FullName.GetMD5()).ToList()
};
+ var item = metadata.Item;
+
var customProviders = providers.OfType<ICustomMetadataProvider<TItemType>>().ToList();
var logName = item.LocationType == LocationType.Remote ? item.Name ?? item.Path : item.Path ?? item.Name;
@@ -352,11 +366,16 @@ namespace MediaBrowser.Providers.Manager
await RunCustomProvider(provider, item, logName, options, refreshResult, cancellationToken).ConfigureAwait(false);
}
- var temp = CreateNew();
- temp.Path = item.Path;
+ var temp = new MetadataResult<TItemType>
+ {
+ Item = CreateNew()
+ };
+ temp.Item.Path = item.Path;
var successfulProviderCount = 0;
var failedProviderCount = 0;
+ var userDataList = new List<UserItemData>();
+
// If replacing all metadata, run internet providers first
if (options.ReplaceAllMetadata)
{
@@ -371,7 +390,6 @@ namespace MediaBrowser.Providers.Manager
}
var hasLocalMetadata = false;
- var userDataList = new List<UserItemData>();
foreach (var provider in providers.OfType<ILocalMetadataProvider<TItemType>>().ToList())
{
@@ -393,7 +411,7 @@ namespace MediaBrowser.Providers.Manager
userDataList = localItem.UserDataLIst;
- MergeData(localItem.Item, temp, new List<MetadataFields>(), !options.ReplaceAllMetadata, true);
+ MergeData(localItem, temp, new List<MetadataFields>(), !options.ReplaceAllMetadata, true);
refreshResult.UpdateType = refreshResult.UpdateType | ItemUpdateType.MetadataImport;
// Only one local provider allowed per item
@@ -452,10 +470,10 @@ namespace MediaBrowser.Providers.Manager
if (!hasLocalMetadata)
{
// TODO: If the new metadata from above has some blank data, this can cause old data to get filled into those empty fields
- MergeData(item, temp, new List<MetadataFields>(), false, true);
+ MergeData(metadata, temp, new List<MetadataFields>(), false, true);
}
- MergeData(temp, item, item.LockedFields, true, true);
+ MergeData(temp, metadata, item.LockedFields, true, true);
}
}
@@ -526,7 +544,7 @@ namespace MediaBrowser.Providers.Manager
return new TItemType();
}
- private async Task<RefreshResult> ExecuteRemoteProviders(TItemType temp, string logName, TIdType id, IEnumerable<IRemoteMetadataProvider<TItemType, TIdType>> providers, CancellationToken cancellationToken)
+ private async Task<RefreshResult> ExecuteRemoteProviders(MetadataResult<TItemType> temp, string logName, TIdType id, IEnumerable<IRemoteMetadataProvider<TItemType, TIdType>> providers, CancellationToken cancellationToken)
{
var refreshResult = new RefreshResult();
@@ -537,7 +555,7 @@ namespace MediaBrowser.Providers.Manager
if (id != null)
{
- MergeNewData(temp, id);
+ MergeNewData(temp.Item, id);
}
try
@@ -548,7 +566,7 @@ namespace MediaBrowser.Providers.Manager
{
NormalizeRemoteResult(result.Item);
- MergeData(result.Item, temp, new List<MetadataFields>(), false, false);
+ MergeData(result, temp, new List<MetadataFields>(), false, false);
refreshResult.UpdateType = refreshResult.UpdateType | ItemUpdateType.MetadataDownload;
@@ -624,8 +642,8 @@ namespace MediaBrowser.Providers.Manager
}
}
- protected abstract void MergeData(TItemType source,
- TItemType target,
+ protected abstract void MergeData(MetadataResult<TItemType> source,
+ MetadataResult<TItemType> target,
List<MetadataFields> lockedFields,
bool replaceData,
bool mergeMetadataSettings);