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.cs78
1 files changed, 64 insertions, 14 deletions
diff --git a/MediaBrowser.Providers/Manager/MetadataService.cs b/MediaBrowser.Providers/Manager/MetadataService.cs
index eeec4ea56..a0c6bd889 100644
--- a/MediaBrowser.Providers/Manager/MetadataService.cs
+++ b/MediaBrowser.Providers/Manager/MetadataService.cs
@@ -295,22 +295,22 @@ namespace MediaBrowser.Providers.Manager
return true;
}
- if (item is BoxSet || item is IItemByName || item is Playlist)
+ if (!(item is Audio) && !(item is Video))
{
return true;
}
- if (item.SourceType != SourceType.Library)
+ if (item is IItemByName)
{
return true;
}
- if (item is ICollectionFolder)
+ if (item.SourceType != SourceType.Library)
{
return true;
}
- if (!(item is Audio) && !(item is Video))
+ if (item is MusicVideo)
{
return true;
}
@@ -395,7 +395,6 @@ namespace MediaBrowser.Providers.Manager
return _cachedTask;
}
- private readonly Task<ItemUpdateType> _cachedResult = Task.FromResult(ItemUpdateType.None);
/// <summary>
/// Befores the save.
/// </summary>
@@ -403,9 +402,60 @@ 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>
- protected virtual Task<ItemUpdateType> BeforeSave(TItemType item, bool isFullRefresh, ItemUpdateType currentUpdateType)
+ protected virtual async Task<ItemUpdateType> BeforeSave(TItemType item, bool isFullRefresh, ItemUpdateType currentUpdateType)
+ {
+ var updateType = ItemUpdateType.None;
+
+ updateType |= SaveCumulativeRunTimeTicks(item, isFullRefresh, currentUpdateType);
+ updateType |= SaveDateLastMediaAdded(item, isFullRefresh, currentUpdateType);
+
+ return updateType;
+ }
+
+ private ItemUpdateType SaveCumulativeRunTimeTicks(TItemType item, bool isFullRefresh, ItemUpdateType currentUpdateType)
+ {
+ var updateType = ItemUpdateType.None;
+
+ if (isFullRefresh || currentUpdateType > ItemUpdateType.None)
+ {
+ var folder = item as Folder;
+ if (folder != null && folder.SupportsCumulativeRunTimeTicks)
+ {
+ var items = folder.GetRecursiveChildren(i => !i.IsFolder).ToList();
+ var ticks = items.Select(i => i.RunTimeTicks ?? 0).Sum();
+
+ if (!folder.RunTimeTicks.HasValue || folder.RunTimeTicks.Value != ticks)
+ {
+ folder.RunTimeTicks = ticks;
+ updateType = ItemUpdateType.MetadataEdit;
+ }
+ }
+ }
+
+ return updateType;
+ }
+
+ private ItemUpdateType SaveDateLastMediaAdded(TItemType item, bool isFullRefresh, ItemUpdateType currentUpdateType)
{
- return _cachedResult;
+ var updateType = ItemUpdateType.None;
+
+ if (isFullRefresh || currentUpdateType > ItemUpdateType.None)
+ {
+ var folder = item as Folder;
+ if (folder != null && folder.SupportsDateLastMediaAdded)
+ {
+ var items = folder.GetRecursiveChildren(i => !i.IsFolder).Select(i => i.DateCreated).ToList();
+ var date = items.Count == 0 ? (DateTime?)null : items.Max();
+
+ if ((!folder.DateLastMediaAdded.HasValue && date.HasValue) || folder.DateLastMediaAdded != date)
+ {
+ folder.DateLastMediaAdded = date;
+ updateType = ItemUpdateType.MetadataEdit;
+ }
+ }
+ }
+
+ return updateType;
}
/// <summary>
@@ -425,7 +475,7 @@ namespace MediaBrowser.Providers.Manager
: status.DateLastMetadataRefresh ?? default(DateTime);
// Run all if either of these flags are true
- var runAllProviders = options.ReplaceAllMetadata || options.MetadataRefreshMode == MetadataRefreshMode.FullRefresh || dateLastRefresh == default(DateTime);
+ var runAllProviders = options.ReplaceAllMetadata || options.MetadataRefreshMode == MetadataRefreshMode.FullRefresh || dateLastRefresh == default(DateTime) || item.RequiresRefresh();
if (!runAllProviders)
{
@@ -435,18 +485,18 @@ namespace MediaBrowser.Providers.Manager
var providersWithChanges = providers
.Where(i =>
{
- var hasChangeMonitor = i as IHasChangeMonitor;
- if (hasChangeMonitor != null)
- {
- return HasChanged(item, hasChangeMonitor, currentItem.DateLastSaved, options.DirectoryService);
- }
-
var hasFileChangeMonitor = i as IHasItemChangeMonitor;
if (hasFileChangeMonitor != null)
{
return HasChanged(item, hasFileChangeMonitor, options.DirectoryService);
}
+ var hasChangeMonitor = i as IHasChangeMonitor;
+ if (hasChangeMonitor != null)
+ {
+ return HasChanged(item, hasChangeMonitor, currentItem.DateLastSaved, options.DirectoryService);
+ }
+
return false;
})
.ToList();