From 44bb192ce0e286ced703394f733ca033b489ebc5 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Sun, 9 Feb 2014 18:08:01 -0500 Subject: [PATCH] update wizard function of enable/disable local metadata saving --- MediaBrowser.Api/ConfigurationService.cs | 90 ++++++++++++++++++ .../Library/ILibraryManager.cs | 6 +- .../Library/ILibraryPrescanTask.cs | 20 ---- .../Library/IPeoplePrescanTask.cs | 20 ---- .../MediaBrowser.Controller.csproj | 2 - .../Providers/IProviderManager.cs | 7 ++ .../Folders/UserRootFolderNameProvider.cs | 42 --------- .../Manager/MetadataService.cs | 11 +-- .../Manager/ProviderManager.cs | 21 ++++- .../MediaBrowser.Providers.csproj | 7 +- ...k.cs => FanArtMovieUpdatesPostScanTask.cs} | 6 +- ...anTask.cs => FanArtUpdatesPostScanTask.cs} | 4 +- .../Savers/AlbumXmlSaver.cs | 2 +- .../Savers/ArtistXmlSaver.cs | 14 +-- .../Savers/BoxSetXmlSaver.cs | 2 +- .../Savers/EpisodeXmlSaver.cs | 2 +- .../Savers/FolderXmlSaver.cs | 11 +-- .../Savers/GameSystemXmlSaver.cs | 2 +- MediaBrowser.Providers/Savers/GameXmlSaver.cs | 2 +- .../Savers/MovieXmlSaver.cs | 2 +- .../Savers/SeasonXmlSaver.cs | 2 +- .../Savers/SeriesXmlSaver.cs | 2 +- ...Task.cs => FanArtTvUpdatesPostScanTask.cs} | 6 +- .../TV/SeriesPostScanTask.cs | 11 ++- MediaBrowser.Providers/TV/TvdbPrescanTask.cs | 2 +- .../Library/LibraryManager.cs | 92 +++---------------- .../Library/Validators/PeopleValidator.cs | 62 +------------ .../ApplicationHost.cs | 4 +- 28 files changed, 166 insertions(+), 288 deletions(-) delete mode 100644 MediaBrowser.Controller/Library/ILibraryPrescanTask.cs delete mode 100644 MediaBrowser.Controller/Library/IPeoplePrescanTask.cs delete mode 100644 MediaBrowser.Providers/Folders/UserRootFolderNameProvider.cs rename MediaBrowser.Providers/Movies/{FanArtMovieUpdatesPrescanTask.cs => FanArtMovieUpdatesPostScanTask.cs} (95%) rename MediaBrowser.Providers/Music/{FanArtUpdatesPrescanTask.cs => FanArtUpdatesPostScanTask.cs} (96%) rename MediaBrowser.Providers/TV/{FanArtTvUpdatesPrescanTask.cs => FanArtTvUpdatesPostScanTask.cs} (95%) diff --git a/MediaBrowser.Api/ConfigurationService.cs b/MediaBrowser.Api/ConfigurationService.cs index b2a5fa7a73..98897b9d19 100644 --- a/MediaBrowser.Api/ConfigurationService.cs +++ b/MediaBrowser.Api/ConfigurationService.cs @@ -1,10 +1,15 @@ using MediaBrowser.Common.Extensions; using MediaBrowser.Common.IO; using MediaBrowser.Controller.Configuration; +using MediaBrowser.Controller.Entities; +using MediaBrowser.Controller.Entities.Audio; +using MediaBrowser.Controller.Entities.Movies; +using MediaBrowser.Controller.Entities.TV; using MediaBrowser.Controller.Providers; using MediaBrowser.Model.Configuration; using MediaBrowser.Model.Serialization; using ServiceStack; +using System; using System.Collections.Generic; using System.Linq; @@ -43,6 +48,13 @@ namespace MediaBrowser.Api } + [Route("/System/Configuration/SaveLocalMetadata", "POST")] + [Api(("Updates saving of local metadata and images for all types"))] + public class UpdateSaveLocalMetadata : IReturnVoid + { + public bool Enabled { get; set; } + } + public class ConfigurationService : BaseApiService { /// @@ -106,5 +118,83 @@ namespace MediaBrowser.Api { return ToOptimizedSerializedResultUsingCache(_providerManager.GetAllMetadataPlugins().ToList()); } + + /// + /// This is a temporary method used until image settings get broken out. + /// + /// + public void Post(UpdateSaveLocalMetadata request) + { + var config = _configurationManager.Configuration; + + if (request.Enabled) + { + config.SaveLocalMeta = true; + + foreach (var options in config.MetadataOptions) + { + options.DisabledMetadataSavers = new string[] { }; + } + } + else + { + config.SaveLocalMeta = false; + + DisableSaversForType(typeof(Game), config); + DisableSaversForType(typeof(GameSystem), config); + DisableSaversForType(typeof(Movie), config); + DisableSaversForType(typeof(Trailer), config); + DisableSaversForType(typeof(BoxSet), config); + DisableSaversForType(typeof(Book), config); + DisableSaversForType(typeof(Series), config); + DisableSaversForType(typeof(Season), config); + DisableSaversForType(typeof(Episode), config); + DisableSaversForType(typeof(MusicAlbum), config); + DisableSaversForType(typeof(MusicArtist), config); + DisableSaversForType(typeof(AdultVideo), config); + DisableSaversForType(typeof(MusicVideo), config); + DisableSaversForType(typeof(Video), config); + } + + _configurationManager.SaveConfiguration(); + } + + private void DisableSaversForType(Type type, ServerConfiguration config) + { + var options = GetMetadataOptions(type, config); + + const string mediabrowserSaverName = "Media Browser Xml"; + + if (!options.DisabledMetadataSavers.Contains(mediabrowserSaverName, StringComparer.OrdinalIgnoreCase)) + { + var list = options.DisabledMetadataSavers.ToList(); + + list.Add(mediabrowserSaverName); + + options.DisabledMetadataSavers = list.ToArray(); + } + } + + private MetadataOptions GetMetadataOptions(Type type, ServerConfiguration config) + { + var options = config.MetadataOptions + .FirstOrDefault(i => string.Equals(i.ItemType, type.Name, StringComparison.OrdinalIgnoreCase)); + + if (options == null) + { + var list = config.MetadataOptions.ToList(); + + options = new MetadataOptions + { + ItemType = type.Name + }; + + list.Add(options); + + config.MetadataOptions = list.ToArray(); + } + + return options; + } } } diff --git a/MediaBrowser.Controller/Library/ILibraryManager.cs b/MediaBrowser.Controller/Library/ILibraryManager.cs index d8ba019db3..7c803e651b 100644 --- a/MediaBrowser.Controller/Library/ILibraryManager.cs +++ b/MediaBrowser.Controller/Library/ILibraryManager.cs @@ -162,17 +162,13 @@ namespace MediaBrowser.Controller.Library /// The resolvers. /// The intro providers. /// The item comparers. - /// The prescan tasks. /// The postscan tasks. - /// The people prescan tasks. void AddParts(IEnumerable rules, IEnumerable pluginFolders, IEnumerable resolvers, IEnumerable introProviders, IEnumerable itemComparers, - IEnumerable prescanTasks, - IEnumerable postscanTasks, - IEnumerable peoplePrescanTasks); + IEnumerable postscanTasks); /// /// Sorts the specified items. diff --git a/MediaBrowser.Controller/Library/ILibraryPrescanTask.cs b/MediaBrowser.Controller/Library/ILibraryPrescanTask.cs deleted file mode 100644 index 6a48ba7770..0000000000 --- a/MediaBrowser.Controller/Library/ILibraryPrescanTask.cs +++ /dev/null @@ -1,20 +0,0 @@ -using System; -using System.Threading; -using System.Threading.Tasks; - -namespace MediaBrowser.Controller.Library -{ - /// - /// An interface for tasks that run prior to the media library scan - /// - public interface ILibraryPrescanTask - { - /// - /// Runs the specified progress. - /// - /// The progress. - /// The cancellation token. - /// Task. - Task Run(IProgress progress, CancellationToken cancellationToken); - } -} diff --git a/MediaBrowser.Controller/Library/IPeoplePrescanTask.cs b/MediaBrowser.Controller/Library/IPeoplePrescanTask.cs deleted file mode 100644 index 04d179baef..0000000000 --- a/MediaBrowser.Controller/Library/IPeoplePrescanTask.cs +++ /dev/null @@ -1,20 +0,0 @@ -using System; -using System.Threading; -using System.Threading.Tasks; - -namespace MediaBrowser.Controller.Library -{ - /// - /// Interface IPeoplePrescanTask - /// - public interface IPeoplePrescanTask - { - /// - /// Runs the specified progress. - /// - /// The progress. - /// The cancellation token. - /// Task. - Task Run(IProgress progress, CancellationToken cancellationToken); - } -} diff --git a/MediaBrowser.Controller/MediaBrowser.Controller.csproj b/MediaBrowser.Controller/MediaBrowser.Controller.csproj index efc74e4833..18ac01c8b5 100644 --- a/MediaBrowser.Controller/MediaBrowser.Controller.csproj +++ b/MediaBrowser.Controller/MediaBrowser.Controller.csproj @@ -111,9 +111,7 @@ - - diff --git a/MediaBrowser.Controller/Providers/IProviderManager.cs b/MediaBrowser.Controller/Providers/IProviderManager.cs index 4475642cda..e7eb275033 100644 --- a/MediaBrowser.Controller/Providers/IProviderManager.cs +++ b/MediaBrowser.Controller/Providers/IProviderManager.cs @@ -88,5 +88,12 @@ namespace MediaBrowser.Controller.Providers /// Type of the update. /// Task. Task SaveMetadata(IHasMetadata item, ItemUpdateType updateType); + + /// + /// Gets the metadata options. + /// + /// The item. + /// MetadataOptions. + MetadataOptions GetMetadataOptions(IHasMetadata item); } } \ No newline at end of file diff --git a/MediaBrowser.Providers/Folders/UserRootFolderNameProvider.cs b/MediaBrowser.Providers/Folders/UserRootFolderNameProvider.cs deleted file mode 100644 index 043e32d119..0000000000 --- a/MediaBrowser.Providers/Folders/UserRootFolderNameProvider.cs +++ /dev/null @@ -1,42 +0,0 @@ -using MediaBrowser.Controller.Configuration; -using MediaBrowser.Controller.Entities; -using MediaBrowser.Controller.Providers; -using MediaBrowser.Model.Logging; -using System; -using System.IO; -using System.Threading; -using System.Threading.Tasks; - -namespace MediaBrowser.Providers.Folders -{ - public class UserRootFolderNameProvider : BaseMetadataProvider - { - public UserRootFolderNameProvider(ILogManager logManager, IServerConfigurationManager configurationManager) - : base(logManager, configurationManager) - { - } - - public override bool Supports(BaseItem item) - { - return item is UserRootFolder; - } - - public override Task FetchAsync(BaseItem item, bool force, BaseProviderInfo providerInfo, CancellationToken cancellationToken) - { - var parentName = Path.GetFileNameWithoutExtension(item.Path); - - if (string.Equals(parentName, "default", StringComparison.OrdinalIgnoreCase)) - { - item.Name = "Media Library"; - } - - SetLastRefreshed(item, DateTime.UtcNow, providerInfo); - return TrueTaskResult; - } - - public override MetadataProviderPriority Priority - { - get { return MetadataProviderPriority.First; } - } - } -} diff --git a/MediaBrowser.Providers/Manager/MetadataService.cs b/MediaBrowser.Providers/Manager/MetadataService.cs index f7c2cef945..93879d826f 100644 --- a/MediaBrowser.Providers/Manager/MetadataService.cs +++ b/MediaBrowser.Providers/Manager/MetadataService.cs @@ -71,7 +71,7 @@ namespace MediaBrowser.Providers.Manager } var itemOfType = (TItemType)item; - var config = GetMetadataOptions(itemOfType); + var config = ProviderManager.GetMetadataOptions(item); var updateType = ItemUpdateType.Unspecified; var refreshResult = GetLastResult(item.Id); @@ -157,15 +157,6 @@ namespace MediaBrowser.Providers.Manager } } - private readonly MetadataOptions _defaultOptions = new MetadataOptions(); - protected MetadataOptions GetMetadataOptions(TItemType item) - { - var type = item.GetType().Name; - return ServerConfigurationManager.Configuration.MetadataOptions - .FirstOrDefault(i => string.Equals(i.ItemType, type, StringComparison.OrdinalIgnoreCase)) ?? - _defaultOptions; - } - /// /// Befores the metadata refresh. /// diff --git a/MediaBrowser.Providers/Manager/ProviderManager.cs b/MediaBrowser.Providers/Manager/ProviderManager.cs index fd19d572c8..a6817cf320 100644 --- a/MediaBrowser.Providers/Manager/ProviderManager.cs +++ b/MediaBrowser.Providers/Manager/ProviderManager.cs @@ -470,7 +470,7 @@ namespace MediaBrowser.Providers.Manager })); // Savers - list.AddRange(_savers.Where(i => IsSaverEnabledForItem(i, item, ItemUpdateType.MetadataEdit)).OrderBy(i => i.Name).Select(i => new MetadataPlugin + list.AddRange(_savers.Where(i => IsSaverEnabledForItem(i, item, ItemUpdateType.MetadataEdit, false)).OrderBy(i => i.Name).Select(i => new MetadataPlugin { Name = i.Name, Type = MetadataPluginType.MetadataSaver @@ -498,6 +498,14 @@ namespace MediaBrowser.Providers.Manager private readonly ConcurrentDictionary _fileLocks = new ConcurrentDictionary(); + public MetadataOptions GetMetadataOptions(IHasMetadata item) + { + var type = item.GetType().Name; + return ConfigurationManager.Configuration.MetadataOptions + .FirstOrDefault(i => string.Equals(i.ItemType, type, StringComparison.OrdinalIgnoreCase)) ?? + new MetadataOptions(); + } + /// /// Saves the metadata. /// @@ -506,7 +514,7 @@ namespace MediaBrowser.Providers.Manager /// Task. public async Task SaveMetadata(IHasMetadata item, ItemUpdateType updateType) { - foreach (var saver in _savers.Where(i => IsSaverEnabledForItem(i, item, updateType))) + foreach (var saver in _savers.Where(i => IsSaverEnabledForItem(i, item, updateType, true))) { _logger.Debug("Saving {0} to {1}.", item.Path ?? item.Name, saver.Name); @@ -559,10 +567,17 @@ namespace MediaBrowser.Providers.Manager } } - private bool IsSaverEnabledForItem(IMetadataSaver saver, IHasMetadata item, ItemUpdateType updateType) + private bool IsSaverEnabledForItem(IMetadataSaver saver, IHasMetadata item, ItemUpdateType updateType, bool enforceConfiguration) { + var options = GetMetadataOptions(item); + try { + if (enforceConfiguration && options.DisabledMetadataSavers.Contains(saver.Name, StringComparer.OrdinalIgnoreCase)) + { + return false; + } + return saver.IsEnabledFor(item, updateType); } catch (Exception ex) diff --git a/MediaBrowser.Providers/MediaBrowser.Providers.csproj b/MediaBrowser.Providers/MediaBrowser.Providers.csproj index 672cd86a61..5cf4b25919 100644 --- a/MediaBrowser.Providers/MediaBrowser.Providers.csproj +++ b/MediaBrowser.Providers/MediaBrowser.Providers.csproj @@ -135,11 +135,11 @@ - + - + @@ -172,7 +172,7 @@ - + @@ -190,7 +190,6 @@ - diff --git a/MediaBrowser.Providers/Movies/FanArtMovieUpdatesPrescanTask.cs b/MediaBrowser.Providers/Movies/FanArtMovieUpdatesPostScanTask.cs similarity index 95% rename from MediaBrowser.Providers/Movies/FanArtMovieUpdatesPrescanTask.cs rename to MediaBrowser.Providers/Movies/FanArtMovieUpdatesPostScanTask.cs index 600ba1925e..6f911d4111 100644 --- a/MediaBrowser.Providers/Movies/FanArtMovieUpdatesPrescanTask.cs +++ b/MediaBrowser.Providers/Movies/FanArtMovieUpdatesPostScanTask.cs @@ -16,7 +16,7 @@ using System.Threading.Tasks; namespace MediaBrowser.Providers.Movies { - class FanartMovieUpdatesPrescanTask : ILibraryPostScanTask + class FanartMovieUpdatesPostScanTask : ILibraryPostScanTask { private const string UpdatesUrl = "http://api.fanart.tv/webservice/newmovies/{0}/{1}/"; @@ -37,7 +37,7 @@ namespace MediaBrowser.Providers.Movies private static readonly CultureInfo UsCulture = new CultureInfo("en-US"); - public FanartMovieUpdatesPrescanTask(IJsonSerializer jsonSerializer, IServerConfigurationManager config, ILogger logger, IHttpClient httpClient, IFileSystem fileSystem) + public FanartMovieUpdatesPostScanTask(IJsonSerializer jsonSerializer, IServerConfigurationManager config, ILogger logger, IHttpClient httpClient, IFileSystem fileSystem) { _jsonSerializer = jsonSerializer; _config = config; @@ -118,7 +118,7 @@ namespace MediaBrowser.Providers.Movies return new List(); } - var updates = _jsonSerializer.DeserializeFromString>(json); + var updates = _jsonSerializer.DeserializeFromString>(json); var existingDictionary = existingIds.ToDictionary(i => i, StringComparer.OrdinalIgnoreCase); diff --git a/MediaBrowser.Providers/Music/FanArtUpdatesPrescanTask.cs b/MediaBrowser.Providers/Music/FanArtUpdatesPostScanTask.cs similarity index 96% rename from MediaBrowser.Providers/Music/FanArtUpdatesPrescanTask.cs rename to MediaBrowser.Providers/Music/FanArtUpdatesPostScanTask.cs index d002c02f2b..9d24490b22 100644 --- a/MediaBrowser.Providers/Music/FanArtUpdatesPrescanTask.cs +++ b/MediaBrowser.Providers/Music/FanArtUpdatesPostScanTask.cs @@ -15,7 +15,7 @@ using System.Threading.Tasks; namespace MediaBrowser.Providers.Music { - class FanartUpdatesPrescanTask : ILibraryPostScanTask + class FanartUpdatesPostScanTask : ILibraryPostScanTask { private const string UpdatesUrl = "http://api.fanart.tv/webservice/newmusic/{0}/{1}/"; @@ -36,7 +36,7 @@ namespace MediaBrowser.Providers.Music private static readonly CultureInfo UsCulture = new CultureInfo("en-US"); - public FanartUpdatesPrescanTask(IJsonSerializer jsonSerializer, IServerConfigurationManager config, ILogger logger, IHttpClient httpClient, IFileSystem fileSystem) + public FanartUpdatesPostScanTask(IJsonSerializer jsonSerializer, IServerConfigurationManager config, ILogger logger, IHttpClient httpClient, IFileSystem fileSystem) { _jsonSerializer = jsonSerializer; _config = config; diff --git a/MediaBrowser.Providers/Savers/AlbumXmlSaver.cs b/MediaBrowser.Providers/Savers/AlbumXmlSaver.cs index 74c5073946..a1595bce17 100644 --- a/MediaBrowser.Providers/Savers/AlbumXmlSaver.cs +++ b/MediaBrowser.Providers/Savers/AlbumXmlSaver.cs @@ -46,7 +46,7 @@ namespace MediaBrowser.Providers.Savers var wasMetadataDownloaded = (updateType & ItemUpdateType.MetadataDownload) == ItemUpdateType.MetadataDownload; // If new metadata has been downloaded and save local is on - if (item.IsSaveLocalMetadataEnabled() && (wasMetadataEdited || wasMetadataDownloaded)) + if (wasMetadataEdited || wasMetadataDownloaded) { return item is MusicAlbum; } diff --git a/MediaBrowser.Providers/Savers/ArtistXmlSaver.cs b/MediaBrowser.Providers/Savers/ArtistXmlSaver.cs index c5c564fba6..5a7b852051 100644 --- a/MediaBrowser.Providers/Savers/ArtistXmlSaver.cs +++ b/MediaBrowser.Providers/Savers/ArtistXmlSaver.cs @@ -47,8 +47,8 @@ namespace MediaBrowser.Providers.Savers var wasMetadataEdited = (updateType & ItemUpdateType.MetadataEdit) == ItemUpdateType.MetadataEdit; var wasMetadataDownloaded = (updateType & ItemUpdateType.MetadataDownload) == ItemUpdateType.MetadataDownload; - // If new metadata has been downloaded and save local is on - if (item.IsSaveLocalMetadataEnabled() && (wasMetadataEdited || wasMetadataDownloaded)) + // If new metadata has been downloaded or metadata was manually edited, proceed + if (wasMetadataEdited || wasMetadataDownloaded) { if (item is MusicArtist) { @@ -56,16 +56,6 @@ namespace MediaBrowser.Providers.Savers } } - // If new metadata has been downloaded or metadata was manually edited, proceed - if (wasMetadataDownloaded || wasMetadataEdited) - { - var artist = item as MusicArtist; - if (artist != null && artist.IsAccessedByName) - { - return true; - } - } - return false; } diff --git a/MediaBrowser.Providers/Savers/BoxSetXmlSaver.cs b/MediaBrowser.Providers/Savers/BoxSetXmlSaver.cs index fb5c570953..7b142b68ec 100644 --- a/MediaBrowser.Providers/Savers/BoxSetXmlSaver.cs +++ b/MediaBrowser.Providers/Savers/BoxSetXmlSaver.cs @@ -46,7 +46,7 @@ namespace MediaBrowser.Providers.Savers var wasMetadataDownloaded = (updateType & ItemUpdateType.MetadataDownload) == ItemUpdateType.MetadataDownload; // If new metadata has been downloaded and save local is on - if (item.IsSaveLocalMetadataEnabled() && (wasMetadataEdited || wasMetadataDownloaded)) + if (wasMetadataEdited || wasMetadataDownloaded) { return item is BoxSet; } diff --git a/MediaBrowser.Providers/Savers/EpisodeXmlSaver.cs b/MediaBrowser.Providers/Savers/EpisodeXmlSaver.cs index f9932ce755..af73791c99 100644 --- a/MediaBrowser.Providers/Savers/EpisodeXmlSaver.cs +++ b/MediaBrowser.Providers/Savers/EpisodeXmlSaver.cs @@ -37,7 +37,7 @@ namespace MediaBrowser.Providers.Savers var wasMetadataDownloaded = (updateType & ItemUpdateType.MetadataDownload) == ItemUpdateType.MetadataDownload; // If new metadata has been downloaded and save local is on - if (item.IsSaveLocalMetadataEnabled() && (wasMetadataEdited || wasMetadataDownloaded)) + if (wasMetadataEdited || wasMetadataDownloaded) { return item is Episode; } diff --git a/MediaBrowser.Providers/Savers/FolderXmlSaver.cs b/MediaBrowser.Providers/Savers/FolderXmlSaver.cs index 5c21443ceb..40e1ab0199 100644 --- a/MediaBrowser.Providers/Savers/FolderXmlSaver.cs +++ b/MediaBrowser.Providers/Savers/FolderXmlSaver.cs @@ -55,7 +55,7 @@ namespace MediaBrowser.Providers.Savers var wasMetadataDownloaded = (updateType & ItemUpdateType.MetadataDownload) == ItemUpdateType.MetadataDownload; // If new metadata has been downloaded and save local is on - if (item.IsSaveLocalMetadataEnabled() && (wasMetadataEdited || wasMetadataDownloaded)) + if (wasMetadataEdited || wasMetadataDownloaded) { if (!(item is Series) && !(item is BoxSet) && !(item is MusicArtist) && !(item is MusicAlbum) && !(item is Season) && @@ -65,15 +65,6 @@ namespace MediaBrowser.Providers.Savers } } - // If new metadata has been downloaded or metadata was manually edited, proceed - if (wasMetadataDownloaded || wasMetadataEdited) - { - if (item is AggregateFolder || item is UserRootFolder || item is CollectionFolder) - { - return true; - } - } - return false; } diff --git a/MediaBrowser.Providers/Savers/GameSystemXmlSaver.cs b/MediaBrowser.Providers/Savers/GameSystemXmlSaver.cs index f0d34df08f..020f8987ce 100644 --- a/MediaBrowser.Providers/Savers/GameSystemXmlSaver.cs +++ b/MediaBrowser.Providers/Savers/GameSystemXmlSaver.cs @@ -46,7 +46,7 @@ namespace MediaBrowser.Providers.Savers var wasMetadataDownloaded = (updateType & ItemUpdateType.MetadataDownload) == ItemUpdateType.MetadataDownload; // If new metadata has been downloaded and save local is on - if (item.IsSaveLocalMetadataEnabled() && (wasMetadataEdited || wasMetadataDownloaded)) + if (wasMetadataEdited || wasMetadataDownloaded) { return item is GameSystem; } diff --git a/MediaBrowser.Providers/Savers/GameXmlSaver.cs b/MediaBrowser.Providers/Savers/GameXmlSaver.cs index a2a96909f0..6f50cfda83 100644 --- a/MediaBrowser.Providers/Savers/GameXmlSaver.cs +++ b/MediaBrowser.Providers/Savers/GameXmlSaver.cs @@ -49,7 +49,7 @@ namespace MediaBrowser.Providers.Savers var wasMetadataDownloaded = (updateType & ItemUpdateType.MetadataDownload) == ItemUpdateType.MetadataDownload; // If new metadata has been downloaded and save local is on - if (item.IsSaveLocalMetadataEnabled() && (wasMetadataEdited || wasMetadataDownloaded)) + if (wasMetadataEdited || wasMetadataDownloaded) { return item is Game; } diff --git a/MediaBrowser.Providers/Savers/MovieXmlSaver.cs b/MediaBrowser.Providers/Savers/MovieXmlSaver.cs index e62a86af02..851c81f54f 100644 --- a/MediaBrowser.Providers/Savers/MovieXmlSaver.cs +++ b/MediaBrowser.Providers/Savers/MovieXmlSaver.cs @@ -56,7 +56,7 @@ namespace MediaBrowser.Providers.Savers var wasMetadataDownloaded = (updateType & ItemUpdateType.MetadataDownload) == ItemUpdateType.MetadataDownload; // If new metadata has been downloaded and save local is on - if (item.IsSaveLocalMetadataEnabled() && (wasMetadataEdited || wasMetadataDownloaded)) + if (wasMetadataEdited || wasMetadataDownloaded) { var video = item as Video; // Check parent for null to avoid running this against things like video backdrops diff --git a/MediaBrowser.Providers/Savers/SeasonXmlSaver.cs b/MediaBrowser.Providers/Savers/SeasonXmlSaver.cs index cc0bf8b36f..f8d4549cfa 100644 --- a/MediaBrowser.Providers/Savers/SeasonXmlSaver.cs +++ b/MediaBrowser.Providers/Savers/SeasonXmlSaver.cs @@ -46,7 +46,7 @@ namespace MediaBrowser.Providers.Savers var wasMetadataDownloaded = (updateType & ItemUpdateType.MetadataDownload) == ItemUpdateType.MetadataDownload; // If new metadata has been downloaded and save local is on - if (item.IsSaveLocalMetadataEnabled() && (wasMetadataEdited || wasMetadataDownloaded)) + if (wasMetadataEdited || wasMetadataDownloaded) { return item is Season; } diff --git a/MediaBrowser.Providers/Savers/SeriesXmlSaver.cs b/MediaBrowser.Providers/Savers/SeriesXmlSaver.cs index ffd90b5d18..df0a87c35b 100644 --- a/MediaBrowser.Providers/Savers/SeriesXmlSaver.cs +++ b/MediaBrowser.Providers/Savers/SeriesXmlSaver.cs @@ -46,7 +46,7 @@ namespace MediaBrowser.Providers.Savers var wasMetadataDownloaded = (updateType & ItemUpdateType.MetadataDownload) == ItemUpdateType.MetadataDownload; // If new metadata has been downloaded and save local is on - if (item.IsSaveLocalMetadataEnabled() && (wasMetadataEdited || wasMetadataDownloaded)) + if (wasMetadataEdited || wasMetadataDownloaded) { return item is Series; } diff --git a/MediaBrowser.Providers/TV/FanArtTvUpdatesPrescanTask.cs b/MediaBrowser.Providers/TV/FanArtTvUpdatesPostScanTask.cs similarity index 95% rename from MediaBrowser.Providers/TV/FanArtTvUpdatesPrescanTask.cs rename to MediaBrowser.Providers/TV/FanArtTvUpdatesPostScanTask.cs index db546f3a34..50099dcb89 100644 --- a/MediaBrowser.Providers/TV/FanArtTvUpdatesPrescanTask.cs +++ b/MediaBrowser.Providers/TV/FanArtTvUpdatesPostScanTask.cs @@ -16,7 +16,7 @@ using System.Threading.Tasks; namespace MediaBrowser.Providers.TV { - class FanArtTvUpdatesPrescanTask : ILibraryPostScanTask + class FanArtTvUpdatesPostScanTask : ILibraryPostScanTask { private const string UpdatesUrl = "http://api.fanart.tv/webservice/newtv/{0}/{1}/"; @@ -37,7 +37,7 @@ namespace MediaBrowser.Providers.TV private static readonly CultureInfo UsCulture = new CultureInfo("en-US"); - public FanArtTvUpdatesPrescanTask(IJsonSerializer jsonSerializer, IServerConfigurationManager config, ILogger logger, IHttpClient httpClient, IFileSystem fileSystem) + public FanArtTvUpdatesPostScanTask(IJsonSerializer jsonSerializer, IServerConfigurationManager config, ILogger logger, IHttpClient httpClient, IFileSystem fileSystem) { _jsonSerializer = jsonSerializer; _config = config; @@ -127,7 +127,7 @@ namespace MediaBrowser.Providers.TV var existingDictionary = existingSeriesIds.ToDictionary(i => i, StringComparer.OrdinalIgnoreCase); - var updates = _jsonSerializer.DeserializeFromString>(json); + var updates = _jsonSerializer.DeserializeFromString>(json); return updates.Select(i => i.id).Where(existingDictionary.ContainsKey); } diff --git a/MediaBrowser.Providers/TV/SeriesPostScanTask.cs b/MediaBrowser.Providers/TV/SeriesPostScanTask.cs index 528661680b..035528734a 100644 --- a/MediaBrowser.Providers/TV/SeriesPostScanTask.cs +++ b/MediaBrowser.Providers/TV/SeriesPostScanTask.cs @@ -17,7 +17,7 @@ using System.Xml; namespace MediaBrowser.Providers.TV { - class SeriesPostScanTask : ILibraryPostScanTask + class SeriesPostScanTask : ILibraryPostScanTask, IHasOrder { /// /// The _library manager @@ -89,6 +89,15 @@ namespace MediaBrowser.Providers.TV progress.Report(percent); } } + + public int Order + { + get + { + // Run after tvdb update task + return 1; + } + } } class MissingEpisodeProvider diff --git a/MediaBrowser.Providers/TV/TvdbPrescanTask.cs b/MediaBrowser.Providers/TV/TvdbPrescanTask.cs index af4c27278d..a9edeee0e6 100644 --- a/MediaBrowser.Providers/TV/TvdbPrescanTask.cs +++ b/MediaBrowser.Providers/TV/TvdbPrescanTask.cs @@ -21,7 +21,7 @@ namespace MediaBrowser.Providers.TV /// /// Class TvdbPrescanTask /// - public class TvdbPrescanTask : ILibraryPrescanTask + public class TvdbPrescanTask : ILibraryPostScanTask { /// /// The server time URL diff --git a/MediaBrowser.Server.Implementations/Library/LibraryManager.cs b/MediaBrowser.Server.Implementations/Library/LibraryManager.cs index 49b2ad5621..92d7a4a90c 100644 --- a/MediaBrowser.Server.Implementations/Library/LibraryManager.cs +++ b/MediaBrowser.Server.Implementations/Library/LibraryManager.cs @@ -38,24 +38,13 @@ namespace MediaBrowser.Server.Implementations.Library /// Gets or sets the postscan tasks. /// /// The postscan tasks. - private IEnumerable PostscanTasks { get; set; } - /// - /// Gets or sets the prescan tasks. - /// - /// The prescan tasks. - private IEnumerable PrescanTasks { get; set; } - - /// - /// Gets or sets the people prescan tasks. - /// - /// The people prescan tasks. - private IEnumerable PeoplePrescanTasks { get; set; } + private ILibraryPostScanTask[] PostscanTasks { get; set; } /// /// Gets the intro providers. /// /// The intro providers. - private IEnumerable IntroProviders { get; set; } + private IIntroProvider[] IntroProviders { get; set; } /// /// Gets the list of entity resolution ignore rules @@ -205,26 +194,27 @@ namespace MediaBrowser.Server.Implementations.Library /// The resolvers. /// The intro providers. /// The item comparers. - /// The prescan tasks. /// The postscan tasks. - /// The people prescan tasks. public void AddParts(IEnumerable rules, IEnumerable pluginFolders, IEnumerable resolvers, IEnumerable introProviders, IEnumerable itemComparers, - IEnumerable prescanTasks, - IEnumerable postscanTasks, - IEnumerable peoplePrescanTasks) + IEnumerable postscanTasks) { EntityResolutionIgnoreRules = rules.ToArray(); PluginFolderCreators = pluginFolders.ToArray(); EntityResolvers = resolvers.OrderBy(i => i.Priority).ToArray(); - IntroProviders = introProviders; + IntroProviders = introProviders.ToArray(); Comparers = itemComparers.ToArray(); - PrescanTasks = prescanTasks; - PostscanTasks = postscanTasks; - PeoplePrescanTasks = peoplePrescanTasks; + + PostscanTasks = postscanTasks.OrderBy(i => + { + var hasOrder = i as IHasOrder; + + return hasOrder == null ? 0 : hasOrder.Order; + + }).ToArray(); } /// @@ -845,7 +835,7 @@ namespace MediaBrowser.Server.Implementations.Library /// Task. public Task ValidatePeople(CancellationToken cancellationToken, IProgress progress) { - return new PeopleValidator(this, PeoplePrescanTasks, _logger).ValidatePeople(cancellationToken, progress); + return new PeopleValidator(this, _logger).ValidatePeople(cancellationToken, progress); } /// @@ -970,14 +960,9 @@ namespace MediaBrowser.Server.Implementations.Library innerProgress.RegisterAction(pct => progress.Report(2 + pct * .13)); - // Run prescan tasks - await RunPrescanTasks(innerProgress, cancellationToken).ConfigureAwait(false); - - progress.Report(15); - innerProgress = new ActionableProgress(); - innerProgress.RegisterAction(pct => progress.Report(15 + pct * .6)); + innerProgress.RegisterAction(pct => progress.Report(2 + pct * .73)); // Now validate the entire media library await RootFolder.ValidateChildren(innerProgress, cancellationToken, new MetadataRefreshOptions(), recursive: true).ConfigureAwait(false); @@ -998,55 +983,6 @@ namespace MediaBrowser.Server.Implementations.Library GC.Collect(2, GCCollectionMode.Forced, true); } - /// - /// Runs the prescan tasks. - /// - /// The progress. - /// The cancellation token. - /// Task. - private async Task RunPrescanTasks(IProgress progress, CancellationToken cancellationToken) - { - var tasks = PrescanTasks.ToList(); - - var numComplete = 0; - var numTasks = tasks.Count; - - foreach (var task in tasks) - { - var innerProgress = new ActionableProgress(); - - // Prevent access to modified closure - var currentNumComplete = numComplete; - - innerProgress.RegisterAction(pct => - { - double innerPercent = (currentNumComplete * 100) + pct; - innerPercent /= numTasks; - progress.Report(innerPercent); - }); - - try - { - await task.Run(innerProgress, cancellationToken); - } - catch (OperationCanceledException) - { - _logger.Info("Pre-scan task cancelled: {0}", task.GetType().Name); - } - catch (Exception ex) - { - _logger.ErrorException("Error running pre-scan task", ex); - } - - numComplete++; - double percent = numComplete; - percent /= numTasks; - progress.Report(percent * 100); - } - - progress.Report(100); - } - /// /// Runs the post scan tasks. /// diff --git a/MediaBrowser.Server.Implementations/Library/Validators/PeopleValidator.cs b/MediaBrowser.Server.Implementations/Library/Validators/PeopleValidator.cs index 26e9a23e99..268bccd7ab 100644 --- a/MediaBrowser.Server.Implementations/Library/Validators/PeopleValidator.cs +++ b/MediaBrowser.Server.Implementations/Library/Validators/PeopleValidator.cs @@ -3,7 +3,6 @@ using MediaBrowser.Controller.Library; using MediaBrowser.Model.Logging; using MoreLinq; using System; -using System.Collections.Generic; using System.Linq; using System.Threading; using System.Threading.Tasks; @@ -24,19 +23,15 @@ namespace MediaBrowser.Server.Implementations.Library.Validators /// private readonly ILogger _logger; - private readonly IEnumerable _prescanTasks; - /// /// Initializes a new instance of the class. /// /// The library manager. - /// The prescan tasks. /// The logger. - public PeopleValidator(ILibraryManager libraryManager, IEnumerable prescanTasks, ILogger logger) + public PeopleValidator(ILibraryManager libraryManager, ILogger logger) { _libraryManager = libraryManager; _logger = logger; - _prescanTasks = prescanTasks; } /// @@ -51,11 +46,6 @@ namespace MediaBrowser.Server.Implementations.Library.Validators innerProgress.RegisterAction(pct => progress.Report(pct * .15)); - // Run prescan tasks - await RunPrescanTasks(innerProgress, cancellationToken).ConfigureAwait(false); - - progress.Report(15); - var people = _libraryManager.RootFolder.GetRecursiveChildren() .SelectMany(c => c.People) .DistinctBy(p => p.Name, StringComparer.OrdinalIgnoreCase) @@ -94,55 +84,5 @@ namespace MediaBrowser.Server.Implementations.Library.Validators GC.Collect(2, GCCollectionMode.Forced, true); GC.Collect(2, GCCollectionMode.Forced, true); } - - /// - /// Runs the prescan tasks. - /// - /// The progress. - /// The cancellation token. - /// Task. - private async Task RunPrescanTasks(IProgress progress, CancellationToken cancellationToken) - { - var tasks = _prescanTasks.ToList(); - - var numComplete = 0; - var numTasks = tasks.Count; - - foreach (var task in tasks) - { - var innerProgress = new ActionableProgress(); - - // Prevent access to modified closure - var currentNumComplete = numComplete; - - innerProgress.RegisterAction(pct => - { - double innerPercent = (currentNumComplete * 100) + pct; - innerPercent /= numTasks; - progress.Report(innerPercent); - }); - - try - { - await task.Run(innerProgress, cancellationToken); - } - catch (OperationCanceledException) - { - _logger.Info("Pre-scan task cancelled: {0}", task.GetType().Name); - break; - } - catch (Exception ex) - { - _logger.ErrorException("Error running pre-scan task", ex); - } - - numComplete++; - double percent = numComplete; - percent /= numTasks; - progress.Report(percent * 100); - } - - progress.Report(100); - } } } diff --git a/MediaBrowser.ServerApplication/ApplicationHost.cs b/MediaBrowser.ServerApplication/ApplicationHost.cs index cd2f5779a8..695697f8f5 100644 --- a/MediaBrowser.ServerApplication/ApplicationHost.cs +++ b/MediaBrowser.ServerApplication/ApplicationHost.cs @@ -497,9 +497,7 @@ namespace MediaBrowser.ServerApplication GetExports(), GetExports(), GetExports(), - GetExports(), - GetExports(), - GetExports()); + GetExports()); ProviderManager.AddParts(GetExports(), GetExports(), GetExports(), GetExports());