aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Providers/Studios/StudioImageProvider.cs
diff options
context:
space:
mode:
Diffstat (limited to 'MediaBrowser.Providers/Studios/StudioImageProvider.cs')
-rw-r--r--MediaBrowser.Providers/Studios/StudioImageProvider.cs81
1 files changed, 44 insertions, 37 deletions
diff --git a/MediaBrowser.Providers/Studios/StudioImageProvider.cs b/MediaBrowser.Providers/Studios/StudioImageProvider.cs
index 28229fff5..7bb98a87c 100644
--- a/MediaBrowser.Providers/Studios/StudioImageProvider.cs
+++ b/MediaBrowser.Providers/Studios/StudioImageProvider.cs
@@ -4,10 +4,12 @@ using MediaBrowser.Controller.Library;
using MediaBrowser.Controller.Providers;
using MediaBrowser.Model.Entities;
using MediaBrowser.Model.Logging;
+using MediaBrowser.Model.Net;
+using MediaBrowser.Model.Providers;
using System;
using System.Collections.Generic;
-using System.IO;
using System.Linq;
+using System.Net;
using System.Threading;
using System.Threading.Tasks;
@@ -47,7 +49,7 @@ namespace MediaBrowser.Providers.Studios
protected override bool NeedsRefreshInternal(BaseItem item, BaseProviderInfo providerInfo)
{
- if (!string.IsNullOrEmpty(item.PrimaryImagePath))
+ if (!string.IsNullOrEmpty(item.PrimaryImagePath) && item.BackdropImagePaths.Count == 0)
{
return false;
}
@@ -67,65 +69,70 @@ namespace MediaBrowser.Providers.Studios
{
get
{
- return "1";
+ return "3";
}
}
public override async Task<bool> FetchAsync(BaseItem item, bool force, BaseProviderInfo providerInfo, CancellationToken cancellationToken)
{
- if (string.IsNullOrEmpty(item.PrimaryImagePath))
+ if (string.IsNullOrEmpty(item.PrimaryImagePath) || item.BackdropImagePaths.Count == 0)
{
- var list = GetAvailableImages();
+ var images = await _providerManager.GetAvailableRemoteImages(item, cancellationToken, StudiosManualImageProvider.ProviderName).ConfigureAwait(false);
- var match = FindMatch(item, list);
-
- if (!string.IsNullOrEmpty(match))
- {
- var url = GetUrl(match);
-
- await _providerManager.SaveImage(item, url, _resourcePool, ImageType.Primary, null, cancellationToken).ConfigureAwait(false);
- }
+ await DownloadImages(item, images.ToList(), cancellationToken).ConfigureAwait(false);
}
SetLastRefreshed(item, DateTime.UtcNow, providerInfo);
return true;
}
- private string FindMatch(BaseItem item, IEnumerable<string> images)
+ private async Task DownloadImages(BaseItem item, List<RemoteImageInfo> images, CancellationToken cancellationToken)
{
- var name = GetComparableName(item.Name);
+ if (!item.LockedFields.Contains(MetadataFields.Images))
+ {
+ cancellationToken.ThrowIfCancellationRequested();
- return images.FirstOrDefault(i => string.Equals(name, GetComparableName(i), StringComparison.OrdinalIgnoreCase));
- }
+ if (!item.HasImage(ImageType.Primary))
+ {
+ await SaveImage(item, images, ImageType.Primary, cancellationToken).ConfigureAwait(false);
+ }
+ }
- private string GetComparableName(string name)
- {
- return name.Replace(" ", string.Empty).Replace(".", string.Empty).Replace("&", string.Empty).Replace("!", string.Empty);
- }
+ if (!item.LockedFields.Contains(MetadataFields.Backdrops))
+ {
+ cancellationToken.ThrowIfCancellationRequested();
- private string GetUrl(string image)
- {
- return string.Format("https://raw.github.com/MediaBrowser/MediaBrowser.Resources/master/images/studios/{0}/folder.jpg", image);
+ if (item.BackdropImagePaths.Count == 0)
+ {
+ foreach (var image in images.Where(i => i.Type == ImageType.Backdrop))
+ {
+ await _providerManager.SaveImage(item, image.Url, _resourcePool, ImageType.Backdrop, null, cancellationToken)
+ .ConfigureAwait(false);
+
+ break;
+ }
+ }
+ }
}
- private IEnumerable<string> GetAvailableImages()
- {
- var path = GetType().Namespace + ".images.txt";
- using (var stream = GetType().Assembly.GetManifestResourceStream(path))
+ private async Task SaveImage(BaseItem item, IEnumerable<RemoteImageInfo> images, ImageType type, CancellationToken cancellationToken)
+ {
+ foreach (var image in images.Where(i => i.Type == type))
{
- using (var reader = new StreamReader(stream))
+ try
{
- var lines = new List<string>();
-
- while (!reader.EndOfStream)
+ await _providerManager.SaveImage(item, image.Url, _resourcePool, type, null, cancellationToken).ConfigureAwait(false);
+ break;
+ }
+ catch (HttpException ex)
+ {
+ // Sometimes fanart has bad url's in their xml
+ if (ex.StatusCode.HasValue && ex.StatusCode.Value == HttpStatusCode.NotFound)
{
- var text = reader.ReadLine();
-
- lines.Add(text);
+ continue;
}
-
- return lines;
+ break;
}
}
}