mirror of
https://github.com/jellyfin/jellyfin.git
synced 2026-05-31 04:48:27 +01:00
Remove "download images in advance" option
This commit is contained in:
@@ -1,3 +1,5 @@
|
||||
#pragma warning disable CS1591
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
@@ -19,13 +21,7 @@ namespace MediaBrowser.Providers.Manager
|
||||
where TItemType : BaseItem, IHasLookupInfo<TIdType>, new()
|
||||
where TIdType : ItemLookupInfo, new()
|
||||
{
|
||||
protected readonly IServerConfigurationManager ServerConfigurationManager;
|
||||
protected readonly ILogger Logger;
|
||||
protected readonly IProviderManager ProviderManager;
|
||||
protected readonly IFileSystem FileSystem;
|
||||
protected readonly ILibraryManager LibraryManager;
|
||||
|
||||
protected MetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IFileSystem fileSystem, ILibraryManager libraryManager)
|
||||
protected MetadataService(IServerConfigurationManager serverConfigurationManager, ILogger<MetadataService<TItemType, TIdType>> logger, IProviderManager providerManager, IFileSystem fileSystem, ILibraryManager libraryManager)
|
||||
{
|
||||
ServerConfigurationManager = serverConfigurationManager;
|
||||
Logger = logger;
|
||||
@@ -34,6 +30,26 @@ namespace MediaBrowser.Providers.Manager
|
||||
LibraryManager = libraryManager;
|
||||
}
|
||||
|
||||
protected IServerConfigurationManager ServerConfigurationManager { get; }
|
||||
|
||||
protected ILogger<MetadataService<TItemType, TIdType>> Logger { get; }
|
||||
|
||||
protected IProviderManager ProviderManager { get; }
|
||||
|
||||
protected IFileSystem FileSystem { get; }
|
||||
|
||||
protected ILibraryManager LibraryManager { get; }
|
||||
|
||||
protected virtual bool EnableUpdatingPremiereDateFromChildren => false;
|
||||
|
||||
protected virtual bool EnableUpdatingGenresFromChildren => false;
|
||||
|
||||
protected virtual bool EnableUpdatingStudiosFromChildren => false;
|
||||
|
||||
protected virtual bool EnableUpdatingOfficialRatingFromChildren => false;
|
||||
|
||||
public virtual int Order => 0;
|
||||
|
||||
private FileSystemMetadata TryGetFile(string path, IDirectoryService directoryService)
|
||||
{
|
||||
try
|
||||
@@ -50,7 +66,6 @@ namespace MediaBrowser.Providers.Manager
|
||||
public async Task<ItemUpdateType> RefreshMetadata(BaseItem item, MetadataRefreshOptions refreshOptions, CancellationToken cancellationToken)
|
||||
{
|
||||
var itemOfType = (TItemType)item;
|
||||
var config = ProviderManager.GetMetadataOptions(item);
|
||||
|
||||
var updateType = ItemUpdateType.None;
|
||||
var requiresRefresh = false;
|
||||
@@ -84,7 +99,7 @@ namespace MediaBrowser.Providers.Manager
|
||||
// Always validate images and check for new locally stored ones.
|
||||
if (itemImageProvider.ValidateImages(item, allImageProviders.OfType<ILocalImageProvider>(), refreshOptions.DirectoryService))
|
||||
{
|
||||
updateType = updateType | ItemUpdateType.ImageUpdate;
|
||||
updateType |= ItemUpdateType.ImageUpdate;
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
@@ -100,7 +115,7 @@ namespace MediaBrowser.Providers.Manager
|
||||
|
||||
bool hasRefreshedMetadata = true;
|
||||
bool hasRefreshedImages = true;
|
||||
var isFirstRefresh = item.DateLastRefreshed == default(DateTime);
|
||||
var isFirstRefresh = item.DateLastRefreshed == default;
|
||||
|
||||
// Next run metadata providers
|
||||
if (refreshOptions.MetadataRefreshMode != MetadataRefreshMode.None)
|
||||
@@ -112,7 +127,7 @@ namespace MediaBrowser.Providers.Manager
|
||||
{
|
||||
if (item.BeforeMetadataRefresh(refreshOptions.ReplaceAllMetadata))
|
||||
{
|
||||
updateType = updateType | ItemUpdateType.MetadataImport;
|
||||
updateType |= ItemUpdateType.MetadataImport;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -125,12 +140,12 @@ namespace MediaBrowser.Providers.Manager
|
||||
ApplySearchResult(id, refreshOptions.SearchResult);
|
||||
}
|
||||
|
||||
//await FindIdentities(id, cancellationToken).ConfigureAwait(false);
|
||||
// await FindIdentities(id, cancellationToken).ConfigureAwait(false);
|
||||
id.IsAutomated = refreshOptions.IsAutomated;
|
||||
|
||||
var result = await RefreshWithProviders(metadataResult, id, refreshOptions, providers, itemImageProvider, cancellationToken).ConfigureAwait(false);
|
||||
|
||||
updateType = updateType | result.UpdateType;
|
||||
updateType |= result.UpdateType;
|
||||
if (result.Failures > 0)
|
||||
{
|
||||
hasRefreshedMetadata = false;
|
||||
@@ -145,9 +160,9 @@ namespace MediaBrowser.Providers.Manager
|
||||
|
||||
if (providers.Count > 0)
|
||||
{
|
||||
var result = await itemImageProvider.RefreshImages(itemOfType, libraryOptions, providers, refreshOptions, config, cancellationToken).ConfigureAwait(false);
|
||||
var result = await itemImageProvider.RefreshImages(itemOfType, libraryOptions, providers, refreshOptions, cancellationToken).ConfigureAwait(false);
|
||||
|
||||
updateType = updateType | result.UpdateType;
|
||||
updateType |= result.UpdateType;
|
||||
if (result.Failures > 0)
|
||||
{
|
||||
hasRefreshedImages = false;
|
||||
@@ -156,7 +171,7 @@ namespace MediaBrowser.Providers.Manager
|
||||
}
|
||||
|
||||
var beforeSaveResult = BeforeSave(itemOfType, isFirstRefresh || refreshOptions.ReplaceAllMetadata || refreshOptions.MetadataRefreshMode == MetadataRefreshMode.FullRefresh || requiresRefresh || refreshOptions.ForceSave, updateType);
|
||||
updateType = updateType | beforeSaveResult;
|
||||
updateType |= beforeSaveResult;
|
||||
|
||||
// Save if changes were made, or it's never been saved before
|
||||
if (refreshOptions.ForceSave || updateType > ItemUpdateType.None || isFirstRefresh || refreshOptions.ReplaceAllMetadata || requiresRefresh)
|
||||
@@ -173,7 +188,7 @@ namespace MediaBrowser.Providers.Manager
|
||||
// If any of these properties are set then make sure the updateType is not None, just to force everything to save
|
||||
if (refreshOptions.ForceSave || refreshOptions.ReplaceAllMetadata)
|
||||
{
|
||||
updateType = updateType | ItemUpdateType.MetadataDownload;
|
||||
updateType |= ItemUpdateType.MetadataDownload;
|
||||
}
|
||||
|
||||
if (hasRefreshedMetadata && hasRefreshedImages)
|
||||
@@ -182,11 +197,11 @@ namespace MediaBrowser.Providers.Manager
|
||||
}
|
||||
else
|
||||
{
|
||||
item.DateLastRefreshed = default(DateTime);
|
||||
item.DateLastRefreshed = default;
|
||||
}
|
||||
|
||||
// Save to database
|
||||
SaveItem(metadataResult, libraryOptions, updateType, cancellationToken);
|
||||
await SaveItemAsync(metadataResult, libraryOptions, updateType, cancellationToken).ConfigureAwait(false);
|
||||
}
|
||||
|
||||
await AfterMetadataRefresh(itemOfType, refreshOptions, cancellationToken).ConfigureAwait(false);
|
||||
@@ -201,25 +216,26 @@ namespace MediaBrowser.Providers.Manager
|
||||
lookupInfo.Year = result.ProductionYear;
|
||||
}
|
||||
|
||||
protected void SaveItem(MetadataResult<TItemType> result, LibraryOptions libraryOptions, ItemUpdateType reason, CancellationToken cancellationToken)
|
||||
protected async Task SaveItemAsync(MetadataResult<TItemType> result, LibraryOptions libraryOptions, ItemUpdateType reason, CancellationToken cancellationToken)
|
||||
{
|
||||
if (result.Item.SupportsPeople && result.People != null)
|
||||
{
|
||||
var baseItem = result.Item;
|
||||
|
||||
LibraryManager.UpdatePeople(baseItem, result.People);
|
||||
SavePeopleMetadata(result.People, libraryOptions, cancellationToken);
|
||||
await SavePeopleMetadataAsync(result.People, libraryOptions, cancellationToken).ConfigureAwait(false);
|
||||
}
|
||||
result.Item.UpdateToRepository(reason, cancellationToken);
|
||||
|
||||
await result.Item.UpdateToRepositoryAsync(reason, cancellationToken).ConfigureAwait(false);
|
||||
}
|
||||
|
||||
private void SavePeopleMetadata(List<PersonInfo> people, LibraryOptions libraryOptions, CancellationToken cancellationToken)
|
||||
private async Task SavePeopleMetadataAsync(List<PersonInfo> people, LibraryOptions libraryOptions, CancellationToken cancellationToken)
|
||||
{
|
||||
foreach (var person in people)
|
||||
{
|
||||
cancellationToken.ThrowIfCancellationRequested();
|
||||
|
||||
if (person.ProviderIds.Any() || !string.IsNullOrWhiteSpace(person.ImageUrl))
|
||||
if (person.ProviderIds.Count > 0 || !string.IsNullOrWhiteSpace(person.ImageUrl))
|
||||
{
|
||||
var updateType = ItemUpdateType.MetadataDownload;
|
||||
|
||||
@@ -236,21 +252,21 @@ namespace MediaBrowser.Providers.Manager
|
||||
|
||||
if (!string.IsNullOrWhiteSpace(person.ImageUrl) && !personEntity.HasImage(ImageType.Primary))
|
||||
{
|
||||
AddPersonImage(personEntity, libraryOptions, person.ImageUrl, cancellationToken);
|
||||
await AddPersonImageAsync(personEntity, libraryOptions, person.ImageUrl, cancellationToken).ConfigureAwait(false);
|
||||
|
||||
saveEntity = true;
|
||||
updateType = updateType | ItemUpdateType.ImageUpdate;
|
||||
updateType |= ItemUpdateType.ImageUpdate;
|
||||
}
|
||||
|
||||
if (saveEntity)
|
||||
{
|
||||
personEntity.UpdateToRepository(updateType, cancellationToken);
|
||||
await personEntity.UpdateToRepositoryAsync(updateType, cancellationToken).ConfigureAwait(false);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void AddPersonImage(Person personEntity, LibraryOptions libraryOptions, string imageUrl, CancellationToken cancellationToken)
|
||||
private async Task AddPersonImageAsync(Person personEntity, LibraryOptions libraryOptions, string imageUrl, CancellationToken cancellationToken)
|
||||
{
|
||||
try
|
||||
{
|
||||
@@ -262,11 +278,13 @@ namespace MediaBrowser.Providers.Manager
|
||||
Logger.LogError(ex, "Error in AddPersonImage");
|
||||
}
|
||||
|
||||
personEntity.SetImage(new ItemImageInfo
|
||||
{
|
||||
Path = imageUrl,
|
||||
Type = ImageType.Primary
|
||||
}, 0);
|
||||
personEntity.SetImage(
|
||||
new ItemImageInfo
|
||||
{
|
||||
Path = imageUrl,
|
||||
Type = ImageType.Primary
|
||||
},
|
||||
0);
|
||||
}
|
||||
|
||||
protected virtual Task AfterMetadataRefresh(TItemType item, MetadataRefreshOptions refreshOptions, CancellationToken cancellationToken)
|
||||
@@ -276,7 +294,7 @@ namespace MediaBrowser.Providers.Manager
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Befores the save.
|
||||
/// Before the save.
|
||||
/// </summary>
|
||||
/// <param name="item">The item.</param>
|
||||
/// <param name="isFullRefresh">if set to <c>true</c> [is full refresh].</param>
|
||||
@@ -321,6 +339,7 @@ namespace MediaBrowser.Providers.Manager
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
var folder = item as Folder;
|
||||
if (folder != null)
|
||||
{
|
||||
@@ -333,13 +352,12 @@ namespace MediaBrowser.Providers.Manager
|
||||
|
||||
protected virtual IList<BaseItem> GetChildrenForMetadataUpdates(TItemType item)
|
||||
{
|
||||
var folder = item as Folder;
|
||||
if (folder != null)
|
||||
if (item is Folder folder)
|
||||
{
|
||||
return folder.GetRecursiveChildren();
|
||||
}
|
||||
|
||||
return new List<BaseItem>();
|
||||
return Array.Empty<BaseItem>();
|
||||
}
|
||||
|
||||
protected virtual ItemUpdateType UpdateMetadataFromChildren(TItemType item, IList<BaseItem> children, bool isFullRefresh, ItemUpdateType currentUpdateType)
|
||||
@@ -386,7 +404,7 @@ namespace MediaBrowser.Providers.Manager
|
||||
{
|
||||
if (!child.IsFolder)
|
||||
{
|
||||
ticks += (child.RunTimeTicks ?? 0);
|
||||
ticks += child.RunTimeTicks ?? 0;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -419,6 +437,7 @@ namespace MediaBrowser.Providers.Manager
|
||||
{
|
||||
dateLastMediaAdded = childDateCreated;
|
||||
}
|
||||
|
||||
any = true;
|
||||
}
|
||||
}
|
||||
@@ -433,14 +452,6 @@ namespace MediaBrowser.Providers.Manager
|
||||
return updateType;
|
||||
}
|
||||
|
||||
protected virtual bool EnableUpdatingPremiereDateFromChildren => false;
|
||||
|
||||
protected virtual bool EnableUpdatingGenresFromChildren => false;
|
||||
|
||||
protected virtual bool EnableUpdatingStudiosFromChildren => false;
|
||||
|
||||
protected virtual bool EnableUpdatingOfficialRatingFromChildren => false;
|
||||
|
||||
private ItemUpdateType UpdatePremiereDate(TItemType item, IList<BaseItem> children)
|
||||
{
|
||||
var updateType = ItemUpdateType.None;
|
||||
@@ -483,7 +494,7 @@ namespace MediaBrowser.Providers.Manager
|
||||
{
|
||||
var updateType = ItemUpdateType.None;
|
||||
|
||||
if (!item.LockedFields.Contains(MetadataFields.Genres))
|
||||
if (!item.LockedFields.Contains(MetadataField.Genres))
|
||||
{
|
||||
var currentList = item.Genres;
|
||||
|
||||
@@ -504,7 +515,7 @@ namespace MediaBrowser.Providers.Manager
|
||||
{
|
||||
var updateType = ItemUpdateType.None;
|
||||
|
||||
if (!item.LockedFields.Contains(MetadataFields.Studios))
|
||||
if (!item.LockedFields.Contains(MetadataField.Studios))
|
||||
{
|
||||
var currentList = item.Studios;
|
||||
|
||||
@@ -525,7 +536,7 @@ namespace MediaBrowser.Providers.Manager
|
||||
{
|
||||
var updateType = ItemUpdateType.None;
|
||||
|
||||
if (!item.LockedFields.Contains(MetadataFields.OfficialRating))
|
||||
if (!item.LockedFields.Contains(MetadataField.OfficialRating))
|
||||
{
|
||||
if (item.UpdateRatingToItems(children))
|
||||
{
|
||||
@@ -649,7 +660,8 @@ namespace MediaBrowser.Providers.Manager
|
||||
return type == typeof(TItemType);
|
||||
}
|
||||
|
||||
protected virtual async Task<RefreshResult> RefreshWithProviders(MetadataResult<TItemType> metadata,
|
||||
protected virtual async Task<RefreshResult> RefreshWithProviders(
|
||||
MetadataResult<TItemType> metadata,
|
||||
TIdType id,
|
||||
MetadataRefreshOptions options,
|
||||
List<IMetadataProvider> providers,
|
||||
@@ -715,7 +727,7 @@ namespace MediaBrowser.Providers.Manager
|
||||
userDataList.AddRange(localItem.UserDataList);
|
||||
}
|
||||
|
||||
MergeData(localItem, temp, new MetadataFields[] { }, !options.ReplaceAllMetadata, true);
|
||||
MergeData(localItem, temp, Array.Empty<MetadataField>(), !options.ReplaceAllMetadata, true);
|
||||
refreshResult.UpdateType = refreshResult.UpdateType | ItemUpdateType.MetadataImport;
|
||||
|
||||
// Only one local provider allowed per item
|
||||
@@ -723,6 +735,7 @@ namespace MediaBrowser.Providers.Manager
|
||||
{
|
||||
hasLocalMetadata = true;
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -763,20 +776,20 @@ namespace MediaBrowser.Providers.Manager
|
||||
else
|
||||
{
|
||||
// TODO: If the new metadata from above has some blank data, this can cause old data to get filled into those empty fields
|
||||
MergeData(metadata, temp, new MetadataFields[] { }, false, false);
|
||||
MergeData(metadata, temp, Array.Empty<MetadataField>(), false, false);
|
||||
MergeData(temp, metadata, item.LockedFields, true, false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//var isUnidentified = failedProviderCount > 0 && successfulProviderCount == 0;
|
||||
// var isUnidentified = failedProviderCount > 0 && successfulProviderCount == 0;
|
||||
|
||||
foreach (var provider in customProviders.Where(i => !(i is IPreRefreshProvider)))
|
||||
{
|
||||
await RunCustomProvider(provider, item, logName, options, refreshResult, cancellationToken).ConfigureAwait(false);
|
||||
}
|
||||
|
||||
//ImportUserData(item, userDataList, cancellationToken);
|
||||
// ImportUserData(item, userDataList, cancellationToken);
|
||||
|
||||
return refreshResult;
|
||||
}
|
||||
@@ -797,7 +810,7 @@ namespace MediaBrowser.Providers.Manager
|
||||
|
||||
try
|
||||
{
|
||||
refreshResult.UpdateType = refreshResult.UpdateType | await provider.FetchAsync(item, options, cancellationToken).ConfigureAwait(false);
|
||||
refreshResult.UpdateType |= await provider.FetchAsync(item, options, cancellationToken).ConfigureAwait(false);
|
||||
}
|
||||
catch (OperationCanceledException)
|
||||
{
|
||||
@@ -840,7 +853,7 @@ namespace MediaBrowser.Providers.Manager
|
||||
{
|
||||
result.Provider = provider.Name;
|
||||
|
||||
MergeData(result, temp, new MetadataFields[] { }, false, false);
|
||||
MergeData(result, temp, Array.Empty<MetadataField>(), false, false);
|
||||
MergeNewData(temp.Item, id);
|
||||
|
||||
refreshResult.UpdateType = refreshResult.UpdateType | ItemUpdateType.MetadataDownload;
|
||||
@@ -865,15 +878,6 @@ namespace MediaBrowser.Providers.Manager
|
||||
return refreshResult;
|
||||
}
|
||||
|
||||
private string NormalizeLanguage(string language)
|
||||
{
|
||||
if (string.IsNullOrWhiteSpace(language))
|
||||
{
|
||||
return "en";
|
||||
}
|
||||
return language;
|
||||
}
|
||||
|
||||
private void MergeNewData(TItemType source, TIdType lookupInfo)
|
||||
{
|
||||
// Copy new provider id's that may have been obtained
|
||||
@@ -889,24 +893,23 @@ namespace MediaBrowser.Providers.Manager
|
||||
}
|
||||
}
|
||||
|
||||
protected abstract void MergeData(MetadataResult<TItemType> source,
|
||||
protected abstract void MergeData(
|
||||
MetadataResult<TItemType> source,
|
||||
MetadataResult<TItemType> target,
|
||||
MetadataFields[] lockedFields,
|
||||
MetadataField[] lockedFields,
|
||||
bool replaceData,
|
||||
bool mergeMetadataSettings);
|
||||
|
||||
public virtual int Order => 0;
|
||||
|
||||
private bool HasChanged(BaseItem item, IHasItemChangeMonitor changeMonitor, IDirectoryService directoryService)
|
||||
{
|
||||
try
|
||||
{
|
||||
var hasChanged = changeMonitor.HasChanged(item, directoryService);
|
||||
|
||||
//if (hasChanged)
|
||||
//{
|
||||
// logger.LogDebug("{0} reports change to {1}", changeMonitor.GetType().Name, item.Path ?? item.Name);
|
||||
//}
|
||||
if (hasChanged)
|
||||
{
|
||||
Logger.LogDebug("{0} reports change to {1}", changeMonitor.GetType().Name, item.Path ?? item.Name);
|
||||
}
|
||||
|
||||
return hasChanged;
|
||||
}
|
||||
@@ -917,11 +920,4 @@ namespace MediaBrowser.Providers.Manager
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public class RefreshResult
|
||||
{
|
||||
public ItemUpdateType UpdateType { get; set; }
|
||||
public string ErrorMessage { get; set; }
|
||||
public int Failures { get; set; }
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user