diff --git a/MediaBrowser.Api/ItemUpdateService.cs b/MediaBrowser.Api/ItemUpdateService.cs
index 84f495efa8..1eaf4acb1b 100644
--- a/MediaBrowser.Api/ItemUpdateService.cs
+++ b/MediaBrowser.Api/ItemUpdateService.cs
@@ -5,7 +5,6 @@ using MediaBrowser.Controller.Entities.TV;
using MediaBrowser.Controller.Library;
using MediaBrowser.Controller.LiveTv;
using MediaBrowser.Model.Dto;
-using MediaBrowser.Model.Entities;
using ServiceStack;
using System;
using System.Linq;
@@ -94,8 +93,8 @@ namespace MediaBrowser.Api
{
var item = _dtoService.GetItemByDtoId(request.ItemId);
- var newEnableInternetProviders = request.EnableInternetProviders ?? true;
- var dontFetchMetaChanged = item.DontFetchMeta != !newEnableInternetProviders;
+ var newLockData = request.LockData ?? false;
+ var dontFetchMetaChanged = item.DontFetchMeta != newLockData;
UpdateItem(request, item);
@@ -107,7 +106,7 @@ namespace MediaBrowser.Api
foreach (var child in folder.RecursiveChildren.ToList())
{
- child.DontFetchMeta = !newEnableInternetProviders;
+ child.DontFetchMeta = newLockData;
await _libraryManager.UpdateItem(child, ItemUpdateType.MetadataEdit, CancellationToken.None).ConfigureAwait(false);
}
}
@@ -307,16 +306,13 @@ namespace MediaBrowser.Api
{
hasAspectRatio.AspectRatio = request.AspectRatio;
}
-
- item.DontFetchMeta = !(request.EnableInternetProviders ?? true);
- if (request.EnableInternetProviders ?? true)
+
+ item.DontFetchMeta = (request.LockData ?? false);
+
+ if (request.LockedFields != null)
{
item.LockedFields = request.LockedFields;
}
- else
- {
- item.LockedFields.Clear();
- }
// Only allow this for series. Runtimes for media comes from ffprobe.
if (item is Series)
diff --git a/MediaBrowser.Api/Playback/Progressive/BaseProgressiveStreamingService.cs b/MediaBrowser.Api/Playback/Progressive/BaseProgressiveStreamingService.cs
index 65e6c04b72..09b87bce9a 100644
--- a/MediaBrowser.Api/Playback/Progressive/BaseProgressiveStreamingService.cs
+++ b/MediaBrowser.Api/Playback/Progressive/BaseProgressiveStreamingService.cs
@@ -240,6 +240,13 @@ namespace MediaBrowser.Api.Playback.Progressive
responseHeaders["Accept-Ranges"] = "none";
+ var length = response.Headers["Content-Length"];
+
+ if (!string.IsNullOrEmpty(length))
+ {
+ responseHeaders["Content-Length"] = length;
+ }
+
if (isHeadRequest)
{
using (response.Content)
@@ -273,13 +280,13 @@ namespace MediaBrowser.Api.Playback.Progressive
// Use the command line args with a dummy playlist path
var outputPath = GetOutputFilePath(state);
+ responseHeaders["Accept-Ranges"] = "none";
+
var contentType = MimeTypes.GetMimeType(outputPath);
// Headers only
if (isHeadRequest)
{
- responseHeaders["Accept-Ranges"] = "none";
-
return ResultFactory.GetResult(new byte[] { }, contentType, responseHeaders);
}
@@ -294,7 +301,6 @@ namespace MediaBrowser.Api.Playback.Progressive
var result = new ProgressiveStreamWriter(outputPath, Logger, FileSystem);
- result.Options["Accept-Ranges"] = "none";
result.Options["Content-Type"] = contentType;
// Add the response headers to the result object
diff --git a/MediaBrowser.Controller/Entities/Audio/MusicArtist.cs b/MediaBrowser.Controller/Entities/Audio/MusicArtist.cs
index 2583450a3b..27e1643075 100644
--- a/MediaBrowser.Controller/Entities/Audio/MusicArtist.cs
+++ b/MediaBrowser.Controller/Entities/Audio/MusicArtist.cs
@@ -179,7 +179,7 @@ namespace MediaBrowser.Controller.Entities.Audio
// Refresh all non-songs
foreach (var item in others)
{
- if (tasks.Count > 3)
+ if (tasks.Count >= 3)
{
await Task.WhenAll(tasks).ConfigureAwait(false);
tasks.Clear();
diff --git a/MediaBrowser.Controller/Entities/BaseItem.cs b/MediaBrowser.Controller/Entities/BaseItem.cs
index 62ea0cf5d1..224907a72a 100644
--- a/MediaBrowser.Controller/Entities/BaseItem.cs
+++ b/MediaBrowser.Controller/Entities/BaseItem.cs
@@ -216,8 +216,18 @@ namespace MediaBrowser.Controller.Entities
/// Returns true if this item should not attempt to fetch metadata
///
/// true if [dont fetch meta]; otherwise, false.
+ [Obsolete("Please use IsLocked instead of DontFetchMeta")]
public bool DontFetchMeta { get; set; }
+ [IgnoreDataMember]
+ public bool IsLocked
+ {
+ get
+ {
+ return DontFetchMeta;
+ }
+ }
+
///
/// Gets or sets the locked fields.
///
diff --git a/MediaBrowser.Controller/Entities/Folder.cs b/MediaBrowser.Controller/Entities/Folder.cs
index c928a130e0..c08a2ddf2f 100644
--- a/MediaBrowser.Controller/Entities/Folder.cs
+++ b/MediaBrowser.Controller/Entities/Folder.cs
@@ -521,7 +521,7 @@ namespace MediaBrowser.Controller.Entities
foreach (var child in children)
{
- if (tasks.Count >= 4)
+ if (tasks.Count >= 3)
{
await Task.WhenAll(tasks).ConfigureAwait(false);
tasks.Clear();
diff --git a/MediaBrowser.Controller/Entities/IHasImages.cs b/MediaBrowser.Controller/Entities/IHasImages.cs
index e07db88c4e..8e66605dd9 100644
--- a/MediaBrowser.Controller/Entities/IHasImages.cs
+++ b/MediaBrowser.Controller/Entities/IHasImages.cs
@@ -148,6 +148,12 @@ namespace MediaBrowser.Controller.Entities
///
/// true if this instance is in mixed folder; otherwise, false.
bool IsInMixedFolder { get; }
+
+ ///
+ /// Gets a value indicating whether this instance is locked.
+ ///
+ /// true if this instance is locked; otherwise, false.
+ bool IsLocked { get; }
}
public static class HasImagesExtensions
diff --git a/MediaBrowser.Controller/Entities/Movies/BoxSet.cs b/MediaBrowser.Controller/Entities/Movies/BoxSet.cs
index 3fd2af0917..6cd078677d 100644
--- a/MediaBrowser.Controller/Entities/Movies/BoxSet.cs
+++ b/MediaBrowser.Controller/Entities/Movies/BoxSet.cs
@@ -99,7 +99,7 @@ namespace MediaBrowser.Controller.Entities.Movies
// Refresh songs
foreach (var item in items)
{
- if (tasks.Count >= 4)
+ if (tasks.Count >= 3)
{
await Task.WhenAll(tasks).ConfigureAwait(false);
tasks.Clear();
diff --git a/MediaBrowser.Controller/MediaBrowser.Controller.csproj b/MediaBrowser.Controller/MediaBrowser.Controller.csproj
index b62492bfed..32f2d151d4 100644
--- a/MediaBrowser.Controller/MediaBrowser.Controller.csproj
+++ b/MediaBrowser.Controller/MediaBrowser.Controller.csproj
@@ -147,9 +147,11 @@
+
+
@@ -216,7 +218,7 @@
-
+
@@ -224,7 +226,6 @@
-
diff --git a/MediaBrowser.Controller/Providers/BaseItemXmlParser.cs b/MediaBrowser.Controller/Providers/BaseItemXmlParser.cs
index 59b7cd8db9..ada0aa6e29 100644
--- a/MediaBrowser.Controller/Providers/BaseItemXmlParser.cs
+++ b/MediaBrowser.Controller/Providers/BaseItemXmlParser.cs
@@ -719,7 +719,7 @@ namespace MediaBrowser.Controller.Providers
}
break;
}
- case "TvRageId":
+ case "TVRageId":
{
var id = reader.ReadElementContentAsString();
if (!string.IsNullOrWhiteSpace(id))
diff --git a/MediaBrowser.Controller/Providers/BaseMetadataProvider.cs b/MediaBrowser.Controller/Providers/BaseMetadataProvider.cs
deleted file mode 100644
index f8580244a1..0000000000
--- a/MediaBrowser.Controller/Providers/BaseMetadataProvider.cs
+++ /dev/null
@@ -1,268 +0,0 @@
-using MediaBrowser.Common.Extensions;
-using MediaBrowser.Controller.Configuration;
-using MediaBrowser.Controller.Entities;
-using MediaBrowser.Controller.Library;
-using MediaBrowser.Model.Logging;
-using System;
-using System.Threading;
-using System.Threading.Tasks;
-
-namespace MediaBrowser.Controller.Providers
-{
- ///
- /// Class BaseMetadataProvider
- ///
- public abstract class BaseMetadataProvider
- {
- ///
- /// Gets the logger.
- ///
- /// The logger.
- protected ILogger Logger { get; set; }
-
- protected ILogManager LogManager { get; set; }
-
- ///
- /// Gets the configuration manager.
- ///
- /// The configuration manager.
- protected IServerConfigurationManager ConfigurationManager { get; private set; }
-
- ///
- /// The _id
- ///
- public readonly Guid Id;
-
- ///
- /// The true task result
- ///
- protected static readonly Task TrueTaskResult = Task.FromResult(true);
-
- protected static readonly Task FalseTaskResult = Task.FromResult(false);
-
- ///
- /// Supportses the specified item.
- ///
- /// The item.
- /// true if XXXX, false otherwise
- public abstract bool Supports(BaseItem item);
-
- ///
- /// Gets a value indicating whether [requires internet].
- ///
- /// true if [requires internet]; otherwise, false.
- public virtual bool RequiresInternet
- {
- get
- {
- return false;
- }
- }
-
- ///
- /// Gets the provider version.
- ///
- /// The provider version.
- protected virtual string ProviderVersion
- {
- get
- {
- return null;
- }
- }
-
- public virtual ItemUpdateType ItemUpdateType
- {
- get { return RequiresInternet ? ItemUpdateType.MetadataDownload : ItemUpdateType.MetadataImport; }
- }
-
- ///
- /// Gets a value indicating whether [refresh on version change].
- ///
- /// true if [refresh on version change]; otherwise, false.
- protected virtual bool RefreshOnVersionChange
- {
- get
- {
- return false;
- }
- }
-
- ///
- /// Determines if this provider is relatively slow and, therefore, should be skipped
- /// in certain instances. Default is whether or not it requires internet. Can be overridden
- /// for explicit designation.
- ///
- /// true if this instance is slow; otherwise, false.
- public virtual bool IsSlow
- {
- get { return RequiresInternet; }
- }
-
- ///
- /// Initializes a new instance of the class.
- ///
- protected BaseMetadataProvider(ILogManager logManager, IServerConfigurationManager configurationManager)
- {
- Logger = logManager.GetLogger(GetType().Name);
- LogManager = logManager;
- ConfigurationManager = configurationManager;
- Id = GetType().FullName.GetMD5();
-
- Initialize();
- }
-
- ///
- /// Initializes this instance.
- ///
- protected virtual void Initialize()
- {
- }
-
- ///
- /// Sets the persisted last refresh date on the item for this provider.
- ///
- /// The item.
- /// The value.
- /// The provider version.
- /// The provider information.
- /// The status.
- /// item
- public virtual void SetLastRefreshed(BaseItem item, DateTime value, string providerVersion,
- BaseProviderInfo providerInfo, ProviderRefreshStatus status = ProviderRefreshStatus.Success)
- {
- if (item == null)
- {
- throw new ArgumentNullException("item");
- }
-
- providerInfo.LastRefreshed = value;
- providerInfo.LastRefreshStatus = status;
- providerInfo.ProviderVersion = providerVersion;
- }
-
- ///
- /// Sets the last refreshed.
- ///
- /// The item.
- /// The value.
- /// The provider information.
- /// The status.
- public void SetLastRefreshed(BaseItem item, DateTime value,
- BaseProviderInfo providerInfo, ProviderRefreshStatus status = ProviderRefreshStatus.Success)
- {
- SetLastRefreshed(item, value, ProviderVersion, providerInfo, status);
- }
-
- ///
- /// Returns whether or not this provider should be re-fetched. Default functionality can
- /// compare a provided date with a last refresh time. This can be overridden for more complex
- /// determinations.
- ///
- /// The item.
- /// true if XXXX, false otherwise
- ///
- public bool NeedsRefresh(BaseItem item, BaseProviderInfo data)
- {
- if (item == null)
- {
- throw new ArgumentNullException();
- }
-
- return NeedsRefreshInternal(item, data);
- }
-
- ///
- /// Gets a value indicating whether [enforce dont fetch metadata].
- ///
- /// true if [enforce dont fetch metadata]; otherwise, false.
- public virtual bool EnforceDontFetchMetadata
- {
- get
- {
- return true;
- }
- }
-
- ///
- /// Needses the refresh internal.
- ///
- /// The item.
- /// The provider info.
- /// true if XXXX, false otherwise
- ///
- protected virtual bool NeedsRefreshInternal(BaseItem item, BaseProviderInfo providerInfo)
- {
- if (item == null)
- {
- throw new ArgumentNullException("item");
- }
-
- if (providerInfo == null)
- {
- throw new ArgumentNullException("providerInfo");
- }
-
- if (providerInfo.LastRefreshed == default(DateTime))
- {
- return true;
- }
-
- if (NeedsRefreshBasedOnCompareDate(item, providerInfo))
- {
- return true;
- }
-
- if (RefreshOnVersionChange && !String.Equals(ProviderVersion, providerInfo.ProviderVersion))
- {
- return true;
- }
-
- if (providerInfo.LastRefreshStatus != ProviderRefreshStatus.Success)
- {
- return true;
- }
-
- return false;
- }
-
- ///
- /// Needses the refresh based on compare date.
- ///
- /// The item.
- /// The provider info.
- /// true if XXXX, false otherwise
- protected virtual bool NeedsRefreshBasedOnCompareDate(BaseItem item, BaseProviderInfo providerInfo)
- {
- return CompareDate(item) > providerInfo.LastRefreshed;
- }
-
- ///
- /// Override this to return the date that should be compared to the last refresh date
- /// to determine if this provider should be re-fetched.
- ///
- /// The item.
- /// DateTime.
- protected virtual DateTime CompareDate(BaseItem item)
- {
- return DateTime.MinValue.AddMinutes(1); // want this to be greater than mindate so new items will refresh
- }
-
- ///
- /// Fetches metadata and returns true or false indicating if any work that requires persistence was done
- ///
- /// The item.
- /// if set to true [force].
- /// The provider information.
- /// The cancellation token.
- /// Task{System.Boolean}.
- ///
- public abstract Task FetchAsync(BaseItem item, bool force, BaseProviderInfo providerInfo, CancellationToken cancellationToken);
-
- ///
- /// Gets the priority.
- ///
- /// The priority.
- public abstract MetadataProviderPriority Priority { get; }
- }
-}
diff --git a/MediaBrowser.Controller/Providers/BaseProviderInfo.cs b/MediaBrowser.Controller/Providers/BaseProviderInfo.cs
deleted file mode 100644
index 3a33924f0d..0000000000
--- a/MediaBrowser.Controller/Providers/BaseProviderInfo.cs
+++ /dev/null
@@ -1,51 +0,0 @@
-using System;
-
-namespace MediaBrowser.Controller.Providers
-{
- ///
- /// Class BaseProviderInfo
- ///
- public class BaseProviderInfo
- {
- public Guid ProviderId { get; set; }
- ///
- /// Gets or sets the last refreshed.
- ///
- /// The last refreshed.
- public DateTime LastRefreshed { get; set; }
- ///
- /// Gets or sets the file system stamp.
- ///
- /// The file system stamp.
- public Guid FileStamp { get; set; }
- ///
- /// Gets or sets the last refresh status.
- ///
- /// The last refresh status.
- public ProviderRefreshStatus LastRefreshStatus { get; set; }
- ///
- /// Gets or sets the provider version.
- ///
- /// The provider version.
- public string ProviderVersion { get; set; }
- }
-
- ///
- /// Enum ProviderRefreshStatus
- ///
- public enum ProviderRefreshStatus
- {
- ///
- /// The success
- ///
- Success = 0,
- ///
- /// The completed with errors
- ///
- CompletedWithErrors = 1,
- ///
- /// The failure
- ///
- Failure = 2
- }
-}
diff --git a/MediaBrowser.Controller/Providers/IForcedProvider.cs b/MediaBrowser.Controller/Providers/IForcedProvider.cs
new file mode 100644
index 0000000000..9e35b00ad6
--- /dev/null
+++ b/MediaBrowser.Controller/Providers/IForcedProvider.cs
@@ -0,0 +1,10 @@
+
+namespace MediaBrowser.Controller.Providers
+{
+ ///
+ /// This is a marker interface that will cause a provider to run even if IsLocked=true
+ ///
+ public interface IForcedProvider
+ {
+ }
+}
diff --git a/MediaBrowser.Controller/Providers/IImageSaver.cs b/MediaBrowser.Controller/Providers/IImageSaver.cs
new file mode 100644
index 0000000000..5516c08f6a
--- /dev/null
+++ b/MediaBrowser.Controller/Providers/IImageSaver.cs
@@ -0,0 +1,29 @@
+using MediaBrowser.Controller.Drawing;
+using MediaBrowser.Controller.Entities;
+using MediaBrowser.Model.Entities;
+using System.Collections.Generic;
+
+namespace MediaBrowser.Controller.Providers
+{
+ public interface IImageSaver
+ {
+ ///
+ /// Gets the name.
+ ///
+ /// The name.
+ string Name { get; }
+ }
+
+ public interface IImageFileSaver : IImageSaver
+ {
+ ///
+ /// Gets the save paths.
+ ///
+ /// The item.
+ /// The type.
+ /// The format.
+ /// The index.
+ /// IEnumerable{System.String}.
+ IEnumerable GetSavePaths(IHasImages item, ImageType type, ImageFormat format, int index);
+ }
+}
diff --git a/MediaBrowser.Controller/Providers/IMetadataProvider.cs b/MediaBrowser.Controller/Providers/IMetadataProvider.cs
index 70bc060594..d33b2c9eb0 100644
--- a/MediaBrowser.Controller/Providers/IMetadataProvider.cs
+++ b/MediaBrowser.Controller/Providers/IMetadataProvider.cs
@@ -1,5 +1,4 @@
-using System;
-using MediaBrowser.Controller.Entities;
+using MediaBrowser.Controller.Entities;
namespace MediaBrowser.Controller.Providers
{
@@ -26,10 +25,8 @@ namespace MediaBrowser.Controller.Providers
}
public class MetadataResult
- where T : IHasMetadata
{
public bool HasMetadata { get; set; }
public T Item { get; set; }
}
-
}
diff --git a/MediaBrowser.Controller/Providers/IProviderManager.cs b/MediaBrowser.Controller/Providers/IProviderManager.cs
index 4aeb86a6a0..eb4d3d9a65 100644
--- a/MediaBrowser.Controller/Providers/IProviderManager.cs
+++ b/MediaBrowser.Controller/Providers/IProviderManager.cs
@@ -55,8 +55,10 @@ namespace MediaBrowser.Controller.Providers
/// The metadata services.
/// The metadata providers.
/// The savers.
+ /// The image savers.
void AddParts(IEnumerable imageProviders, IEnumerable metadataServices, IEnumerable metadataProviders,
- IEnumerable savers);
+ IEnumerable savers,
+ IEnumerable imageSavers);
///
/// Gets the available remote images.
diff --git a/MediaBrowser.Controller/Providers/IRemoteMetadataProvider.cs b/MediaBrowser.Controller/Providers/IRemoteMetadataProvider.cs
index cbbd62557e..065017cce4 100644
--- a/MediaBrowser.Controller/Providers/IRemoteMetadataProvider.cs
+++ b/MediaBrowser.Controller/Providers/IRemoteMetadataProvider.cs
@@ -1,6 +1,7 @@
-using System.Threading;
+using MediaBrowser.Controller.Entities;
+using System.Collections.Generic;
+using System.Threading;
using System.Threading.Tasks;
-using MediaBrowser.Controller.Entities;
namespace MediaBrowser.Controller.Providers
{
@@ -8,10 +9,24 @@ namespace MediaBrowser.Controller.Providers
{
}
- public interface IRemoteMetadataProvider : IMetadataProvider, IRemoteMetadataProvider
+ public interface IRemoteMetadataProvider : IMetadataProvider, IRemoteMetadataProvider
where TItemType : IHasMetadata, IHasLookupInfo
where TLookupInfoType : ItemLookupInfo, new()
{
Task> GetMetadata(TLookupInfoType info, CancellationToken cancellationToken);
}
+
+ public interface IRemoteSearchProvider
+ where TLookupInfoType : ItemLookupInfo
+ {
+ Task>> GetSearchResults(TLookupInfoType searchInfo, CancellationToken cancellationToken);
+ }
+
+ public class SearchResult
+ where T : ItemLookupInfo
+ {
+ public T Item { get; set; }
+
+ public string ImageUrl { get; set; }
+ }
}
diff --git a/MediaBrowser.Controller/Providers/ProviderRefreshStatus.cs b/MediaBrowser.Controller/Providers/ProviderRefreshStatus.cs
new file mode 100644
index 0000000000..6523dc4173
--- /dev/null
+++ b/MediaBrowser.Controller/Providers/ProviderRefreshStatus.cs
@@ -0,0 +1,22 @@
+
+namespace MediaBrowser.Controller.Providers
+{
+ ///
+ /// Enum ProviderRefreshStatus
+ ///
+ public enum ProviderRefreshStatus
+ {
+ ///
+ /// The success
+ ///
+ Success = 0,
+ ///
+ /// The completed with errors
+ ///
+ CompletedWithErrors = 1,
+ ///
+ /// The failure
+ ///
+ Failure = 2
+ }
+}
diff --git a/MediaBrowser.Model/Dto/BaseItemDto.cs b/MediaBrowser.Model/Dto/BaseItemDto.cs
index 566c136b76..8f43304463 100644
--- a/MediaBrowser.Model/Dto/BaseItemDto.cs
+++ b/MediaBrowser.Model/Dto/BaseItemDto.cs
@@ -657,7 +657,7 @@ namespace MediaBrowser.Model.Dto
/// Gets or sets a value indicating whether [enable internet providers].
///
/// true if [enable internet providers]; otherwise, false.
- public bool? EnableInternetProviders { get; set; }
+ public bool? LockData { get; set; }
///
/// Gets a value indicating whether this instance can resume.
diff --git a/MediaBrowser.Model/Entities/LocationType.cs b/MediaBrowser.Model/Entities/LocationType.cs
index 09c0b20cab..84de803aa2 100644
--- a/MediaBrowser.Model/Entities/LocationType.cs
+++ b/MediaBrowser.Model/Entities/LocationType.cs
@@ -9,18 +9,18 @@ namespace MediaBrowser.Model.Entities
///
/// The file system
///
- FileSystem = 1,
+ FileSystem = 0,
///
/// The remote
///
- Remote = 2,
+ Remote = 1,
///
/// The virtual
///
- Virtual = 3,
+ Virtual = 2,
///
/// The offline
///
- Offline = 4
+ Offline = 3
}
}
diff --git a/MediaBrowser.Model/Notifications/NotificationLevel.cs b/MediaBrowser.Model/Notifications/NotificationLevel.cs
index c7e68b163a..a49ee2fe63 100644
--- a/MediaBrowser.Model/Notifications/NotificationLevel.cs
+++ b/MediaBrowser.Model/Notifications/NotificationLevel.cs
@@ -3,8 +3,8 @@ namespace MediaBrowser.Model.Notifications
{
public enum NotificationLevel
{
- Normal = 1,
- Warning = 2,
- Error = 3
+ Normal = 0,
+ Warning = 1,
+ Error = 2
}
}
diff --git a/MediaBrowser.Providers/Genres/GenreMetadataService.cs b/MediaBrowser.Providers/Genres/GenreMetadataService.cs
index b19241095f..f408d026b1 100644
--- a/MediaBrowser.Providers/Genres/GenreMetadataService.cs
+++ b/MediaBrowser.Providers/Genres/GenreMetadataService.cs
@@ -1,25 +1,19 @@
using MediaBrowser.Common.IO;
using MediaBrowser.Controller.Configuration;
using MediaBrowser.Controller.Entities;
-using MediaBrowser.Controller.Library;
using MediaBrowser.Controller.Providers;
using MediaBrowser.Model.Entities;
using MediaBrowser.Model.Logging;
using MediaBrowser.Providers.Manager;
using System.Collections.Generic;
-using System.Threading;
-using System.Threading.Tasks;
namespace MediaBrowser.Providers.Genres
{
public class GenreMetadataService : MetadataService
{
- private readonly ILibraryManager _libraryManager;
-
- public GenreMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem, ILibraryManager libraryManager)
+ public GenreMetadataService(IServerConfigurationManager serverConfigurationManager, ILogger logger, IProviderManager providerManager, IProviderRepository providerRepo, IFileSystem fileSystem)
: base(serverConfigurationManager, logger, providerManager, providerRepo, fileSystem)
{
- _libraryManager = libraryManager;
}
///
diff --git a/MediaBrowser.Providers/Manager/ProviderManager.cs b/MediaBrowser.Providers/Manager/ProviderManager.cs
index ced9e48680..19d1e3ba2f 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 _savers;
+ private IImageSaver[] _imageSavers;
///
/// Initializes a new instance of the class.
@@ -66,15 +65,13 @@ namespace MediaBrowser.Providers.Manager
/// The directory watchers.
/// The log manager.
/// The file system.
- /// The provider repo.
- 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;
}
///
@@ -84,13 +81,16 @@ namespace MediaBrowser.Providers.Manager
/// The metadata services.
/// The metadata providers.
/// The metadata savers.
- public void AddParts(IEnumerable imageProviders, IEnumerable metadataServices, IEnumerable metadataProviders, IEnumerable metadataSavers)
+ /// The image savers.
+ public void AddParts(IEnumerable imageProviders, IEnumerable metadataServices, IEnumerable metadataProviders, IEnumerable metadataSavers,
+ IEnumerable 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)
@@ -106,62 +106,6 @@ namespace MediaBrowser.Providers.Manager
return Task.FromResult(true);
}
- ///
- /// Saves to library filesystem.
- ///
- /// The item.
- /// The path.
- /// The data to save.
- /// The cancellation token.
- /// Task.
- ///
- 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);
- }
- }
-
-
///
/// Saves the image.
///
@@ -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 FilterImages(IEnumerable 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;
- }
-
///
/// Gets the supported image providers.
///
@@ -294,13 +232,16 @@ namespace MediaBrowser.Providers.Manager
private IEnumerable 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> GetMetadataProvidersInternal(IHasMetadata item, MetadataOptions options, bool includeDisabled)
where T : IHasMetadata
{
+ // Avoid implicitly captured closure
+ var currentOptions = options;
+
return _metadataProviders.OfType>()
- .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;
- }
- }
-
- // Not configured. Just return some high number to put it at the end.
- return 100;
- })
- .ThenBy(GetOrder);
+ .Where(i => CanRefresh(i, item, currentOptions, includeDisabled))
+ .OrderBy(i => GetConfiguredOrder(i, options))
+ .ThenBy(GetDefaultOrder);
}
private IEnumerable 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;
}
- ///
- /// Gets the order.
- ///
- /// The provider.
- /// System.Int32.
- 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 _fileLocks = new ConcurrentDictionary();
+
///
/// Saves the metadata.
///
@@ -658,5 +612,14 @@ namespace MediaBrowser.Providers.Manager
return false;
}
}
+
+ //private IEnumerable GetRemoteSearchResults(TLookupType searchInfo,
+ // CancellationToken cancellationToken)
+ // where TLookupType : ItemLookupInfo
+ //{
+ // var providers = _metadataProviders.OfType>();
+
+
+ //}
}
}
\ No newline at end of file
diff --git a/MediaBrowser.Providers/MediaBrowser.Providers.csproj b/MediaBrowser.Providers/MediaBrowser.Providers.csproj
index 3a7fcd918d..724a60b97c 100644
--- a/MediaBrowser.Providers/MediaBrowser.Providers.csproj
+++ b/MediaBrowser.Providers/MediaBrowser.Providers.csproj
@@ -198,6 +198,7 @@
+
diff --git a/MediaBrowser.Providers/MediaInfo/FFProbeProvider.cs b/MediaBrowser.Providers/MediaInfo/FFProbeProvider.cs
index 7ac48655a9..161532fd31 100644
--- a/MediaBrowser.Providers/MediaInfo/FFProbeProvider.cs
+++ b/MediaBrowser.Providers/MediaInfo/FFProbeProvider.cs
@@ -31,7 +31,8 @@ namespace MediaBrowser.Providers.MediaInfo
ICustomMetadataProvider