aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Providers/Manager
diff options
context:
space:
mode:
Diffstat (limited to 'MediaBrowser.Providers/Manager')
-rw-r--r--MediaBrowser.Providers/Manager/ItemImageProvider.cs24
-rw-r--r--MediaBrowser.Providers/Manager/MetadataService.cs69
-rw-r--r--MediaBrowser.Providers/Manager/ProviderManager.cs50
-rw-r--r--MediaBrowser.Providers/Manager/ProviderUtils.cs2
4 files changed, 89 insertions, 56 deletions
diff --git a/MediaBrowser.Providers/Manager/ItemImageProvider.cs b/MediaBrowser.Providers/Manager/ItemImageProvider.cs
index 00fd54271..4419b48cb 100644
--- a/MediaBrowser.Providers/Manager/ItemImageProvider.cs
+++ b/MediaBrowser.Providers/Manager/ItemImageProvider.cs
@@ -517,21 +517,11 @@ namespace MediaBrowser.Providers.Manager
return true;
}
- if (libraryOptions.DownloadImagesInAdvance)
- {
- return false;
- }
-
if (item.LocationType == LocationType.Remote || item.LocationType == LocationType.Virtual)
{
return true;
}
- if (!item.IsSaveLocalMetadataEnabled())
- {
- return true;
- }
-
if (item is IItemByName && !(item is MusicArtist))
{
var hasDualAccess = item as IHasDualAccess;
@@ -541,13 +531,17 @@ namespace MediaBrowser.Providers.Manager
}
}
- switch (type)
+ if (libraryOptions.DownloadImagesInAdvance)
{
- case ImageType.Primary:
- return true;
- default:
- return true;
+ return false;
}
+
+ //if (!item.IsSaveLocalMetadataEnabled())
+ //{
+ // return true;
+ //}
+
+ return true;
}
private void SaveImageStub(IHasMetadata item, ImageType imageType, IEnumerable<string> urls)
diff --git a/MediaBrowser.Providers/Manager/MetadataService.cs b/MediaBrowser.Providers/Manager/MetadataService.cs
index b93f78341..af03e21b2 100644
--- a/MediaBrowser.Providers/Manager/MetadataService.cs
+++ b/MediaBrowser.Providers/Manager/MetadataService.cs
@@ -13,6 +13,7 @@ using System.Threading.Tasks;
using MediaBrowser.Model.IO;
using MediaBrowser.Model.Configuration;
using MediaBrowser.Model.Providers;
+using MediaBrowser.Providers.MediaInfo;
namespace MediaBrowser.Providers.Manager
{
@@ -47,17 +48,45 @@ namespace MediaBrowser.Providers.Manager
var libraryOptions = LibraryManager.GetLibraryOptions((BaseItem)item);
- if (refreshOptions.MetadataRefreshMode != MetadataRefreshMode.None)
+ if (!requiresRefresh && libraryOptions.AutomaticRefreshIntervalDays > 0 && (DateTime.UtcNow - item.DateLastRefreshed).TotalDays >= libraryOptions.AutomaticRefreshIntervalDays)
{
- // TODO: If this returns true, should we instead just change metadata refresh mode to Full?
- requiresRefresh = item.RequiresRefresh();
+ requiresRefresh = true;
}
- if (!requiresRefresh &&
- libraryOptions.AutomaticRefreshIntervalDays > 0 &&
- (DateTime.UtcNow - item.DateLastRefreshed).TotalDays >= libraryOptions.AutomaticRefreshIntervalDays)
+ DateTime? newDateModified = null;
+ if (item.LocationType == LocationType.FileSystem)
{
- requiresRefresh = true;
+ var file = refreshOptions.DirectoryService.GetFile(item.Path);
+ if (file != null)
+ {
+ newDateModified = file.LastWriteTimeUtc;
+ if (item.EnableRefreshOnDateModifiedChange)
+ {
+ if (newDateModified != item.DateModified)
+ {
+ Logger.Debug("Date modified for {0}. Old date {1} new date {2} Id {3}", item.Path, item.DateModified, newDateModified, item.Id);
+ requiresRefresh = true;
+ }
+ }
+
+ if (!requiresRefresh && item.SupportsLocalMetadata)
+ {
+ var video = item as Video;
+
+ if (video != null && !video.IsPlaceHolder)
+ {
+ requiresRefresh = !video.SubtitleFiles
+ .SequenceEqual(SubtitleResolver.GetSubtitleFiles(video, refreshOptions.DirectoryService, FileSystem, false)
+ .OrderBy(i => i), StringComparer.OrdinalIgnoreCase);
+ }
+ }
+ }
+ }
+
+ if (!requiresRefresh && refreshOptions.MetadataRefreshMode != MetadataRefreshMode.None)
+ {
+ // TODO: If this returns true, should we instead just change metadata refresh mode to Full?
+ requiresRefresh = item.RequiresRefresh();
}
var itemImageProvider = new ItemImageProvider(Logger, ProviderManager, ServerConfigurationManager, FileSystem);
@@ -145,20 +174,9 @@ namespace MediaBrowser.Providers.Manager
var beforeSaveResult = BeforeSave(itemOfType, isFirstRefresh || refreshOptions.ReplaceAllMetadata || refreshOptions.MetadataRefreshMode == MetadataRefreshMode.FullRefresh || requiresRefresh, updateType);
updateType = updateType | beforeSaveResult;
- if (item.LocationType == LocationType.FileSystem)
+ if (newDateModified.HasValue)
{
- var file = refreshOptions.DirectoryService.GetFile(item.Path);
- if (file != null)
- {
- var fileLastWriteTime = file.LastWriteTimeUtc;
- if (item.EnableRefreshOnDateModifiedChange && fileLastWriteTime != item.DateModified)
- {
- Logger.Debug("Date modified for {0}. Old date {1} new date {2} Id {3}", item.Path, item.DateModified, fileLastWriteTime, item.Id);
- requiresRefresh = true;
- }
-
- item.DateModified = fileLastWriteTime;
- }
+ item.DateModified = newDateModified.Value;
}
// Save if changes were made, or it's never been saved before
@@ -204,7 +222,7 @@ namespace MediaBrowser.Providers.Manager
LibraryManager.UpdatePeople(baseItem, result.People);
await SavePeopleMetadata(result.People, libraryOptions, cancellationToken).ConfigureAwait(false);
}
- await result.Item.UpdateToRepository(reason, cancellationToken).ConfigureAwait(false);
+ result.Item.UpdateToRepository(reason, cancellationToken);
}
private async Task SavePeopleMetadata(List<PersonInfo> people, LibraryOptions libraryOptions, CancellationToken cancellationToken)
@@ -238,7 +256,7 @@ namespace MediaBrowser.Providers.Manager
if (saveEntity)
{
- await personEntity.UpdateToRepository(updateType, cancellationToken).ConfigureAwait(false);
+ personEntity.UpdateToRepository(updateType, cancellationToken);
}
}
}
@@ -453,6 +471,11 @@ namespace MediaBrowser.Providers.Manager
return item is TItemType;
}
+ public bool CanRefreshPrimary(Type type)
+ {
+ return type == typeof(TItemType);
+ }
+
protected virtual async Task<RefreshResult> RefreshWithProviders(MetadataResult<TItemType> metadata,
TIdType id,
MetadataRefreshOptions options,
@@ -655,6 +678,8 @@ namespace MediaBrowser.Providers.Manager
if (result.HasMetadata)
{
+ result.Provider = provider.Name;
+
results.Add(result);
refreshResult.UpdateType = refreshResult.UpdateType | ItemUpdateType.MetadataDownload;
diff --git a/MediaBrowser.Providers/Manager/ProviderManager.cs b/MediaBrowser.Providers/Manager/ProviderManager.cs
index c36d4cf63..9dd5052da 100644
--- a/MediaBrowser.Providers/Manager/ProviderManager.cs
+++ b/MediaBrowser.Providers/Manager/ProviderManager.cs
@@ -118,7 +118,29 @@ namespace MediaBrowser.Providers.Manager
public Task<ItemUpdateType> RefreshSingleItem(IHasMetadata item, MetadataRefreshOptions options, CancellationToken cancellationToken)
{
- var service = _metadataServices.FirstOrDefault(i => i.CanRefresh(item));
+ IMetadataService service = null;
+ var type = item.GetType();
+
+ foreach (var current in _metadataServices)
+ {
+ if (current.CanRefreshPrimary(type))
+ {
+ service = current;
+ break;
+ }
+ }
+
+ if (service == null)
+ {
+ foreach (var current in _metadataServices)
+ {
+ if (current.CanRefresh(item))
+ {
+ service = current;
+ break;
+ }
+ }
+ }
if (service != null)
{
@@ -131,16 +153,16 @@ namespace MediaBrowser.Providers.Manager
public async Task SaveImage(IHasMetadata item, string url, ImageType type, int? imageIndex, CancellationToken cancellationToken)
{
- var response = await _httpClient.GetResponse(new HttpRequestOptions
+ using (var response = await _httpClient.GetResponse(new HttpRequestOptions
{
CancellationToken = cancellationToken,
Url = url,
BufferContent = false
- }).ConfigureAwait(false);
-
- await SaveImage(item, response.Content, response.ContentType, type, imageIndex, cancellationToken)
- .ConfigureAwait(false);
+ }).ConfigureAwait(false))
+ {
+ await SaveImage(item, response.Content, response.ContentType, type, imageIndex, cancellationToken).ConfigureAwait(false);
+ }
}
public Task SaveImage(IHasMetadata item, Stream source, string mimeType, ImageType type, int? imageIndex, CancellationToken cancellationToken)
@@ -452,6 +474,8 @@ namespace MediaBrowser.Providers.Manager
GetPluginSummary<MusicAlbum>(),
GetPluginSummary<MusicArtist>(),
GetPluginSummary<Audio>(),
+ GetPluginSummary<AudioBook>(),
+ GetPluginSummary<AudioPodcast>(),
GetPluginSummary<Genre>(),
GetPluginSummary<Studio>(),
GetPluginSummary<GameGenre>(),
@@ -560,30 +584,20 @@ namespace MediaBrowser.Providers.Manager
new MetadataOptions();
}
- private Task _completedTask = Task.FromResult(true);
/// <summary>
/// Saves the metadata.
/// </summary>
- /// <param name="item">The item.</param>
- /// <param name="updateType">Type of the update.</param>
- /// <returns>Task.</returns>
- public Task SaveMetadata(IHasMetadata item, ItemUpdateType updateType)
+ public void SaveMetadata(IHasMetadata item, ItemUpdateType updateType)
{
SaveMetadata(item, updateType, _savers);
- return _completedTask;
}
/// <summary>
/// Saves the metadata.
/// </summary>
- /// <param name="item">The item.</param>
- /// <param name="updateType">Type of the update.</param>
- /// <param name="savers">The savers.</param>
- /// <returns>Task.</returns>
- public Task SaveMetadata(IHasMetadata item, ItemUpdateType updateType, IEnumerable<string> savers)
+ public void SaveMetadata(IHasMetadata item, ItemUpdateType updateType, IEnumerable<string> savers)
{
SaveMetadata(item, updateType, _savers.Where(i => savers.Contains(i.Name, StringComparer.OrdinalIgnoreCase)));
- return _completedTask;
}
/// <summary>
diff --git a/MediaBrowser.Providers/Manager/ProviderUtils.cs b/MediaBrowser.Providers/Manager/ProviderUtils.cs
index 41612321b..b727e1354 100644
--- a/MediaBrowser.Providers/Manager/ProviderUtils.cs
+++ b/MediaBrowser.Providers/Manager/ProviderUtils.cs
@@ -51,7 +51,7 @@ namespace MediaBrowser.Providers.Manager
}
}
- if (replaceData || !target.CommunityRating.HasValue)
+ if (replaceData || !target.CommunityRating.HasValue || (source.CommunityRating.HasValue && string.Equals(sourceResult.Provider, "The Open Movie Database", StringComparison.OrdinalIgnoreCase)))
{
target.CommunityRating = source.CommunityRating;
}