Added Backdrops and Screenshots to MetadataFields

pull/702/head
Thomas Gillen 11 years ago
parent 08b7f88b22
commit f0d0e1b94d

@ -45,6 +45,14 @@ namespace MediaBrowser.Model.Entities
/// <summary> /// <summary>
/// The images /// The images
/// </summary> /// </summary>
Images Images,
/// <summary>
/// The backdrops
/// </summary>
Backdrops,
/// <summary>
/// The screenshots
/// </summary>
Screenshots
} }
} }

@ -168,11 +168,8 @@ namespace MediaBrowser.Providers.Movies
/// <returns>Task{System.Boolean}.</returns> /// <returns>Task{System.Boolean}.</returns>
public override async Task<bool> FetchAsync(BaseItem item, bool force, BaseProviderInfo providerInfo, CancellationToken cancellationToken) public override async Task<bool> FetchAsync(BaseItem item, bool force, BaseProviderInfo providerInfo, CancellationToken cancellationToken)
{ {
if (!item.LockedFields.Contains(MetadataFields.Images)) var images = await _providerManager.GetAvailableRemoteImages(item, cancellationToken, ManualMovieDbImageProvider.ProviderName).ConfigureAwait(false);
{ await ProcessImages(item, images.ToList(), cancellationToken).ConfigureAwait(false);
var images = await _providerManager.GetAvailableRemoteImages(item, cancellationToken, ManualMovieDbImageProvider.ProviderName).ConfigureAwait(false);
await ProcessImages(item, images.ToList(), cancellationToken).ConfigureAwait(false);
}
SetLastRefreshed(item, DateTime.UtcNow, providerInfo); SetLastRefreshed(item, DateTime.UtcNow, providerInfo);
return true; return true;
@ -194,7 +191,7 @@ namespace MediaBrowser.Providers.Movies
.ToList(); .ToList();
// poster // poster
if (eligiblePosters.Count > 0 && !item.HasImage(ImageType.Primary)) if (eligiblePosters.Count > 0 && !item.HasImage(ImageType.Primary) && !item.LockedFields.Contains(MetadataFields.Images))
{ {
var poster = eligiblePosters[0]; var poster = eligiblePosters[0];
@ -220,7 +217,10 @@ namespace MediaBrowser.Providers.Movies
var backdropLimit = ConfigurationManager.Configuration.MaxBackdrops; var backdropLimit = ConfigurationManager.Configuration.MaxBackdrops;
// backdrops - only download if earlier providers didn't find any (fanart) // backdrops - only download if earlier providers didn't find any (fanart)
if (eligibleBackdrops.Count > 0 && ConfigurationManager.Configuration.DownloadMovieImages.Backdrops && item.BackdropImagePaths.Count < backdropLimit) if (eligibleBackdrops.Count > 0 &&
ConfigurationManager.Configuration.DownloadMovieImages.Backdrops &&
item.BackdropImagePaths.Count < backdropLimit &&
!item.LockedFields.Contains(MetadataFields.Backdrops))
{ {
for (var i = 0; i < eligibleBackdrops.Count; i++) for (var i = 0; i < eligibleBackdrops.Count; i++)
{ {

@ -163,11 +163,8 @@ namespace MediaBrowser.Providers.Movies
/// <returns>Task{System.Boolean}.</returns> /// <returns>Task{System.Boolean}.</returns>
public override async Task<bool> FetchAsync(BaseItem item, bool force, BaseProviderInfo providerInfo, CancellationToken cancellationToken) public override async Task<bool> FetchAsync(BaseItem item, bool force, BaseProviderInfo providerInfo, CancellationToken cancellationToken)
{ {
if (!item.LockedFields.Contains(MetadataFields.Images)) var images = await _providerManager.GetAvailableRemoteImages(item, cancellationToken, ManualMovieDbPersonImageProvider.ProviderName).ConfigureAwait(false);
{ await ProcessImages(item, images.ToList(), cancellationToken).ConfigureAwait(false);
var images = await _providerManager.GetAvailableRemoteImages(item, cancellationToken, ManualMovieDbPersonImageProvider.ProviderName).ConfigureAwait(false);
await ProcessImages(item, images.ToList(), cancellationToken).ConfigureAwait(false);
}
SetLastRefreshed(item, DateTime.UtcNow, providerInfo); SetLastRefreshed(item, DateTime.UtcNow, providerInfo);
return true; return true;
@ -189,7 +186,7 @@ namespace MediaBrowser.Providers.Movies
.ToList(); .ToList();
// poster // poster
if (eligiblePosters.Count > 0 && !item.HasImage(ImageType.Primary)) if (eligiblePosters.Count > 0 && !item.HasImage(ImageType.Primary) && !item.LockedFields.Contains(MetadataFields.Images))
{ {
var poster = eligiblePosters[0]; var poster = eligiblePosters[0];

@ -212,12 +212,11 @@ namespace MediaBrowser.Providers.Music
await DownloadArtistXml(artistDataPath, musicBrainzId, cancellationToken).ConfigureAwait(false); await DownloadArtistXml(artistDataPath, musicBrainzId, cancellationToken).ConfigureAwait(false);
} }
if (!item.LockedFields.Contains(MetadataFields.Images) && if (ConfigurationManager.Configuration.DownloadMusicArtistImages.Art ||
(ConfigurationManager.Configuration.DownloadMusicArtistImages.Art || ConfigurationManager.Configuration.DownloadMusicArtistImages.Backdrops ||
ConfigurationManager.Configuration.DownloadMusicArtistImages.Backdrops || ConfigurationManager.Configuration.DownloadMusicArtistImages.Banner ||
ConfigurationManager.Configuration.DownloadMusicArtistImages.Banner || ConfigurationManager.Configuration.DownloadMusicArtistImages.Logo ||
ConfigurationManager.Configuration.DownloadMusicArtistImages.Logo || ConfigurationManager.Configuration.DownloadMusicArtistImages.Primary)
ConfigurationManager.Configuration.DownloadMusicArtistImages.Primary))
{ {
var images = await _providerManager.GetAvailableRemoteImages(item, cancellationToken, ManualFanartArtistProvider.ProviderName).ConfigureAwait(false); var images = await _providerManager.GetAvailableRemoteImages(item, cancellationToken, ManualFanartArtistProvider.ProviderName).ConfigureAwait(false);
await FetchFromXml(item, images.ToList(), cancellationToken).ConfigureAwait(false); await FetchFromXml(item, images.ToList(), cancellationToken).ConfigureAwait(false);
@ -268,46 +267,52 @@ namespace MediaBrowser.Providers.Music
/// <returns>Task.</returns> /// <returns>Task.</returns>
private async Task FetchFromXml(BaseItem item, List<RemoteImageInfo> images , CancellationToken cancellationToken) private async Task FetchFromXml(BaseItem item, List<RemoteImageInfo> images , CancellationToken cancellationToken)
{ {
cancellationToken.ThrowIfCancellationRequested(); if (!item.LockedFields.Contains(MetadataFields.Images))
if (ConfigurationManager.Configuration.DownloadMusicArtistImages.Primary && !item.HasImage(ImageType.Primary))
{ {
await SaveImage(item, images, ImageType.Primary, cancellationToken).ConfigureAwait(false); cancellationToken.ThrowIfCancellationRequested();
}
cancellationToken.ThrowIfCancellationRequested(); if (ConfigurationManager.Configuration.DownloadMusicArtistImages.Primary && !item.HasImage(ImageType.Primary))
{
await SaveImage(item, images, ImageType.Primary, cancellationToken).ConfigureAwait(false);
}
if (ConfigurationManager.Configuration.DownloadMusicArtistImages.Logo && !item.HasImage(ImageType.Logo)) cancellationToken.ThrowIfCancellationRequested();
{
await SaveImage(item, images, ImageType.Logo, cancellationToken).ConfigureAwait(false);
}
cancellationToken.ThrowIfCancellationRequested(); if (ConfigurationManager.Configuration.DownloadMusicArtistImages.Logo && !item.HasImage(ImageType.Logo))
{
await SaveImage(item, images, ImageType.Logo, cancellationToken).ConfigureAwait(false);
}
if (ConfigurationManager.Configuration.DownloadMusicArtistImages.Art && !item.HasImage(ImageType.Art)) cancellationToken.ThrowIfCancellationRequested();
{
await SaveImage(item, images, ImageType.Art, cancellationToken).ConfigureAwait(false);
}
cancellationToken.ThrowIfCancellationRequested(); if (ConfigurationManager.Configuration.DownloadMusicArtistImages.Art && !item.HasImage(ImageType.Art))
{
await SaveImage(item, images, ImageType.Art, cancellationToken).ConfigureAwait(false);
}
if (ConfigurationManager.Configuration.DownloadMusicArtistImages.Banner && !item.HasImage(ImageType.Banner)) cancellationToken.ThrowIfCancellationRequested();
{
await SaveImage(item, images, ImageType.Banner, cancellationToken).ConfigureAwait(false);
}
cancellationToken.ThrowIfCancellationRequested(); if (ConfigurationManager.Configuration.DownloadMusicArtistImages.Banner && !item.HasImage(ImageType.Banner))
{
await SaveImage(item, images, ImageType.Banner, cancellationToken).ConfigureAwait(false);
}
}
var backdropLimit = ConfigurationManager.Configuration.MaxBackdrops; if (!item.LockedFields.Contains(MetadataFields.Backdrops))
if (ConfigurationManager.Configuration.DownloadMusicArtistImages.Backdrops &&
item.BackdropImagePaths.Count < backdropLimit)
{ {
foreach (var image in images.Where(i => i.Type == ImageType.Backdrop)) cancellationToken.ThrowIfCancellationRequested();
var backdropLimit = ConfigurationManager.Configuration.MaxBackdrops;
if (ConfigurationManager.Configuration.DownloadMusicArtistImages.Backdrops &&
item.BackdropImagePaths.Count < backdropLimit)
{ {
await _providerManager.SaveImage(item, image.Url, FanArtResourcePool, ImageType.Backdrop, null, cancellationToken) foreach (var image in images.Where(i => i.Type == ImageType.Backdrop))
.ConfigureAwait(false); {
await _providerManager.SaveImage(item, image.Url, FanArtResourcePool, ImageType.Backdrop, null, cancellationToken)
.ConfigureAwait(false);
if (item.BackdropImagePaths.Count >= backdropLimit) break; if (item.BackdropImagePaths.Count >= backdropLimit) break;
}
} }
} }
} }

@ -101,14 +101,11 @@ namespace MediaBrowser.Providers.TV
{ {
cancellationToken.ThrowIfCancellationRequested(); cancellationToken.ThrowIfCancellationRequested();
var season = (Season)item; var season = (Season) item;
if (!item.LockedFields.Contains(MetadataFields.Images)) // Process images
{ var images = await _providerManager.GetAvailableRemoteImages(item, cancellationToken, ManualFanartSeasonImageProvider.ProviderName).ConfigureAwait(false);
// Process images await FetchImages(season, images.ToList(), cancellationToken).ConfigureAwait(false);
var images = await _providerManager.GetAvailableRemoteImages(item, cancellationToken, ManualFanartSeasonImageProvider.ProviderName).ConfigureAwait(false);
await FetchImages(season, images.ToList(), cancellationToken).ConfigureAwait(false);
}
SetLastRefreshed(item, DateTime.UtcNow, providerInfo); SetLastRefreshed(item, DateTime.UtcNow, providerInfo);
return true; return true;
@ -123,7 +120,7 @@ namespace MediaBrowser.Providers.TV
/// <returns>Task.</returns> /// <returns>Task.</returns>
private async Task FetchImages(Season season, List<RemoteImageInfo> images, CancellationToken cancellationToken) private async Task FetchImages(Season season, List<RemoteImageInfo> images, CancellationToken cancellationToken)
{ {
if (ConfigurationManager.Configuration.DownloadSeasonImages.Thumb && !season.HasImage(ImageType.Thumb)) if (ConfigurationManager.Configuration.DownloadSeasonImages.Thumb && !season.HasImage(ImageType.Thumb) && !season.LockedFields.Contains(MetadataFields.Images))
{ {
await SaveImage(season, images, ImageType.Thumb, cancellationToken).ConfigureAwait(false); await SaveImage(season, images, ImageType.Thumb, cancellationToken).ConfigureAwait(false);
} }

@ -167,7 +167,7 @@ namespace MediaBrowser.Providers.TV
var seriesId = item.GetProviderId(MetadataProviders.Tvdb); var seriesId = item.GetProviderId(MetadataProviders.Tvdb);
if (!string.IsNullOrEmpty(seriesId) && !item.LockedFields.Contains(MetadataFields.Images)) if (!string.IsNullOrEmpty(seriesId))
{ {
var xmlPath = GetFanartXmlPath(seriesId); var xmlPath = GetFanartXmlPath(seriesId);
@ -196,56 +196,61 @@ namespace MediaBrowser.Providers.TV
/// <returns>Task.</returns> /// <returns>Task.</returns>
private async Task FetchFromXml(BaseItem item, List<RemoteImageInfo> images, CancellationToken cancellationToken) private async Task FetchFromXml(BaseItem item, List<RemoteImageInfo> images, CancellationToken cancellationToken)
{ {
cancellationToken.ThrowIfCancellationRequested(); if (!item.LockedFields.Contains(MetadataFields.Images))
if (ConfigurationManager.Configuration.DownloadSeriesImages.Primary && !item.HasImage(ImageType.Primary))
{ {
await SaveImage(item, images, ImageType.Primary, cancellationToken).ConfigureAwait(false); cancellationToken.ThrowIfCancellationRequested();
}
cancellationToken.ThrowIfCancellationRequested(); if (ConfigurationManager.Configuration.DownloadSeriesImages.Primary && !item.HasImage(ImageType.Primary))
{
await SaveImage(item, images, ImageType.Primary, cancellationToken).ConfigureAwait(false);
}
if (ConfigurationManager.Configuration.DownloadSeriesImages.Logo && !item.HasImage(ImageType.Logo)) cancellationToken.ThrowIfCancellationRequested();
{
await SaveImage(item, images, ImageType.Logo, cancellationToken).ConfigureAwait(false);
}
cancellationToken.ThrowIfCancellationRequested(); if (ConfigurationManager.Configuration.DownloadSeriesImages.Logo && !item.HasImage(ImageType.Logo))
{
await SaveImage(item, images, ImageType.Logo, cancellationToken).ConfigureAwait(false);
}
if (ConfigurationManager.Configuration.DownloadSeriesImages.Art && !item.HasImage(ImageType.Art)) cancellationToken.ThrowIfCancellationRequested();
{
await SaveImage(item, images, ImageType.Art, cancellationToken).ConfigureAwait(false);
}
cancellationToken.ThrowIfCancellationRequested(); if (ConfigurationManager.Configuration.DownloadSeriesImages.Art && !item.HasImage(ImageType.Art))
{
await SaveImage(item, images, ImageType.Art, cancellationToken).ConfigureAwait(false);
}
if (ConfigurationManager.Configuration.DownloadSeriesImages.Thumb && !item.HasImage(ImageType.Thumb)) cancellationToken.ThrowIfCancellationRequested();
{
await SaveImage(item, images, ImageType.Thumb, cancellationToken).ConfigureAwait(false);
}
cancellationToken.ThrowIfCancellationRequested(); if (ConfigurationManager.Configuration.DownloadSeriesImages.Thumb && !item.HasImage(ImageType.Thumb))
{
await SaveImage(item, images, ImageType.Thumb, cancellationToken).ConfigureAwait(false);
}
if (ConfigurationManager.Configuration.DownloadSeriesImages.Banner && !item.HasImage(ImageType.Banner)) cancellationToken.ThrowIfCancellationRequested();
{
await SaveImage(item, images, ImageType.Banner, cancellationToken).ConfigureAwait(false);
}
cancellationToken.ThrowIfCancellationRequested(); if (ConfigurationManager.Configuration.DownloadSeriesImages.Banner && !item.HasImage(ImageType.Banner))
{
await SaveImage(item, images, ImageType.Banner, cancellationToken).ConfigureAwait(false);
}
}
var backdropLimit = ConfigurationManager.Configuration.MaxBackdrops; if (!item.LockedFields.Contains(MetadataFields.Backdrops))
if (ConfigurationManager.Configuration.DownloadSeriesImages.Backdrops &&
item.BackdropImagePaths.Count < backdropLimit)
{ {
foreach (var image in images.Where(i => i.Type == ImageType.Backdrop)) cancellationToken.ThrowIfCancellationRequested();
var backdropLimit = ConfigurationManager.Configuration.MaxBackdrops;
if (ConfigurationManager.Configuration.DownloadSeriesImages.Backdrops &&
item.BackdropImagePaths.Count < backdropLimit)
{ {
await _providerManager.SaveImage(item, image.Url, FanArtResourcePool, ImageType.Backdrop, null, cancellationToken) foreach (var image in images.Where(i => i.Type == ImageType.Backdrop))
.ConfigureAwait(false); {
await _providerManager.SaveImage(item, image.Url, FanArtResourcePool, ImageType.Backdrop, null, cancellationToken)
.ConfigureAwait(false);
if (item.BackdropImagePaths.Count >= backdropLimit) break; if (item.BackdropImagePaths.Count >= backdropLimit) break;
}
} }
} }
} }
private async Task SaveImage(BaseItem item, List<RemoteImageInfo> images, ImageType type, CancellationToken cancellationToken) private async Task SaveImage(BaseItem item, List<RemoteImageInfo> images, ImageType type, CancellationToken cancellationToken)

@ -147,14 +147,11 @@ namespace MediaBrowser.Providers.TV
{ {
cancellationToken.ThrowIfCancellationRequested(); cancellationToken.ThrowIfCancellationRequested();
if (!item.LockedFields.Contains(MetadataFields.Images)) var images = await _providerManager.GetAvailableRemoteImages(item, cancellationToken, ManualTvdbSeasonImageProvider.ProviderName).ConfigureAwait(false);
{
var images = await _providerManager.GetAvailableRemoteImages(item, cancellationToken, ManualTvdbSeasonImageProvider.ProviderName).ConfigureAwait(false);
const int backdropLimit = 1; const int backdropLimit = 1;
await DownloadImages(item, images.ToList(), backdropLimit, cancellationToken).ConfigureAwait(false); await DownloadImages(item, images.ToList(), backdropLimit, cancellationToken).ConfigureAwait(false);
}
SetLastRefreshed(item, DateTime.UtcNow, providerInfo); SetLastRefreshed(item, DateTime.UtcNow, providerInfo);
return true; return true;
@ -162,17 +159,20 @@ namespace MediaBrowser.Providers.TV
private async Task DownloadImages(BaseItem item, List<RemoteImageInfo> images, int backdropLimit, CancellationToken cancellationToken) private async Task DownloadImages(BaseItem item, List<RemoteImageInfo> images, int backdropLimit, CancellationToken cancellationToken)
{ {
if (!item.HasImage(ImageType.Primary)) if (!item.LockedFields.Contains(MetadataFields.Images))
{ {
await SaveImage(item, images, ImageType.Primary, cancellationToken).ConfigureAwait(false); if (!item.HasImage(ImageType.Primary))
} {
await SaveImage(item, images, ImageType.Primary, cancellationToken).ConfigureAwait(false);
}
if (ConfigurationManager.Configuration.DownloadSeasonImages.Banner && !item.HasImage(ImageType.Banner)) if (ConfigurationManager.Configuration.DownloadSeasonImages.Banner && !item.HasImage(ImageType.Banner))
{ {
await SaveImage(item, images, ImageType.Banner, cancellationToken).ConfigureAwait(false); await SaveImage(item, images, ImageType.Banner, cancellationToken).ConfigureAwait(false);
}
} }
if (ConfigurationManager.Configuration.DownloadSeasonImages.Backdrops && item.BackdropImagePaths.Count < backdropLimit) if (ConfigurationManager.Configuration.DownloadSeasonImages.Backdrops && item.BackdropImagePaths.Count < backdropLimit && !item.LockedFields.Contains(MetadataFields.Backdrops))
{ {
foreach (var backdrop in images.Where(i => i.Type == ImageType.Backdrop)) foreach (var backdrop in images.Where(i => i.Type == ImageType.Backdrop))
{ {

@ -143,7 +143,7 @@ namespace MediaBrowser.Providers.TV
} }
return base.NeedsRefreshInternal(item, providerInfo); return base.NeedsRefreshInternal(item, providerInfo);
} }
/// <summary> /// <summary>
/// Fetches metadata and returns true or false indicating if any work that requires persistence was done /// Fetches metadata and returns true or false indicating if any work that requires persistence was done
/// </summary> /// </summary>
@ -155,14 +155,11 @@ namespace MediaBrowser.Providers.TV
{ {
cancellationToken.ThrowIfCancellationRequested(); cancellationToken.ThrowIfCancellationRequested();
if (!item.LockedFields.Contains(MetadataFields.Images)) var images = await _providerManager.GetAvailableRemoteImages(item, cancellationToken, ManualTvdbSeriesImageProvider.ProviderName).ConfigureAwait(false);
{
var images = await _providerManager.GetAvailableRemoteImages(item, cancellationToken, ManualTvdbSeriesImageProvider.ProviderName).ConfigureAwait(false);
const int backdropLimit = 1; const int backdropLimit = 1;
await DownloadImages(item, images.ToList(), backdropLimit, cancellationToken).ConfigureAwait(false); await DownloadImages(item, images.ToList(), backdropLimit, cancellationToken).ConfigureAwait(false);
}
SetLastRefreshed(item, DateTime.UtcNow, providerInfo); SetLastRefreshed(item, DateTime.UtcNow, providerInfo);
return true; return true;
@ -170,29 +167,32 @@ namespace MediaBrowser.Providers.TV
private async Task DownloadImages(BaseItem item, List<RemoteImageInfo> images, int backdropLimit, CancellationToken cancellationToken) private async Task DownloadImages(BaseItem item, List<RemoteImageInfo> images, int backdropLimit, CancellationToken cancellationToken)
{ {
if (!item.HasImage(ImageType.Primary)) if (!item.LockedFields.Contains(MetadataFields.Images))
{ {
var image = images.FirstOrDefault(i => i.Type == ImageType.Primary); if (!item.HasImage(ImageType.Primary))
if (image != null)
{ {
await _providerManager.SaveImage(item, image.Url, TvdbSeriesProvider.Current.TvDbResourcePool, ImageType.Primary, null, cancellationToken) var image = images.FirstOrDefault(i => i.Type == ImageType.Primary);
.ConfigureAwait(false);
}
}
if (ConfigurationManager.Configuration.DownloadSeriesImages.Banner && !item.HasImage(ImageType.Banner)) if (image != null)
{ {
var image = images.FirstOrDefault(i => i.Type == ImageType.Banner); await _providerManager.SaveImage(item, image.Url, TvdbSeriesProvider.Current.TvDbResourcePool, ImageType.Primary, null, cancellationToken)
.ConfigureAwait(false);
}
}
if (image != null) if (ConfigurationManager.Configuration.DownloadSeriesImages.Banner && !item.HasImage(ImageType.Banner))
{ {
await _providerManager.SaveImage(item, image.Url, TvdbSeriesProvider.Current.TvDbResourcePool, ImageType.Banner, null, cancellationToken) var image = images.FirstOrDefault(i => i.Type == ImageType.Banner);
.ConfigureAwait(false);
if (image != null)
{
await _providerManager.SaveImage(item, image.Url, TvdbSeriesProvider.Current.TvDbResourcePool, ImageType.Banner, null, cancellationToken)
.ConfigureAwait(false);
}
} }
} }
if (ConfigurationManager.Configuration.DownloadSeriesImages.Backdrops && item.BackdropImagePaths.Count < backdropLimit) if (ConfigurationManager.Configuration.DownloadSeriesImages.Backdrops && item.BackdropImagePaths.Count < backdropLimit && !item.LockedFields.Contains(MetadataFields.Backdrops))
{ {
foreach (var backdrop in images.Where(i => i.Type == ImageType.Backdrop && foreach (var backdrop in images.Where(i => i.Type == ImageType.Backdrop &&
(!i.Width.HasValue || (!i.Width.HasValue ||

Loading…
Cancel
Save