aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuke Pulverenti <luke.pulverenti@gmail.com>2014-02-09 18:08:01 -0500
committerLuke Pulverenti <luke.pulverenti@gmail.com>2014-02-09 18:08:01 -0500
commit44bb192ce0e286ced703394f733ca033b489ebc5 (patch)
treeec893218d10581513b4679d6b7da490c3c49ecf9
parent6ff59b7e590be140781292206a55822742f2c8fa (diff)
update wizard function of enable/disable local metadata saving
-rw-r--r--MediaBrowser.Api/ConfigurationService.cs90
-rw-r--r--MediaBrowser.Controller/Library/ILibraryManager.cs6
-rw-r--r--MediaBrowser.Controller/Library/ILibraryPrescanTask.cs20
-rw-r--r--MediaBrowser.Controller/Library/IPeoplePrescanTask.cs20
-rw-r--r--MediaBrowser.Controller/MediaBrowser.Controller.csproj2
-rw-r--r--MediaBrowser.Controller/Providers/IProviderManager.cs7
-rw-r--r--MediaBrowser.Providers/Folders/UserRootFolderNameProvider.cs42
-rw-r--r--MediaBrowser.Providers/Manager/MetadataService.cs11
-rw-r--r--MediaBrowser.Providers/Manager/ProviderManager.cs21
-rw-r--r--MediaBrowser.Providers/MediaBrowser.Providers.csproj7
-rw-r--r--MediaBrowser.Providers/Movies/FanArtMovieUpdatesPostScanTask.cs (renamed from MediaBrowser.Providers/Movies/FanArtMovieUpdatesPrescanTask.cs)6
-rw-r--r--MediaBrowser.Providers/Music/FanArtUpdatesPostScanTask.cs (renamed from MediaBrowser.Providers/Music/FanArtUpdatesPrescanTask.cs)4
-rw-r--r--MediaBrowser.Providers/Savers/AlbumXmlSaver.cs2
-rw-r--r--MediaBrowser.Providers/Savers/ArtistXmlSaver.cs14
-rw-r--r--MediaBrowser.Providers/Savers/BoxSetXmlSaver.cs2
-rw-r--r--MediaBrowser.Providers/Savers/EpisodeXmlSaver.cs2
-rw-r--r--MediaBrowser.Providers/Savers/FolderXmlSaver.cs11
-rw-r--r--MediaBrowser.Providers/Savers/GameSystemXmlSaver.cs2
-rw-r--r--MediaBrowser.Providers/Savers/GameXmlSaver.cs2
-rw-r--r--MediaBrowser.Providers/Savers/MovieXmlSaver.cs2
-rw-r--r--MediaBrowser.Providers/Savers/SeasonXmlSaver.cs2
-rw-r--r--MediaBrowser.Providers/Savers/SeriesXmlSaver.cs2
-rw-r--r--MediaBrowser.Providers/TV/FanArtTvUpdatesPostScanTask.cs (renamed from MediaBrowser.Providers/TV/FanArtTvUpdatesPrescanTask.cs)6
-rw-r--r--MediaBrowser.Providers/TV/SeriesPostScanTask.cs11
-rw-r--r--MediaBrowser.Providers/TV/TvdbPrescanTask.cs2
-rw-r--r--MediaBrowser.Server.Implementations/Library/LibraryManager.cs92
-rw-r--r--MediaBrowser.Server.Implementations/Library/Validators/PeopleValidator.cs62
-rw-r--r--MediaBrowser.ServerApplication/ApplicationHost.cs4
28 files changed, 166 insertions, 288 deletions
diff --git a/MediaBrowser.Api/ConfigurationService.cs b/MediaBrowser.Api/ConfigurationService.cs
index b2a5fa7a7..98897b9d1 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
{
/// <summary>
@@ -106,5 +118,83 @@ namespace MediaBrowser.Api
{
return ToOptimizedSerializedResultUsingCache(_providerManager.GetAllMetadataPlugins().ToList());
}
+
+ /// <summary>
+ /// This is a temporary method used until image settings get broken out.
+ /// </summary>
+ /// <param name="request"></param>
+ 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 d8ba019db..7c803e651 100644
--- a/MediaBrowser.Controller/Library/ILibraryManager.cs
+++ b/MediaBrowser.Controller/Library/ILibraryManager.cs
@@ -162,17 +162,13 @@ namespace MediaBrowser.Controller.Library
/// <param name="resolvers">The resolvers.</param>
/// <param name="introProviders">The intro providers.</param>
/// <param name="itemComparers">The item comparers.</param>
- /// <param name="prescanTasks">The prescan tasks.</param>
/// <param name="postscanTasks">The postscan tasks.</param>
- /// <param name="peoplePrescanTasks">The people prescan tasks.</param>
void AddParts(IEnumerable<IResolverIgnoreRule> rules,
IEnumerable<IVirtualFolderCreator> pluginFolders,
IEnumerable<IItemResolver> resolvers,
IEnumerable<IIntroProvider> introProviders,
IEnumerable<IBaseItemComparer> itemComparers,
- IEnumerable<ILibraryPrescanTask> prescanTasks,
- IEnumerable<ILibraryPostScanTask> postscanTasks,
- IEnumerable<IPeoplePrescanTask> peoplePrescanTasks);
+ IEnumerable<ILibraryPostScanTask> postscanTasks);
/// <summary>
/// Sorts the specified items.
diff --git a/MediaBrowser.Controller/Library/ILibraryPrescanTask.cs b/MediaBrowser.Controller/Library/ILibraryPrescanTask.cs
deleted file mode 100644
index 6a48ba777..000000000
--- 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
-{
- /// <summary>
- /// An interface for tasks that run prior to the media library scan
- /// </summary>
- public interface ILibraryPrescanTask
- {
- /// <summary>
- /// Runs the specified progress.
- /// </summary>
- /// <param name="progress">The progress.</param>
- /// <param name="cancellationToken">The cancellation token.</param>
- /// <returns>Task.</returns>
- Task Run(IProgress<double> progress, CancellationToken cancellationToken);
- }
-}
diff --git a/MediaBrowser.Controller/Library/IPeoplePrescanTask.cs b/MediaBrowser.Controller/Library/IPeoplePrescanTask.cs
deleted file mode 100644
index 04d179bae..000000000
--- 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
-{
- /// <summary>
- /// Interface IPeoplePrescanTask
- /// </summary>
- public interface IPeoplePrescanTask
- {
- /// <summary>
- /// Runs the specified progress.
- /// </summary>
- /// <param name="progress">The progress.</param>
- /// <param name="cancellationToken">The cancellation token.</param>
- /// <returns>Task.</returns>
- Task Run(IProgress<double> progress, CancellationToken cancellationToken);
- }
-}
diff --git a/MediaBrowser.Controller/MediaBrowser.Controller.csproj b/MediaBrowser.Controller/MediaBrowser.Controller.csproj
index efc74e483..18ac01c8b 100644
--- a/MediaBrowser.Controller/MediaBrowser.Controller.csproj
+++ b/MediaBrowser.Controller/MediaBrowser.Controller.csproj
@@ -111,9 +111,7 @@
<Compile Include="Entities\IHasAwards.cs" />
<Compile Include="FileOrganization\IFileOrganizationService.cs" />
<Compile Include="Library\ILibraryPostScanTask.cs" />
- <Compile Include="Library\ILibraryPrescanTask.cs" />
<Compile Include="Library\IMetadataSaver.cs" />
- <Compile Include="Library\IPeoplePrescanTask.cs" />
<Compile Include="Library\ItemUpdateType.cs" />
<Compile Include="Library\IUserDataManager.cs" />
<Compile Include="Library\UserDataSaveEventArgs.cs" />
diff --git a/MediaBrowser.Controller/Providers/IProviderManager.cs b/MediaBrowser.Controller/Providers/IProviderManager.cs
index 4475642cd..e7eb27503 100644
--- a/MediaBrowser.Controller/Providers/IProviderManager.cs
+++ b/MediaBrowser.Controller/Providers/IProviderManager.cs
@@ -88,5 +88,12 @@ namespace MediaBrowser.Controller.Providers
/// <param name="updateType">Type of the update.</param>
/// <returns>Task.</returns>
Task SaveMetadata(IHasMetadata item, ItemUpdateType updateType);
+
+ /// <summary>
+ /// Gets the metadata options.
+ /// </summary>
+ /// <param name="item">The item.</param>
+ /// <returns>MetadataOptions.</returns>
+ 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 043e32d11..000000000
--- 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<bool> 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 f7c2cef94..93879d826 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;
- }
-
/// <summary>
/// Befores the metadata refresh.
/// </summary>
diff --git a/MediaBrowser.Providers/Manager/ProviderManager.cs b/MediaBrowser.Providers/Manager/ProviderManager.cs
index fd19d572c..a6817cf32 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<string, SemaphoreSlim> _fileLocks = new ConcurrentDictionary<string, SemaphoreSlim>();
+ 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();
+ }
+
/// <summary>
/// Saves the metadata.
/// </summary>
@@ -506,7 +514,7 @@ namespace MediaBrowser.Providers.Manager
/// <returns>Task.</returns>
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 672cd86a6..5cf4b2591 100644
--- a/MediaBrowser.Providers/MediaBrowser.Providers.csproj
+++ b/MediaBrowser.Providers/MediaBrowser.Providers.csproj
@@ -135,11 +135,11 @@
<Compile Include="People\MovieDbPersonImageProvider.cs" />
<Compile Include="Movies\MovieUpdatesPrescanTask.cs" />
<Compile Include="Movies\MovieXmlParser.cs" />
- <Compile Include="Movies\FanArtMovieUpdatesPrescanTask.cs" />
+ <Compile Include="Movies\FanArtMovieUpdatesPostScanTask.cs" />
<Compile Include="Movies\MovieDbProvider.cs" />
<Compile Include="Music\AlbumXmlProvider.cs" />
<Compile Include="Music\ArtistXmlProvider.cs" />
- <Compile Include="Music\FanArtUpdatesPrescanTask.cs" />
+ <Compile Include="Music\FanArtUpdatesPostScanTask.cs" />
<Compile Include="Music\LastfmAlbumProvider.cs" />
<Compile Include="Music\LastfmHelper.cs" />
<Compile Include="Music\FanArtAlbumProvider.cs" />
@@ -172,7 +172,7 @@
<Compile Include="TV\EpisodeMetadataService.cs" />
<Compile Include="TV\EpisodeXmlProvider.cs" />
<Compile Include="TV\EpisodeXmlParser.cs" />
- <Compile Include="TV\FanArtTvUpdatesPrescanTask.cs" />
+ <Compile Include="TV\FanArtTvUpdatesPostScanTask.cs" />
<Compile Include="TV\FanartSeasonProvider.cs" />
<Compile Include="TV\FanartSeriesProvider.cs" />
<Compile Include="TV\MovieDbSeriesImageProvider.cs" />
@@ -190,7 +190,6 @@
<Compile Include="TV\SeriesXmlProvider.cs" />
<Compile Include="TV\SeriesXmlParser.cs" />
<Compile Include="TV\TvdbPrescanTask.cs" />
- <Compile Include="Folders\UserRootFolderNameProvider.cs" />
<Compile Include="Users\UserMetadataService.cs" />
<Compile Include="Videos\VideoMetadataService.cs" />
<Compile Include="Years\YearMetadataService.cs" />
diff --git a/MediaBrowser.Providers/Movies/FanArtMovieUpdatesPrescanTask.cs b/MediaBrowser.Providers/Movies/FanArtMovieUpdatesPostScanTask.cs
index 600ba1925..6f911d411 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<string>();
}
- var updates = _jsonSerializer.DeserializeFromString<List<FanartUpdatesPrescanTask.FanArtUpdate>>(json);
+ var updates = _jsonSerializer.DeserializeFromString<List<FanartUpdatesPostScanTask.FanArtUpdate>>(json);
var existingDictionary = existingIds.ToDictionary(i => i, StringComparer.OrdinalIgnoreCase);
diff --git a/MediaBrowser.Providers/Music/FanArtUpdatesPrescanTask.cs b/MediaBrowser.Providers/Music/FanArtUpdatesPostScanTask.cs
index d002c02f2..9d24490b2 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 74c507394..a1595bce1 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 c5c564fba..5a7b85205 100644
--- a/MediaBrowser.Providers/Savers/ArtistXmlSaver.cs
+++ b/MediaBrowser.Providers/Savers/ArtistXmlSaver.cs
@@ -47,20 +47,10 @@ 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 (item is MusicArtist)
- {
- return true;
- }
- }
-
// If new metadata has been downloaded or metadata was manually edited, proceed
- if (wasMetadataDownloaded || wasMetadataEdited)
+ if (wasMetadataEdited || wasMetadataDownloaded)
{
- var artist = item as MusicArtist;
- if (artist != null && artist.IsAccessedByName)
+ if (item is MusicArtist)
{
return true;
}
diff --git a/MediaBrowser.Providers/Savers/BoxSetXmlSaver.cs b/MediaBrowser.Providers/Savers/BoxSetXmlSaver.cs
index fb5c57095..7b142b68e 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 f9932ce75..af73791c9 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 5c21443ce..40e1ab019 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 f0d34df08..020f8987c 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 a2a96909f..6f50cfda8 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 e62a86af0..851c81f54 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 cc0bf8b36..f8d4549cf 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 ffd90b5d1..df0a87c35 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
index db546f3a3..50099dcb8 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<List<FanartUpdatesPrescanTask.FanArtUpdate>>(json);
+ var updates = _jsonSerializer.DeserializeFromString<List<FanartUpdatesPostScanTask.FanArtUpdate>>(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 528661680..035528734 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
{
/// <summary>
/// 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 af4c27278..a9edeee0e 100644
--- a/MediaBrowser.Providers/TV/TvdbPrescanTask.cs
+++ b/MediaBrowser.Providers/TV/TvdbPrescanTask.cs
@@ -21,7 +21,7 @@ namespace MediaBrowser.Providers.TV
/// <summary>
/// Class TvdbPrescanTask
/// </summary>
- public class TvdbPrescanTask : ILibraryPrescanTask
+ public class TvdbPrescanTask : ILibraryPostScanTask
{
/// <summary>
/// The server time URL
diff --git a/MediaBrowser.Server.Implementations/Library/LibraryManager.cs b/MediaBrowser.Server.Implementations/Library/LibraryManager.cs
index 49b2ad562..92d7a4a90 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.
/// </summary>
/// <value>The postscan tasks.</value>
- private IEnumerable<ILibraryPostScanTask> PostscanTasks { get; set; }
- /// <summary>
- /// Gets or sets the prescan tasks.
- /// </summary>
- /// <value>The prescan tasks.</value>
- private IEnumerable<ILibraryPrescanTask> PrescanTasks { get; set; }
-
- /// <summary>
- /// Gets or sets the people prescan tasks.
- /// </summary>
- /// <value>The people prescan tasks.</value>
- private IEnumerable<IPeoplePrescanTask> PeoplePrescanTasks { get; set; }
+ private ILibraryPostScanTask[] PostscanTasks { get; set; }
/// <summary>
/// Gets the intro providers.
/// </summary>
/// <value>The intro providers.</value>
- private IEnumerable<IIntroProvider> IntroProviders { get; set; }
+ private IIntroProvider[] IntroProviders { get; set; }
/// <summary>
/// Gets the list of entity resolution ignore rules
@@ -205,26 +194,27 @@ namespace MediaBrowser.Server.Implementations.Library
/// <param name="resolvers">The resolvers.</param>
/// <param name="introProviders">The intro providers.</param>
/// <param name="itemComparers">The item comparers.</param>
- /// <param name="prescanTasks">The prescan tasks.</param>
/// <param name="postscanTasks">The postscan tasks.</param>
- /// <param name="peoplePrescanTasks">The people prescan tasks.</param>
public void AddParts(IEnumerable<IResolverIgnoreRule> rules,
IEnumerable<IVirtualFolderCreator> pluginFolders,
IEnumerable<IItemResolver> resolvers,
IEnumerable<IIntroProvider> introProviders,
IEnumerable<IBaseItemComparer> itemComparers,
- IEnumerable<ILibraryPrescanTask> prescanTasks,
- IEnumerable<ILibraryPostScanTask> postscanTasks,
- IEnumerable<IPeoplePrescanTask> peoplePrescanTasks)
+ IEnumerable<ILibraryPostScanTask> 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();
}
/// <summary>
@@ -845,7 +835,7 @@ namespace MediaBrowser.Server.Implementations.Library
/// <returns>Task.</returns>
public Task ValidatePeople(CancellationToken cancellationToken, IProgress<double> progress)
{
- return new PeopleValidator(this, PeoplePrescanTasks, _logger).ValidatePeople(cancellationToken, progress);
+ return new PeopleValidator(this, _logger).ValidatePeople(cancellationToken, progress);
}
/// <summary>
@@ -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<double>();
- 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);
@@ -999,55 +984,6 @@ namespace MediaBrowser.Server.Implementations.Library
}
/// <summary>
- /// Runs the prescan tasks.
- /// </summary>
- /// <param name="progress">The progress.</param>
- /// <param name="cancellationToken">The cancellation token.</param>
- /// <returns>Task.</returns>
- private async Task RunPrescanTasks(IProgress<double> progress, CancellationToken cancellationToken)
- {
- var tasks = PrescanTasks.ToList();
-
- var numComplete = 0;
- var numTasks = tasks.Count;
-
- foreach (var task in tasks)
- {
- var innerProgress = new ActionableProgress<double>();
-
- // 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);
- }
-
- /// <summary>
/// Runs the post scan tasks.
/// </summary>
/// <param name="progress">The progress.</param>
diff --git a/MediaBrowser.Server.Implementations/Library/Validators/PeopleValidator.cs b/MediaBrowser.Server.Implementations/Library/Validators/PeopleValidator.cs
index 26e9a23e9..268bccd7a 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
/// </summary>
private readonly ILogger _logger;
- private readonly IEnumerable<IPeoplePrescanTask> _prescanTasks;
-
/// <summary>
/// Initializes a new instance of the <see cref="PeopleValidator" /> class.
/// </summary>
/// <param name="libraryManager">The library manager.</param>
- /// <param name="prescanTasks">The prescan tasks.</param>
/// <param name="logger">The logger.</param>
- public PeopleValidator(ILibraryManager libraryManager, IEnumerable<IPeoplePrescanTask> prescanTasks, ILogger logger)
+ public PeopleValidator(ILibraryManager libraryManager, ILogger logger)
{
_libraryManager = libraryManager;
_logger = logger;
- _prescanTasks = prescanTasks;
}
/// <summary>
@@ -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);
}
-
- /// <summary>
- /// Runs the prescan tasks.
- /// </summary>
- /// <param name="progress">The progress.</param>
- /// <param name="cancellationToken">The cancellation token.</param>
- /// <returns>Task.</returns>
- private async Task RunPrescanTasks(IProgress<double> progress, CancellationToken cancellationToken)
- {
- var tasks = _prescanTasks.ToList();
-
- var numComplete = 0;
- var numTasks = tasks.Count;
-
- foreach (var task in tasks)
- {
- var innerProgress = new ActionableProgress<double>();
-
- // 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 cd2f5779a..695697f8f 100644
--- a/MediaBrowser.ServerApplication/ApplicationHost.cs
+++ b/MediaBrowser.ServerApplication/ApplicationHost.cs
@@ -497,9 +497,7 @@ namespace MediaBrowser.ServerApplication
GetExports<IItemResolver>(),
GetExports<IIntroProvider>(),
GetExports<IBaseItemComparer>(),
- GetExports<ILibraryPrescanTask>(),
- GetExports<ILibraryPostScanTask>(),
- GetExports<IPeoplePrescanTask>());
+ GetExports<ILibraryPostScanTask>());
ProviderManager.AddParts(GetExports<IImageProvider>(), GetExports<IMetadataService>(), GetExports<IMetadataProvider>(),
GetExports<IMetadataSaver>());