aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Providers/Manager/ProviderManager.cs
diff options
context:
space:
mode:
Diffstat (limited to 'MediaBrowser.Providers/Manager/ProviderManager.cs')
-rw-r--r--MediaBrowser.Providers/Manager/ProviderManager.cs185
1 files changed, 74 insertions, 111 deletions
diff --git a/MediaBrowser.Providers/Manager/ProviderManager.cs b/MediaBrowser.Providers/Manager/ProviderManager.cs
index ced9e4868..19d1e3ba2 100644
--- a/MediaBrowser.Providers/Manager/ProviderManager.cs
+++ b/MediaBrowser.Providers/Manager/ProviderManager.cs
@@ -52,11 +52,10 @@ namespace MediaBrowser.Providers.Manager
private readonly IFileSystem _fileSystem;
- private readonly IProviderRepository _providerRepo;
-
private IMetadataService[] _metadataServices = { };
private IMetadataProvider[] _metadataProviders = { };
private IEnumerable<IMetadataSaver> _savers;
+ private IImageSaver[] _imageSavers;
/// <summary>
/// Initializes a new instance of the <see cref="ProviderManager" /> class.
@@ -66,15 +65,13 @@ namespace MediaBrowser.Providers.Manager
/// <param name="libraryMonitor">The directory watchers.</param>
/// <param name="logManager">The log manager.</param>
/// <param name="fileSystem">The file system.</param>
- /// <param name="providerRepo">The provider repo.</param>
- public ProviderManager(IHttpClient httpClient, IServerConfigurationManager configurationManager, ILibraryMonitor libraryMonitor, ILogManager logManager, IFileSystem fileSystem, IProviderRepository providerRepo)
+ public ProviderManager(IHttpClient httpClient, IServerConfigurationManager configurationManager, ILibraryMonitor libraryMonitor, ILogManager logManager, IFileSystem fileSystem)
{
_logger = logManager.GetLogger("ProviderManager");
_httpClient = httpClient;
ConfigurationManager = configurationManager;
_libraryMonitor = libraryMonitor;
_fileSystem = fileSystem;
- _providerRepo = providerRepo;
}
/// <summary>
@@ -84,13 +81,16 @@ namespace MediaBrowser.Providers.Manager
/// <param name="metadataServices">The metadata services.</param>
/// <param name="metadataProviders">The metadata providers.</param>
/// <param name="metadataSavers">The metadata savers.</param>
- public void AddParts(IEnumerable<IImageProvider> imageProviders, IEnumerable<IMetadataService> metadataServices, IEnumerable<IMetadataProvider> metadataProviders, IEnumerable<IMetadataSaver> metadataSavers)
+ /// <param name="imageSavers">The image savers.</param>
+ public void AddParts(IEnumerable<IImageProvider> imageProviders, IEnumerable<IMetadataService> metadataServices, IEnumerable<IMetadataProvider> metadataProviders, IEnumerable<IMetadataSaver> metadataSavers,
+ IEnumerable<IImageSaver> imageSavers)
{
ImageProviders = imageProviders.ToArray();
_metadataServices = metadataServices.OrderBy(i => i.Order).ToArray();
_metadataProviders = metadataProviders.ToArray();
_savers = metadataSavers.ToArray();
+ _imageSavers = imageSavers.ToArray();
}
public Task RefreshMetadata(IHasMetadata item, MetadataRefreshOptions options, CancellationToken cancellationToken)
@@ -107,62 +107,6 @@ namespace MediaBrowser.Providers.Manager
}
/// <summary>
- /// Saves to library filesystem.
- /// </summary>
- /// <param name="item">The item.</param>
- /// <param name="path">The path.</param>
- /// <param name="dataToSave">The data to save.</param>
- /// <param name="cancellationToken">The cancellation token.</param>
- /// <returns>Task.</returns>
- /// <exception cref="System.ArgumentNullException"></exception>
- public async Task SaveToLibraryFilesystem(BaseItem item, string path, Stream dataToSave, CancellationToken cancellationToken)
- {
- if (item == null)
- {
- throw new ArgumentNullException();
- }
- if (string.IsNullOrEmpty(path))
- {
- throw new ArgumentNullException();
- }
- if (dataToSave == null)
- {
- throw new ArgumentNullException();
- }
-
- if (cancellationToken.IsCancellationRequested)
- {
- dataToSave.Dispose();
- cancellationToken.ThrowIfCancellationRequested();
- }
-
- //Tell the watchers to ignore
- _libraryMonitor.ReportFileSystemChangeBeginning(path);
-
- if (dataToSave.CanSeek)
- {
- dataToSave.Position = 0;
- }
-
- try
- {
- using (dataToSave)
- {
- using (var fs = _fileSystem.GetFileStream(path, FileMode.Create, FileAccess.Write, FileShare.Read, true))
- {
- await dataToSave.CopyToAsync(fs, StreamDefaults.DefaultCopyToBufferSize, cancellationToken).ConfigureAwait(false);
- }
- }
- }
- finally
- {
- //Remove the ignore
- _libraryMonitor.ReportFileSystemChangeComplete(path, false);
- }
- }
-
-
- /// <summary>
/// Saves the image.
/// </summary>
/// <param name="item">The item.</param>
@@ -252,8 +196,13 @@ namespace MediaBrowser.Providers.Manager
result = result.Where(i => i.Type == type.Value);
}
- return string.IsNullOrEmpty(preferredLanguage) ? result :
- FilterImages(result, preferredLanguage);
+ if (string.Equals(preferredLanguage, "en", StringComparison.OrdinalIgnoreCase))
+ {
+ result = result.Where(i => string.IsNullOrEmpty(i.Language) ||
+ string.Equals(i.Language, "en", StringComparison.OrdinalIgnoreCase));
+ }
+
+ return result;
}
catch (Exception ex)
{
@@ -262,17 +211,6 @@ namespace MediaBrowser.Providers.Manager
}
}
- private IEnumerable<RemoteImageInfo> FilterImages(IEnumerable<RemoteImageInfo> images, string preferredLanguage)
- {
- if (string.Equals(preferredLanguage, "en", StringComparison.OrdinalIgnoreCase))
- {
- images = images.Where(i => string.IsNullOrEmpty(i.Language) ||
- string.Equals(i.Language, "en", StringComparison.OrdinalIgnoreCase));
- }
-
- return images;
- }
-
/// <summary>
/// Gets the supported image providers.
/// </summary>
@@ -294,13 +232,16 @@ namespace MediaBrowser.Providers.Manager
private IEnumerable<IImageProvider> GetImageProviders(IHasImages item, MetadataOptions options, bool includeDisabled)
{
+ // Avoid implicitly captured closure
+ var currentOptions = options;
+
return ImageProviders.Where(i => CanRefresh(i, item, options, includeDisabled))
.OrderBy(i =>
{
// See if there's a user-defined order
if (!(i is ILocalImageProvider))
{
- var index = Array.IndexOf(options.ImageFetcherOrder, i.Name);
+ var index = Array.IndexOf(currentOptions.ImageFetcherOrder, i.Name);
if (index != -1)
{
@@ -325,36 +266,13 @@ namespace MediaBrowser.Providers.Manager
private IEnumerable<IMetadataProvider<T>> GetMetadataProvidersInternal<T>(IHasMetadata item, MetadataOptions options, bool includeDisabled)
where T : IHasMetadata
{
- return _metadataProviders.OfType<IMetadataProvider<T>>()
- .Where(i => CanRefresh(i, item, options, includeDisabled))
- .OrderBy(i =>
- {
- // See if there's a user-defined order
- if (i is ILocalMetadataProvider)
- {
- var index = Array.IndexOf(options.LocalMetadataReaderOrder, i.Name);
-
- if (index != -1)
- {
- return index;
- }
- }
-
- // See if there's a user-defined order
- if (i is IRemoteMetadataProvider)
- {
- var index = Array.IndexOf(options.MetadataFetcherOrder, i.Name);
-
- if (index != -1)
- {
- return index;
- }
- }
+ // Avoid implicitly captured closure
+ var currentOptions = options;
- // Not configured. Just return some high number to put it at the end.
- return 100;
- })
- .ThenBy(GetOrder);
+ return _metadataProviders.OfType<IMetadataProvider<T>>()
+ .Where(i => CanRefresh(i, item, currentOptions, includeDisabled))
+ .OrderBy(i => GetConfiguredOrder(i, options))
+ .ThenBy(GetDefaultOrder);
}
private IEnumerable<IRemoteImageProvider> GetRemoteImageProviders(IHasImages item, bool includeDisabled)
@@ -368,6 +286,12 @@ namespace MediaBrowser.Providers.Manager
{
if (!includeDisabled)
{
+ // If locked only allow local providers
+ if (item.IsLocked && !(provider is ILocalMetadataProvider) && !(provider is IForcedProvider))
+ {
+ return false;
+ }
+
if (provider is IRemoteMetadataProvider)
{
if (Array.IndexOf(options.DisabledMetadataFetchers, provider.Name) != -1)
@@ -398,6 +322,12 @@ namespace MediaBrowser.Providers.Manager
{
if (!includeDisabled)
{
+ // If locked only allow local providers
+ if (item.IsLocked && !(provider is ILocalImageProvider))
+ {
+ return false;
+ }
+
if (provider is IRemoteImageProvider)
{
if (Array.IndexOf(options.DisabledImageFetchers, provider.Name) != -1)
@@ -440,12 +370,35 @@ namespace MediaBrowser.Providers.Manager
return hasOrder.Order;
}
- /// <summary>
- /// Gets the order.
- /// </summary>
- /// <param name="provider">The provider.</param>
- /// <returns>System.Int32.</returns>
- private int GetOrder(IMetadataProvider provider)
+ private int GetConfiguredOrder(IMetadataProvider provider, MetadataOptions options)
+ {
+ // See if there's a user-defined order
+ if (provider is ILocalMetadataProvider)
+ {
+ var index = Array.IndexOf(options.LocalMetadataReaderOrder, provider.Name);
+
+ if (index != -1)
+ {
+ return index;
+ }
+ }
+
+ // See if there's a user-defined order
+ if (provider is IRemoteMetadataProvider)
+ {
+ var index = Array.IndexOf(options.MetadataFetcherOrder, provider.Name);
+
+ if (index != -1)
+ {
+ return index;
+ }
+ }
+
+ // Not configured. Just return some high number to put it at the end.
+ return 100;
+ }
+
+ private int GetDefaultOrder(IMetadataProvider provider)
{
var hasOrder = provider as IHasOrder;
@@ -578,6 +531,7 @@ namespace MediaBrowser.Providers.Manager
}
private readonly ConcurrentDictionary<string, SemaphoreSlim> _fileLocks = new ConcurrentDictionary<string, SemaphoreSlim>();
+
/// <summary>
/// Saves the metadata.
/// </summary>
@@ -658,5 +612,14 @@ namespace MediaBrowser.Providers.Manager
return false;
}
}
+
+ //private IEnumerable<TLookupType> GetRemoteSearchResults<TLookupType>(TLookupType searchInfo,
+ // CancellationToken cancellationToken)
+ // where TLookupType : ItemLookupInfo
+ //{
+ // var providers = _metadataProviders.OfType<IRemoteSearchProvider<TLookupType>>();
+
+
+ //}
}
} \ No newline at end of file