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