|
@@ -14,6 +14,7 @@ using MediaBrowser.Controller.Entities;
|
|
|
using MediaBrowser.Controller.Entities.Audio;
|
|
|
using MediaBrowser.Controller.IO;
|
|
|
using MediaBrowser.Controller.Library;
|
|
|
+using MediaBrowser.Controller.Persistence;
|
|
|
using MediaBrowser.Controller.Providers;
|
|
|
using MediaBrowser.Model.Configuration;
|
|
|
using MediaBrowser.Model.Entities;
|
|
@@ -33,7 +34,8 @@ namespace MediaBrowser.Providers.Manager
|
|
|
IProviderManager providerManager,
|
|
|
IFileSystem fileSystem,
|
|
|
ILibraryManager libraryManager,
|
|
|
- IExternalDataManager externalDataManager)
|
|
|
+ IExternalDataManager externalDataManager,
|
|
|
+ IItemRepository itemRepository)
|
|
|
{
|
|
|
ServerConfigurationManager = serverConfigurationManager;
|
|
|
Logger = logger;
|
|
@@ -41,6 +43,7 @@ namespace MediaBrowser.Providers.Manager
|
|
|
FileSystem = fileSystem;
|
|
|
LibraryManager = libraryManager;
|
|
|
ExternalDataManager = externalDataManager;
|
|
|
+ ItemRepository = itemRepository;
|
|
|
ImageProvider = new ItemImageProvider(Logger, ProviderManager, FileSystem);
|
|
|
}
|
|
|
|
|
@@ -58,6 +61,8 @@ namespace MediaBrowser.Providers.Manager
|
|
|
|
|
|
protected IExternalDataManager ExternalDataManager { get; }
|
|
|
|
|
|
+ protected IItemRepository ItemRepository { get; }
|
|
|
+
|
|
|
protected virtual bool EnableUpdatingPremiereDateFromChildren => false;
|
|
|
|
|
|
protected virtual bool EnableUpdatingGenresFromChildren => false;
|
|
@@ -85,6 +90,7 @@ namespace MediaBrowser.Providers.Manager
|
|
|
{
|
|
|
var itemOfType = (TItemType)item;
|
|
|
var updateType = ItemUpdateType.None;
|
|
|
+
|
|
|
var libraryOptions = LibraryManager.GetLibraryOptions(item);
|
|
|
var isFirstRefresh = item.DateLastRefreshed.Date == DateTime.MinValue.Date;
|
|
|
var hasRefreshedMetadata = true;
|
|
@@ -141,7 +147,8 @@ namespace MediaBrowser.Providers.Manager
|
|
|
Item = itemOfType
|
|
|
};
|
|
|
|
|
|
- var beforeSaveResult = BeforeSave(itemOfType, isFirstRefresh || refreshOptions.ReplaceAllMetadata || refreshOptions.MetadataRefreshMode == MetadataRefreshMode.FullRefresh || requiresRefresh || refreshOptions.ForceSave, updateType);
|
|
|
+ var beforeSaveResult = await BeforeSave(itemOfType, isFirstRefresh || refreshOptions.ReplaceAllMetadata || refreshOptions.MetadataRefreshMode == MetadataRefreshMode.FullRefresh || requiresRefresh || refreshOptions.ForceSave, updateType)
|
|
|
+ .ConfigureAwait(false);
|
|
|
updateType |= beforeSaveResult;
|
|
|
|
|
|
updateType = await SaveInternal(item, refreshOptions, updateType, isFirstRefresh, requiresRefresh, metadataResult, cancellationToken).ConfigureAwait(false);
|
|
@@ -284,12 +291,20 @@ namespace MediaBrowser.Providers.Manager
|
|
|
/// <param name="isFullRefresh">if set to <c>true</c> [is full refresh].</param>
|
|
|
/// <param name="currentUpdateType">Type of the current update.</param>
|
|
|
/// <returns>ItemUpdateType.</returns>
|
|
|
- private ItemUpdateType BeforeSave(TItemType item, bool isFullRefresh, ItemUpdateType currentUpdateType)
|
|
|
+ private async Task<ItemUpdateType> BeforeSave(TItemType item, bool isFullRefresh, ItemUpdateType currentUpdateType)
|
|
|
{
|
|
|
var updateType = BeforeSaveInternal(item, isFullRefresh, currentUpdateType);
|
|
|
|
|
|
updateType |= item.OnMetadataChanged();
|
|
|
|
|
|
+ if (updateType == ItemUpdateType.None)
|
|
|
+ {
|
|
|
+ if (!await ItemRepository.ItemExistsAsync(item.Id).ConfigureAwait(false))
|
|
|
+ {
|
|
|
+ return ItemUpdateType.MetadataImport;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
return updateType;
|
|
|
}
|
|
|
|