update metadata refresh

This commit is contained in:
Luke Pulverenti
2016-04-08 14:32:38 -04:00
parent 3889bc0a11
commit e31aec4bc5
20 changed files with 115 additions and 72 deletions

View File

@@ -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)
//{