mirror of
https://github.com/jellyfin/jellyfin.git
synced 2026-06-03 06:18:28 +01:00
update metadata refresh
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
using MediaBrowser.Common.Extensions;
|
||||
using MediaBrowser.Common.IO;
|
||||
using MediaBrowser.Controller.Configuration;
|
||||
using MediaBrowser.Controller.Entities;
|
||||
using MediaBrowser.Controller.Library;
|
||||
@@ -11,8 +12,11 @@ using System.Linq;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using CommonIO;
|
||||
using MediaBrowser.Controller.Channels;
|
||||
using MediaBrowser.Controller.Entities.Audio;
|
||||
using MediaBrowser.Controller.Entities.Movies;
|
||||
using MediaBrowser.Controller.LiveTv;
|
||||
using MediaBrowser.Controller.Playlists;
|
||||
using MediaBrowser.Model.Providers;
|
||||
|
||||
namespace MediaBrowser.Providers.Manager
|
||||
@@ -68,6 +72,11 @@ namespace MediaBrowser.Providers.Manager
|
||||
|
||||
result.ItemDateModified = item.DateModified;
|
||||
|
||||
if (EnableDateLastRefreshed(item))
|
||||
{
|
||||
return Task.FromResult(true);
|
||||
}
|
||||
|
||||
return ProviderRepo.SaveMetadataStatus(result, CancellationToken.None);
|
||||
}
|
||||
|
||||
@@ -83,7 +92,22 @@ namespace MediaBrowser.Providers.Manager
|
||||
return new MetadataStatus { ItemId = item.Id };
|
||||
}
|
||||
|
||||
return ProviderRepo.GetMetadataStatus(item.Id) ?? new MetadataStatus { ItemId = item.Id };
|
||||
if (EnableDateLastRefreshed(item) && item.DateModifiedDuringLastRefresh.HasValue)
|
||||
{
|
||||
return new MetadataStatus
|
||||
{
|
||||
ItemId = item.Id,
|
||||
DateLastImagesRefresh = item.DateLastRefreshed,
|
||||
DateLastMetadataRefresh = item.DateLastRefreshed,
|
||||
ItemDateModified = item.DateModifiedDuringLastRefresh.Value
|
||||
};
|
||||
}
|
||||
|
||||
var result = ProviderRepo.GetMetadataStatus(item.Id) ?? new MetadataStatus { ItemId = item.Id };
|
||||
|
||||
item.DateModifiedDuringLastRefresh = result.ItemDateModified;
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
public async Task<ItemUpdateType> RefreshMetadata(IHasMetadata item, MetadataRefreshOptions refreshOptions, CancellationToken cancellationToken)
|
||||
@@ -119,13 +143,20 @@ namespace MediaBrowser.Providers.Manager
|
||||
Item = itemOfType
|
||||
};
|
||||
|
||||
bool hasRefreshedMetadata = false;
|
||||
bool hasRefreshedImages = false;
|
||||
|
||||
// Next run metadata providers
|
||||
if (refreshOptions.MetadataRefreshMode != MetadataRefreshMode.None)
|
||||
{
|
||||
var providers = GetProviders(item, refreshResult, refreshOptions)
|
||||
.ToList();
|
||||
|
||||
if (providers.Count > 0 || !refreshResult.DateLastMetadataRefresh.HasValue)
|
||||
var dateLastRefresh = EnableDateLastRefreshed(item)
|
||||
? item.DateLastRefreshed
|
||||
: refreshResult.DateLastMetadataRefresh ?? default(DateTime);
|
||||
|
||||
if (providers.Count > 0 || dateLastRefresh == default(DateTime))
|
||||
{
|
||||
if (item.BeforeMetadataRefresh())
|
||||
{
|
||||
@@ -151,6 +182,7 @@ namespace MediaBrowser.Providers.Manager
|
||||
if (result.Failures == 0)
|
||||
{
|
||||
refreshResult.SetDateLastMetadataRefresh(DateTime.UtcNow);
|
||||
hasRefreshedMetadata = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -172,6 +204,7 @@ namespace MediaBrowser.Providers.Manager
|
||||
if (result.Failures == 0)
|
||||
{
|
||||
refreshResult.SetDateLastImagesRefresh(DateTime.UtcNow);
|
||||
hasRefreshedImages = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -194,9 +227,15 @@ namespace MediaBrowser.Providers.Manager
|
||||
updateType = updateType | ItemUpdateType.MetadataDownload;
|
||||
}
|
||||
|
||||
if (refreshOptions.MetadataRefreshMode >= MetadataRefreshMode.Default && refreshOptions.ImageRefreshMode >= ImageRefreshMode.Default)
|
||||
if (hasRefreshedMetadata && hasRefreshedImages)
|
||||
{
|
||||
item.DateLastRefreshed = DateTime.UtcNow;
|
||||
item.DateModifiedDuringLastRefresh = item.DateModified;
|
||||
}
|
||||
else
|
||||
{
|
||||
item.DateLastRefreshed = default(DateTime);
|
||||
item.DateModifiedDuringLastRefresh = null;
|
||||
}
|
||||
|
||||
// Save to database
|
||||
@@ -254,7 +293,12 @@ namespace MediaBrowser.Providers.Manager
|
||||
return true;
|
||||
}
|
||||
|
||||
if (item is BoxSet || (item is IItemByName && !(item is MusicArtist)))
|
||||
if (item is BoxSet || item is IItemByName || item is Playlist)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
if (item.SourceType != SourceType.Library)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
@@ -364,8 +408,12 @@ namespace MediaBrowser.Providers.Manager
|
||||
// Get providers to refresh
|
||||
var providers = ((ProviderManager)ProviderManager).GetMetadataProviders<TItemType>(item).ToList();
|
||||
|
||||
var dateLastRefresh = EnableDateLastRefreshed(item)
|
||||
? item.DateLastRefreshed
|
||||
: status.DateLastMetadataRefresh ?? default(DateTime);
|
||||
|
||||
// Run all if either of these flags are true
|
||||
var runAllProviders = options.ReplaceAllMetadata || options.MetadataRefreshMode == MetadataRefreshMode.FullRefresh || !status.DateLastMetadataRefresh.HasValue;
|
||||
var runAllProviders = options.ReplaceAllMetadata || options.MetadataRefreshMode == MetadataRefreshMode.FullRefresh || dateLastRefresh == default(DateTime);
|
||||
|
||||
if (!runAllProviders)
|
||||
{
|
||||
@@ -384,7 +432,7 @@ namespace MediaBrowser.Providers.Manager
|
||||
var hasFileChangeMonitor = i as IHasItemChangeMonitor;
|
||||
if (hasFileChangeMonitor != null)
|
||||
{
|
||||
return HasChanged(item, hasFileChangeMonitor, status, options.DirectoryService);
|
||||
return HasChanged(item, hasFileChangeMonitor, options.DirectoryService);
|
||||
}
|
||||
|
||||
return false;
|
||||
@@ -429,8 +477,12 @@ namespace MediaBrowser.Providers.Manager
|
||||
// Get providers to refresh
|
||||
var providers = allImageProviders.Where(i => !(i is ILocalImageProvider)).ToList();
|
||||
|
||||
var dateLastImageRefresh = EnableDateLastRefreshed(item)
|
||||
? item.DateLastRefreshed
|
||||
: status.DateLastImagesRefresh ?? default(DateTime);
|
||||
|
||||
// Run all if either of these flags are true
|
||||
var runAllProviders = options.ImageRefreshMode == ImageRefreshMode.FullRefresh || !status.DateLastImagesRefresh.HasValue;
|
||||
var runAllProviders = options.ImageRefreshMode == ImageRefreshMode.FullRefresh || dateLastImageRefresh == default(DateTime);
|
||||
|
||||
if (!runAllProviders)
|
||||
{
|
||||
@@ -440,13 +492,13 @@ namespace MediaBrowser.Providers.Manager
|
||||
var hasChangeMonitor = i as IHasChangeMonitor;
|
||||
if (hasChangeMonitor != null)
|
||||
{
|
||||
return HasChanged(item, hasChangeMonitor, status.DateLastImagesRefresh.Value, options.DirectoryService);
|
||||
return HasChanged(item, hasChangeMonitor, dateLastImageRefresh, options.DirectoryService);
|
||||
}
|
||||
|
||||
var hasFileChangeMonitor = i as IHasItemChangeMonitor;
|
||||
if (hasFileChangeMonitor != null)
|
||||
{
|
||||
return HasChanged(item, hasFileChangeMonitor, status, options.DirectoryService);
|
||||
return HasChanged(item, hasFileChangeMonitor, options.DirectoryService);
|
||||
}
|
||||
|
||||
return false;
|
||||
@@ -558,7 +610,7 @@ namespace MediaBrowser.Providers.Manager
|
||||
if (options.MetadataRefreshMode != MetadataRefreshMode.FullRefresh)
|
||||
{
|
||||
// If the local provider fails don't continue with remote providers because the user's saved metadata could be lost
|
||||
return refreshResult;
|
||||
//return refreshResult;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -738,11 +790,11 @@ namespace MediaBrowser.Providers.Manager
|
||||
}
|
||||
}
|
||||
|
||||
private bool HasChanged(IHasMetadata item, IHasItemChangeMonitor changeMonitor, MetadataStatus status, IDirectoryService directoryService)
|
||||
private bool HasChanged(IHasMetadata item, IHasItemChangeMonitor changeMonitor, IDirectoryService directoryService)
|
||||
{
|
||||
try
|
||||
{
|
||||
var hasChanged = changeMonitor.HasChanged(item, status, directoryService);
|
||||
var hasChanged = changeMonitor.HasChanged(item, directoryService);
|
||||
|
||||
//if (hasChanged)
|
||||
//{
|
||||
|
||||
Reference in New Issue
Block a user