From 9685b81db5b975f57739a9dcc6c2cdb6c4c4dbcf Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Thu, 30 Jan 2014 23:50:09 -0500 Subject: [PATCH] convert artist providers --- MediaBrowser.Api/Images/ImageService.cs | 2 +- MediaBrowser.Api/Images/RemoteImageService.cs | 2 +- .../Entities/Audio/MusicArtist.cs | 7 - MediaBrowser.Controller/Entities/BaseItem.cs | 2 +- .../MediaInfo/FFMpegManager.cs | 7 +- .../Providers/MetadataRefreshOptions.cs | 30 +- .../Configuration/ServerConfiguration.cs | 1 - .../BoxSets/BoxSetMetadataService.cs | 39 +- .../BoxSets/MovieDbBoxSetImageProvider.cs | 45 +- MediaBrowser.Providers/FanartBaseProvider.cs | 98 --- .../Manager/MetadataService.cs | 15 +- .../MediaBrowser.Providers.csproj | 10 +- .../Movies/FanArtMovieProvider.cs | 11 +- .../Movies/FanArtMovieUpdatesPrescanTask.cs | 8 +- .../Movies/ManualFanartMovieImageProvider.cs | 29 +- .../Music/ArtistInfoFromSongProvider.cs | 91 --- .../Music/ArtistMetadataService.cs | 67 ++ .../Music/ArtistProviderFromXml.cs | 92 --- .../Music/ArtistXmlProvider.cs | 59 ++ .../Music/FanArtAlbumProvider.cs | 7 +- .../Music/FanArtArtistProvider.cs | 614 +++++++++++------- .../Music/FanArtUpdatesPrescanTask.cs | 24 +- .../Music/LastFmImageProvider.cs | 4 +- .../Music/LastfmAlbumProvider.cs | 8 +- .../Music/LastfmArtistProvider.cs | 233 ++++--- .../Music/LastfmBaseProvider.cs | 5 - MediaBrowser.Providers/Music/LastfmHelper.cs | 31 +- .../Music/ManualFanartAlbumProvider.cs | 5 +- .../Music/ManualFanartArtistProvider.cs | 367 ----------- .../Music/ManualLastFmImageProvider.cs | 28 +- MediaBrowser.Providers/ProviderUtils.cs | 59 ++ .../TV/FanArtSeasonProvider.cs | 5 +- MediaBrowser.Providers/TV/FanArtTVProvider.cs | 11 +- .../TV/FanArtTvUpdatesPrescanTask.cs | 6 +- .../TV/ManualFanartSeasonProvider.cs | 3 +- .../TV/ManualFanartSeriesProvider.cs | 3 +- .../Library/Validators/PeoplePostScanTask.cs | 2 +- 37 files changed, 875 insertions(+), 1155 deletions(-) delete mode 100644 MediaBrowser.Providers/FanartBaseProvider.cs delete mode 100644 MediaBrowser.Providers/Music/ArtistInfoFromSongProvider.cs create mode 100644 MediaBrowser.Providers/Music/ArtistMetadataService.cs delete mode 100644 MediaBrowser.Providers/Music/ArtistProviderFromXml.cs create mode 100644 MediaBrowser.Providers/Music/ArtistXmlProvider.cs delete mode 100644 MediaBrowser.Providers/Music/ManualFanartArtistProvider.cs diff --git a/MediaBrowser.Api/Images/ImageService.cs b/MediaBrowser.Api/Images/ImageService.cs index c4981a7faa..bfa2b645a0 100644 --- a/MediaBrowser.Api/Images/ImageService.cs +++ b/MediaBrowser.Api/Images/ImageService.cs @@ -801,7 +801,7 @@ namespace MediaBrowser.Api.Images await entity.RefreshMetadata(new MetadataRefreshOptions { - ImageRefreshMode = MetadataRefreshMode.None, + ImageRefreshMode = ImageRefreshMode.ValidationOnly, ForceSave = true }, CancellationToken.None).ConfigureAwait(false); diff --git a/MediaBrowser.Api/Images/RemoteImageService.cs b/MediaBrowser.Api/Images/RemoteImageService.cs index b84a8f4f74..37bf0c1cae 100644 --- a/MediaBrowser.Api/Images/RemoteImageService.cs +++ b/MediaBrowser.Api/Images/RemoteImageService.cs @@ -284,7 +284,7 @@ namespace MediaBrowser.Api.Images await item.RefreshMetadata(new MetadataRefreshOptions { ForceSave = true, - ImageRefreshMode = MetadataRefreshMode.None, + ImageRefreshMode = ImageRefreshMode.ValidationOnly, MetadataRefreshMode = MetadataRefreshMode.None }, CancellationToken.None).ConfigureAwait(false); diff --git a/MediaBrowser.Controller/Entities/Audio/MusicArtist.cs b/MediaBrowser.Controller/Entities/Audio/MusicArtist.cs index 860d34fd82..b2d95ed300 100644 --- a/MediaBrowser.Controller/Entities/Audio/MusicArtist.cs +++ b/MediaBrowser.Controller/Entities/Audio/MusicArtist.cs @@ -69,13 +69,6 @@ namespace MediaBrowser.Controller.Entities.Audio return base.GetClientTypeName(); } - /// - /// Gets or sets the last fm image URL. - /// - /// The last fm image URL. - public string LastFmImageUrl { get; set; } - public string LastFmImageSize { get; set; } - public MusicArtist() { UserItemCountList = new List(); diff --git a/MediaBrowser.Controller/Entities/BaseItem.cs b/MediaBrowser.Controller/Entities/BaseItem.cs index 06ebe89055..f12532204f 100644 --- a/MediaBrowser.Controller/Entities/BaseItem.cs +++ b/MediaBrowser.Controller/Entities/BaseItem.cs @@ -1492,7 +1492,7 @@ namespace MediaBrowser.Controller.Entities return RefreshMetadata(new MetadataRefreshOptions { ForceSave = true, - ImageRefreshMode = MetadataRefreshMode.None, + ImageRefreshMode = ImageRefreshMode.ValidationOnly, MetadataRefreshMode = MetadataRefreshMode.None }, CancellationToken.None); diff --git a/MediaBrowser.Controller/MediaInfo/FFMpegManager.cs b/MediaBrowser.Controller/MediaInfo/FFMpegManager.cs index c1951038cc..746157bb33 100644 --- a/MediaBrowser.Controller/MediaInfo/FFMpegManager.cs +++ b/MediaBrowser.Controller/MediaInfo/FFMpegManager.cs @@ -126,7 +126,7 @@ namespace MediaBrowser.Controller.MediaInfo { if (!IsEligibleForChapterImageExtraction(video)) { - return true; + extractImages = false; } var success = true; @@ -187,6 +187,11 @@ namespace MediaBrowser.Controller.MediaInfo break; } } + else if (!string.IsNullOrEmpty(chapter.ImagePath)) + { + chapter.ImagePath = null; + changesMade = true; + } } else if (!string.Equals(path, chapter.ImagePath, StringComparison.OrdinalIgnoreCase)) { diff --git a/MediaBrowser.Controller/Providers/MetadataRefreshOptions.cs b/MediaBrowser.Controller/Providers/MetadataRefreshOptions.cs index d6e8a3afea..27de50ef8c 100644 --- a/MediaBrowser.Controller/Providers/MetadataRefreshOptions.cs +++ b/MediaBrowser.Controller/Providers/MetadataRefreshOptions.cs @@ -22,11 +22,21 @@ namespace MediaBrowser.Controller.Providers /// [Obsolete] public bool ResetResolveArgs { get; set; } + + public MetadataRefreshOptions() + { + ResetResolveArgs = true; + } } public class ImageRefreshOptions { - public MetadataRefreshMode ImageRefreshMode { get; set; } + public ImageRefreshMode ImageRefreshMode { get; set; } + + public ImageRefreshOptions() + { + ImageRefreshMode = ImageRefreshMode.Default; + } } public enum MetadataRefreshMode @@ -46,4 +56,22 @@ namespace MediaBrowser.Controller.Providers /// FullRefresh } + + public enum ImageRefreshMode + { + /// + /// The default + /// + Default, + + /// + /// Existing images will be validated + /// + ValidationOnly, + + /// + /// All providers will be executed to search for new metadata + /// + FullRefresh + } } diff --git a/MediaBrowser.Model/Configuration/ServerConfiguration.cs b/MediaBrowser.Model/Configuration/ServerConfiguration.cs index 424c9c48e5..716be54d25 100644 --- a/MediaBrowser.Model/Configuration/ServerConfiguration.cs +++ b/MediaBrowser.Model/Configuration/ServerConfiguration.cs @@ -245,7 +245,6 @@ namespace MediaBrowser.Model.Configuration EnableHttpLevelLogging = true; EnableDashboardResponseCaching = true; - EnableFanArtUpdates = true; EnableVideoImageExtraction = true; EnableMovieChapterImageExtraction = true; EnableEpisodeChapterImageExtraction = false; diff --git a/MediaBrowser.Providers/BoxSets/BoxSetMetadataService.cs b/MediaBrowser.Providers/BoxSets/BoxSetMetadataService.cs index 62b2e627f3..b9b4e40d7a 100644 --- a/MediaBrowser.Providers/BoxSets/BoxSetMetadataService.cs +++ b/MediaBrowser.Providers/BoxSets/BoxSetMetadataService.cs @@ -1,11 +1,15 @@ using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.Entities.Movies; +using MediaBrowser.Controller.Entities.TV; using MediaBrowser.Controller.Library; +using MediaBrowser.Controller.Localization; using MediaBrowser.Controller.Providers; using MediaBrowser.Model.Entities; using MediaBrowser.Model.Logging; using MediaBrowser.Providers.Manager; +using System; using System.Collections.Generic; +using System.Linq; using System.Threading; using System.Threading.Tasks; @@ -14,11 +18,13 @@ namespace MediaBrowser.Providers.BoxSets public class BoxSetMetadataService : ConcreteMetadataService { private readonly ILibraryManager _libraryManager; + private readonly ILocalizationManager _iLocalizationManager; - public BoxSetMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, ILibraryManager libraryManager) + public BoxSetMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, ILibraryManager libraryManager, ILocalizationManager iLocalizationManager) : base(serverConfigurationManager, logger, providerManager, providerRepo) { _libraryManager = libraryManager; + _iLocalizationManager = iLocalizationManager; } /// @@ -37,5 +43,36 @@ namespace MediaBrowser.Providers.BoxSets { return _libraryManager.UpdateItem(item, reason, cancellationToken); } + + protected override ItemUpdateType AfterMetadataRefresh(BoxSet item) + { + var updateType = base.AfterMetadataRefresh(item); + + if (!item.LockedFields.Contains(MetadataFields.OfficialRating)) + { + var currentOfficialRating = item.OfficialRating; + + // Gather all possible ratings + var ratings = item.RecursiveChildren + .Concat(item.GetLinkedChildren()) + .Where(i => i is Movie || i is Series) + .Select(i => i.OfficialRating) + .Where(i => !string.IsNullOrEmpty(i)) + .Distinct(StringComparer.OrdinalIgnoreCase) + .Select(i => new Tuple(i, _iLocalizationManager.GetRatingLevel(i))) + .OrderBy(i => i.Item2 ?? 1000) + .Select(i => i.Item1); + + item.OfficialRating = ratings.FirstOrDefault() ?? item.OfficialRating; + + if (!string.Equals(currentOfficialRating ?? string.Empty, item.OfficialRating ?? string.Empty, + StringComparison.OrdinalIgnoreCase)) + { + updateType = updateType | ItemUpdateType.MetadataDownload; + } + } + + return updateType; + } } } diff --git a/MediaBrowser.Providers/BoxSets/MovieDbBoxSetImageProvider.cs b/MediaBrowser.Providers/BoxSets/MovieDbBoxSetImageProvider.cs index 961982bfdd..2e75a66cb9 100644 --- a/MediaBrowser.Providers/BoxSets/MovieDbBoxSetImageProvider.cs +++ b/MediaBrowser.Providers/BoxSets/MovieDbBoxSetImageProvider.cs @@ -1,29 +1,25 @@ -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Threading; -using System.Threading.Tasks; -using MediaBrowser.Common.Net; +using MediaBrowser.Common.Net; using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Entities.Movies; using MediaBrowser.Controller.Providers; using MediaBrowser.Model.Dto; using MediaBrowser.Model.Entities; using MediaBrowser.Model.Providers; -using MediaBrowser.Model.Serialization; using MediaBrowser.Providers.Movies; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; namespace MediaBrowser.Providers.BoxSets { class MovieDbBoxSetImageProvider : IRemoteImageProvider { - private readonly IJsonSerializer _jsonSerializer; private readonly IHttpClient _httpClient; - public MovieDbBoxSetImageProvider(IJsonSerializer jsonSerializer, IHttpClient httpClient) + public MovieDbBoxSetImageProvider(IHttpClient httpClient) { - _jsonSerializer = jsonSerializer; _httpClient = httpClient; } @@ -163,33 +159,6 @@ namespace MediaBrowser.Providers.BoxSets .ThenByDescending(i => i.vote_count); } - /// - /// Fetches the images. - /// - /// The item. - /// The json serializer. - /// The cancellation token. - /// Task{MovieImages}. - private async Task FetchImages(BaseItem item, IJsonSerializer jsonSerializer, - CancellationToken cancellationToken) - { - await MovieDbProvider.Current.EnsureMovieInfo(item, cancellationToken).ConfigureAwait(false); - - var path = MovieDbProvider.Current.GetDataFilePath(item); - - if (!string.IsNullOrEmpty(path)) - { - var fileInfo = new FileInfo(path); - - if (fileInfo.Exists) - { - return jsonSerializer.DeserializeFromFile(path).images; - } - } - - return null; - } - public int Order { get { return 0; } diff --git a/MediaBrowser.Providers/FanartBaseProvider.cs b/MediaBrowser.Providers/FanartBaseProvider.cs deleted file mode 100644 index f0f731809a..0000000000 --- a/MediaBrowser.Providers/FanartBaseProvider.cs +++ /dev/null @@ -1,98 +0,0 @@ -using MediaBrowser.Controller.Configuration; -using MediaBrowser.Controller.Providers; -using MediaBrowser.Model.Logging; -using System.Collections.Generic; -using System.Threading; - -namespace MediaBrowser.Providers -{ - /// - /// Class FanartBaseProvider - /// - public abstract class FanartBaseProvider : BaseMetadataProvider - { - internal static readonly SemaphoreSlim FanArtResourcePool = new SemaphoreSlim(3, 3); - - /// - /// The LOG o_ FILE - /// - protected const string LogoFile = "logo.png"; - - /// - /// The AR t_ FILE - /// - protected const string ArtFile = "clearart.png"; - - /// - /// The THUM b_ FILE - /// - protected const string ThumbFile = "thumb.jpg"; - - /// - /// The DIS c_ FILE - /// - protected const string DiscFile = "disc.png"; - - /// - /// The BANNE r_ FILE - /// - protected const string BannerFile = "banner.png"; - - /// - /// The Backdrop - /// - protected const string BackdropFile = "backdrop.jpg"; - - /// - /// The Primary image - /// - protected const string PrimaryFile = "folder.jpg"; - - /// - /// The API key - /// - internal const string ApiKey = "5c6b04c68e904cfed1e6cbc9a9e683d4"; - - protected FanartBaseProvider(ILogManager logManager, IServerConfigurationManager configurationManager) - : base(logManager, configurationManager) - { - } - - /// - /// Gets a value indicating whether [requires internet]. - /// - /// true if [requires internet]; otherwise, false. - public override bool RequiresInternet - { - get { return true; } - } - - #region Result Objects - - protected class FanArtImageInfo - { - public string id { get; set; } - public string url { get; set; } - public string likes { get; set; } - } - - protected class FanArtMusicInfo - { - public string mbid_id { get; set; } - public List musiclogo { get; set; } - public List artistbackground { get; set; } - public List artistthumb { get; set; } - public List hdmusiclogo { get; set; } - public List musicbanner { get; set; } - } - - protected class FanArtMusicResult - { - public FanArtMusicInfo result { get; set; } - } - - #endregion - - } - -} diff --git a/MediaBrowser.Providers/Manager/MetadataService.cs b/MediaBrowser.Providers/Manager/MetadataService.cs index d946f9cbdb..d8d9ee0cac 100644 --- a/MediaBrowser.Providers/Manager/MetadataService.cs +++ b/MediaBrowser.Providers/Manager/MetadataService.cs @@ -112,7 +112,7 @@ namespace MediaBrowser.Providers.Manager } // Next run remote image providers, but only if local image providers didn't throw an exception - if (!localImagesFailed && options.ImageRefreshMode != MetadataRefreshMode.None) + if (!localImagesFailed && options.ImageRefreshMode != ImageRefreshMode.ValidationOnly) { var providers = GetNonLocalImageProviders(item, lastResult.DateLastImagesRefresh.HasValue, options).ToList(); @@ -125,6 +125,8 @@ namespace MediaBrowser.Providers.Manager refreshResult.SetDateLastImagesRefresh(DateTime.UtcNow); refreshResult.AddImageProvidersRefreshed(result.Providers); } + + updateType = updateType | AfterMetadataRefresh(itemOfType); } var providersHadChanges = updateType > ItemUpdateType.Unspecified; @@ -146,6 +148,15 @@ namespace MediaBrowser.Providers.Manager } } + /// + /// Afters the metadata refresh. + /// + /// The item. + protected virtual ItemUpdateType AfterMetadataRefresh(TItemType item) + { + return ItemUpdateType.Unspecified; + } + /// /// Gets the providers. /// @@ -200,7 +211,7 @@ namespace MediaBrowser.Providers.Manager }).ToList(); // Run all if either of these flags are true - var runAllProviders = options.ImageRefreshMode == MetadataRefreshMode.FullRefresh || !hasRefreshedImages; + var runAllProviders = options.ImageRefreshMode == ImageRefreshMode.FullRefresh || !hasRefreshedImages; if (!runAllProviders) { diff --git a/MediaBrowser.Providers/MediaBrowser.Providers.csproj b/MediaBrowser.Providers/MediaBrowser.Providers.csproj index 06c70d75d2..83c628e23e 100644 --- a/MediaBrowser.Providers/MediaBrowser.Providers.csproj +++ b/MediaBrowser.Providers/MediaBrowser.Providers.csproj @@ -80,7 +80,6 @@ - @@ -101,6 +100,8 @@ + + @@ -112,18 +113,15 @@ - - + - - - + diff --git a/MediaBrowser.Providers/Movies/FanArtMovieProvider.cs b/MediaBrowser.Providers/Movies/FanArtMovieProvider.cs index 3c8fd4612d..2cf403b09c 100644 --- a/MediaBrowser.Providers/Movies/FanArtMovieProvider.cs +++ b/MediaBrowser.Providers/Movies/FanArtMovieProvider.cs @@ -17,13 +17,14 @@ using System.Threading; using System.Threading.Tasks; using MediaBrowser.Model.Net; using System.Net; +using MediaBrowser.Providers.Music; namespace MediaBrowser.Providers.Movies { /// /// Class FanArtMovieProvider /// - class FanArtMovieProvider : FanartBaseProvider + class FanArtMovieProvider : BaseMetadataProvider { /// /// Gets the HTTP client. @@ -228,7 +229,7 @@ namespace MediaBrowser.Providers.Movies { cancellationToken.ThrowIfCancellationRequested(); - var url = string.Format(FanArtBaseUrl, ApiKey, tmdbId); + var url = string.Format(FanArtBaseUrl, FanartArtistProvider.ApiKey, tmdbId); var xmlPath = GetFanartXmlPath(tmdbId); @@ -237,7 +238,7 @@ namespace MediaBrowser.Providers.Movies using (var response = await HttpClient.Get(new HttpRequestOptions { Url = url, - ResourcePool = FanArtResourcePool, + ResourcePool = FanartArtistProvider.FanArtResourcePool, CancellationToken = cancellationToken }).ConfigureAwait(false)) @@ -318,7 +319,7 @@ namespace MediaBrowser.Providers.Movies { foreach (var image in images.Where(i => i.Type == ImageType.Backdrop)) { - await _providerManager.SaveImage(item, image.Url, FanArtResourcePool, ImageType.Backdrop, null, cancellationToken) + await _providerManager.SaveImage(item, image.Url, FanartArtistProvider.FanArtResourcePool, ImageType.Backdrop, null, cancellationToken) .ConfigureAwait(false); if (item.BackdropImagePaths.Count >= backdropLimit) break; @@ -332,7 +333,7 @@ namespace MediaBrowser.Providers.Movies { try { - await _providerManager.SaveImage(item, image.Url, FanArtResourcePool, type, null, cancellationToken).ConfigureAwait(false); + await _providerManager.SaveImage(item, image.Url, FanartArtistProvider.FanArtResourcePool, type, null, cancellationToken).ConfigureAwait(false); break; } catch (HttpException ex) diff --git a/MediaBrowser.Providers/Movies/FanArtMovieUpdatesPrescanTask.cs b/MediaBrowser.Providers/Movies/FanArtMovieUpdatesPrescanTask.cs index 9bd73bf656..88f478d1c3 100644 --- a/MediaBrowser.Providers/Movies/FanArtMovieUpdatesPrescanTask.cs +++ b/MediaBrowser.Providers/Movies/FanArtMovieUpdatesPrescanTask.cs @@ -54,7 +54,7 @@ namespace MediaBrowser.Providers.Movies /// Task. public async Task Run(IProgress progress, CancellationToken cancellationToken) { - if (!_config.Configuration.EnableInternetProviders) + if (!_config.Configuration.EnableInternetProviders || !_config.Configuration.EnableFanArtUpdates) { progress.Report(100); return; @@ -101,18 +101,18 @@ namespace MediaBrowser.Providers.Movies // First get last time using (var stream = await _httpClient.Get(new HttpRequestOptions { - Url = string.Format(UpdatesUrl, FanartBaseProvider.ApiKey, lastUpdateTime), + Url = string.Format(UpdatesUrl, FanartArtistProvider.ApiKey, lastUpdateTime), CancellationToken = cancellationToken, EnableHttpCompression = true, - ResourcePool = FanartBaseProvider.FanArtResourcePool + ResourcePool = FanartArtistProvider.FanArtResourcePool }).ConfigureAwait(false)) { - // If empty fanart will return a string of "null", rather than an empty list using (var reader = new StreamReader(stream)) { var json = await reader.ReadToEndAsync().ConfigureAwait(false); + // If empty fanart will return a string of "null", rather than an empty list if (string.Equals(json, "null", StringComparison.OrdinalIgnoreCase)) { return new List(); diff --git a/MediaBrowser.Providers/Movies/ManualFanartMovieImageProvider.cs b/MediaBrowser.Providers/Movies/ManualFanartMovieImageProvider.cs index 7e0222f722..c94339a7e4 100644 --- a/MediaBrowser.Providers/Movies/ManualFanartMovieImageProvider.cs +++ b/MediaBrowser.Providers/Movies/ManualFanartMovieImageProvider.cs @@ -1,4 +1,5 @@ -using MediaBrowser.Common.Net; +using MediaBrowser.Common.IO; +using MediaBrowser.Common.Net; using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Entities.Movies; @@ -15,19 +16,22 @@ using System.Text; using System.Threading; using System.Threading.Tasks; using System.Xml; +using MediaBrowser.Providers.Music; namespace MediaBrowser.Providers.Movies { - public class ManualFanartMovieImageProvider : IRemoteImageProvider + public class ManualFanartMovieImageProvider : IRemoteImageProvider, IHasChangeMonitor { private readonly CultureInfo _usCulture = new CultureInfo("en-US"); private readonly IServerConfigurationManager _config; private readonly IHttpClient _httpClient; + private readonly IFileSystem _fileSystem; - public ManualFanartMovieImageProvider(IServerConfigurationManager config, IHttpClient httpClient) + public ManualFanartMovieImageProvider(IServerConfigurationManager config, IHttpClient httpClient, IFileSystem fileSystem) { _config = config; _httpClient = httpClient; + _fileSystem = fileSystem; } public string Name @@ -329,8 +333,25 @@ namespace MediaBrowser.Providers.Movies { CancellationToken = cancellationToken, Url = url, - ResourcePool = FanartBaseProvider.FanArtResourcePool + ResourcePool = FanartArtistProvider.FanArtResourcePool }); } + + public bool HasChanged(IHasMetadata item, DateTime date) + { + var id = item.GetProviderId(MetadataProviders.Tmdb); + + if (!string.IsNullOrEmpty(id)) + { + // Process images + var xmlPath = FanArtMovieProvider.Current.GetFanartXmlPath(id); + + var fileInfo = new FileInfo(xmlPath); + + return fileInfo.Exists && _fileSystem.GetLastWriteTimeUtc(fileInfo) > date; + } + + return false; + } } } diff --git a/MediaBrowser.Providers/Music/ArtistInfoFromSongProvider.cs b/MediaBrowser.Providers/Music/ArtistInfoFromSongProvider.cs deleted file mode 100644 index 05f7d4efe5..0000000000 --- a/MediaBrowser.Providers/Music/ArtistInfoFromSongProvider.cs +++ /dev/null @@ -1,91 +0,0 @@ -using MediaBrowser.Common.Extensions; -using MediaBrowser.Controller.Configuration; -using MediaBrowser.Controller.Entities; -using MediaBrowser.Controller.Entities.Audio; -using MediaBrowser.Controller.Providers; -using MediaBrowser.Model.Entities; -using MediaBrowser.Model.Logging; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading; -using System.Threading.Tasks; - -namespace MediaBrowser.Providers.Music -{ - public class ArtistInfoFromSongProvider : BaseMetadataProvider - { - public ArtistInfoFromSongProvider(ILogManager logManager, IServerConfigurationManager configurationManager) - : base(logManager, configurationManager) - { - } - - public override bool Supports(BaseItem item) - { - return item is MusicArtist; - } - - protected override bool NeedsRefreshInternal(BaseItem item, BaseProviderInfo providerInfo) - { - var artist = (MusicArtist)item; - - if (!artist.IsAccessedByName) - { - // If song metadata has changed - if (GetComparisonData(artist) != providerInfo.FileStamp) - { - return true; - } - } - - return base.NeedsRefreshInternal(item, providerInfo); - } - /// - /// Gets the data. - /// - /// The artist. - /// Guid. - private Guid GetComparisonData(MusicArtist artist) - { - var songs = artist.RecursiveChildren.OfType