mirror of
https://github.com/jellyfin/jellyfin.git
synced 2026-06-13 11:10:24 +01:00
fixes #916 - Support reading playstate data from nfo's
This commit is contained in:
@@ -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)
|
||||
{
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user