aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Providers/Manager/MetadataService.cs
diff options
context:
space:
mode:
Diffstat (limited to 'MediaBrowser.Providers/Manager/MetadataService.cs')
-rw-r--r--MediaBrowser.Providers/Manager/MetadataService.cs76
1 files changed, 64 insertions, 12 deletions
diff --git a/MediaBrowser.Providers/Manager/MetadataService.cs b/MediaBrowser.Providers/Manager/MetadataService.cs
index 8f7c93f32..47783ebc6 100644
--- a/MediaBrowser.Providers/Manager/MetadataService.cs
+++ b/MediaBrowser.Providers/Manager/MetadataService.cs
@@ -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)
//{