aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Controller/Providers
diff options
context:
space:
mode:
authorLuke Pulverenti <luke.pulverenti@gmail.com>2014-01-28 13:37:01 -0500
committerLuke Pulverenti <luke.pulverenti@gmail.com>2014-01-28 13:37:01 -0500
commitad82c9f5e95e2b1f94ba7adda047dbfbc38004ea (patch)
tree52ab08873cb353faff048edecf8d97d49114b4db /MediaBrowser.Controller/Providers
parentd748967c5de99ba20a788c2448b066fc3fc4fecb (diff)
New provider system. Only for people right now
Diffstat (limited to 'MediaBrowser.Controller/Providers')
-rw-r--r--MediaBrowser.Controller/Providers/IHasMetadata.cs31
-rw-r--r--MediaBrowser.Controller/Providers/IImageProvider.cs28
-rw-r--r--MediaBrowser.Controller/Providers/ILocalImageProvider.cs58
-rw-r--r--MediaBrowser.Controller/Providers/IMetadataProvider.cs90
-rw-r--r--MediaBrowser.Controller/Providers/IMetadataService.cs38
-rw-r--r--MediaBrowser.Controller/Providers/IProviderManager.cs20
-rw-r--r--MediaBrowser.Controller/Providers/IRemoteImageProvider.cs48
-rw-r--r--MediaBrowser.Controller/Providers/MetadataRefreshOptions.cs49
-rw-r--r--MediaBrowser.Controller/Providers/ProviderResult.cs60
9 files changed, 392 insertions, 30 deletions
diff --git a/MediaBrowser.Controller/Providers/IHasMetadata.cs b/MediaBrowser.Controller/Providers/IHasMetadata.cs
new file mode 100644
index 0000000000..33c5184b8b
--- /dev/null
+++ b/MediaBrowser.Controller/Providers/IHasMetadata.cs
@@ -0,0 +1,31 @@
+using MediaBrowser.Controller.Entities;
+using MediaBrowser.Model.Entities;
+using System;
+using System.Collections.Generic;
+
+namespace MediaBrowser.Controller.Providers
+{
+ /// <summary>
+ /// Interface IHasMetadata
+ /// </summary>
+ public interface IHasMetadata : IHasImages, IHasProviderIds
+ {
+ /// <summary>
+ /// Gets the preferred metadata country code.
+ /// </summary>
+ /// <returns>System.String.</returns>
+ string GetPreferredMetadataCountryCode();
+
+ /// <summary>
+ /// Gets the locked fields.
+ /// </summary>
+ /// <value>The locked fields.</value>
+ List<MetadataFields> LockedFields { get; }
+
+ /// <summary>
+ /// Gets or sets the date last saved.
+ /// </summary>
+ /// <value>The date last saved.</value>
+ DateTime DateLastSaved { get; set; }
+ }
+}
diff --git a/MediaBrowser.Controller/Providers/IImageProvider.cs b/MediaBrowser.Controller/Providers/IImageProvider.cs
index ccf1998445..61f5579f4b 100644
--- a/MediaBrowser.Controller/Providers/IImageProvider.cs
+++ b/MediaBrowser.Controller/Providers/IImageProvider.cs
@@ -1,9 +1,4 @@
using MediaBrowser.Controller.Entities;
-using MediaBrowser.Model.Entities;
-using MediaBrowser.Model.Providers;
-using System.Collections.Generic;
-using System.Threading;
-using System.Threading.Tasks;
namespace MediaBrowser.Controller.Providers
{
@@ -26,26 +21,9 @@ namespace MediaBrowser.Controller.Providers
bool Supports(IHasImages item);
/// <summary>
- /// Gets the images.
+ /// Gets the order.
/// </summary>
- /// <param name="item">The item.</param>
- /// <param name="imageType">Type of the image.</param>
- /// <param name="cancellationToken">The cancellation token.</param>
- /// <returns>Task{IEnumerable{RemoteImageInfo}}.</returns>
- Task<IEnumerable<RemoteImageInfo>> GetImages(IHasImages item, ImageType imageType, CancellationToken cancellationToken);
-
- /// <summary>
- /// Gets the images.
- /// </summary>
- /// <param name="item">The item.</param>
- /// <param name="cancellationToken">The cancellation token.</param>
- /// <returns>Task{IEnumerable{RemoteImageInfo}}.</returns>
- Task<IEnumerable<RemoteImageInfo>> GetAllImages(IHasImages item, CancellationToken cancellationToken);
-
- /// <summary>
- /// Gets the priority.
- /// </summary>
- /// <value>The priority.</value>
- int Priority { get; }
+ /// <value>The order.</value>
+ int Order { get; }
}
}
diff --git a/MediaBrowser.Controller/Providers/ILocalImageProvider.cs b/MediaBrowser.Controller/Providers/ILocalImageProvider.cs
new file mode 100644
index 0000000000..30f2136059
--- /dev/null
+++ b/MediaBrowser.Controller/Providers/ILocalImageProvider.cs
@@ -0,0 +1,58 @@
+using MediaBrowser.Controller.Drawing;
+using MediaBrowser.Controller.Entities;
+using MediaBrowser.Model.Entities;
+using System.Collections.Generic;
+using System.IO;
+using System.Threading.Tasks;
+
+namespace MediaBrowser.Controller.Providers
+{
+ /// <summary>
+ /// This is just a marker interface
+ /// </summary>
+ public interface ILocalImageProvider : IImageProvider
+ {
+ }
+
+ public interface IImageFileProvider : ILocalImageProvider
+ {
+ List<LocalImageInfo> GetImages(IHasImages item);
+ }
+
+ public class LocalImageInfo
+ {
+ public string Path { get; set; }
+ public ImageType Type { get; set; }
+ }
+
+ public interface IDynamicImageProvider : ILocalImageProvider
+ {
+ /// <summary>
+ /// Gets the images.
+ /// </summary>
+ /// <param name="item">The item.</param>
+ /// <returns>List{DynamicImageInfo}.</returns>
+ List<DynamicImageInfo> GetImageInfos(IHasImages item);
+
+ /// <summary>
+ /// Gets the image.
+ /// </summary>
+ /// <param name="item">The item.</param>
+ /// <param name="info">The information.</param>
+ /// <returns>Task{DynamicImageResponse}.</returns>
+ Task<DynamicImageResponse> GetImage(IHasImages item, DynamicImageInfo info);
+ }
+
+ public class DynamicImageInfo
+ {
+ public string ImageId { get; set; }
+ public ImageType Type { get; set; }
+ }
+
+ public class DynamicImageResponse
+ {
+ public string Path { get; set; }
+ public Stream Stream { get; set; }
+ public ImageFormat Format { get; set; }
+ }
+}
diff --git a/MediaBrowser.Controller/Providers/IMetadataProvider.cs b/MediaBrowser.Controller/Providers/IMetadataProvider.cs
new file mode 100644
index 0000000000..97249e26d9
--- /dev/null
+++ b/MediaBrowser.Controller/Providers/IMetadataProvider.cs
@@ -0,0 +1,90 @@
+using MediaBrowser.Model.Entities;
+using System;
+using System.Collections.Generic;
+using System.Threading;
+using System.Threading.Tasks;
+
+namespace MediaBrowser.Controller.Providers
+{
+ /// <summary>
+ /// Marker interface
+ /// </summary>
+ public interface IMetadataProvider
+ {
+ /// <summary>
+ /// Gets the name.
+ /// </summary>
+ /// <value>The name.</value>
+ string Name { get; }
+ }
+
+ public interface IMetadataProvider<TItemType> : IMetadataProvider
+ where TItemType : IHasMetadata
+ {
+ }
+
+ public interface ILocalMetadataProvider : IMetadataProvider
+ {
+ /// <summary>
+ /// Determines whether [has local metadata] [the specified item].
+ /// </summary>
+ /// <param name="item">The item.</param>
+ /// <returns><c>true</c> if [has local metadata] [the specified item]; otherwise, <c>false</c>.</returns>
+ bool HasLocalMetadata(IHasMetadata item);
+ }
+
+ public interface IRemoteMetadataProvider : IMetadataProvider
+ {
+ }
+
+ public interface IRemoteMetadataProvider<TItemType> : IMetadataProvider<TItemType>, IRemoteMetadataProvider
+ where TItemType : IHasMetadata
+ {
+ Task<MetadataResult<TItemType>> GetMetadata(ItemId id, CancellationToken cancellationToken);
+ }
+
+ public interface ILocalMetadataProvider<TItemType> : IMetadataProvider<TItemType>, ILocalMetadataProvider
+ where TItemType : IHasMetadata
+ {
+ Task<MetadataResult<TItemType>> GetMetadata(string path, CancellationToken cancellationToken);
+ }
+
+ public interface IHasChangeMonitor
+ {
+ /// <summary>
+ /// Determines whether the specified date has changed.
+ /// </summary>
+ /// <param name="item">The item.</param>
+ /// <param name="date">The date.</param>
+ /// <returns><c>true</c> if the specified date has changed; otherwise, <c>false</c>.</returns>
+ bool HasChanged(IHasMetadata item, DateTime date);
+ }
+
+ public enum MetadataProviderType
+ {
+ Embedded = 0,
+ Local = 1,
+ Remote = 2
+ }
+
+ public class MetadataResult<T>
+ where T : IHasMetadata
+ {
+ public bool HasMetadata { get; set; }
+ public T Item { get; set; }
+ }
+
+ public class ItemId : IHasProviderIds
+ {
+ public string Name { get; set; }
+ public string MetadataLanguage { get; set; }
+ public string MetadataCountryCode { get; set; }
+
+ public Dictionary<string, string> ProviderIds { get; set; }
+
+ public ItemId()
+ {
+ ProviderIds = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase);
+ }
+ }
+}
diff --git a/MediaBrowser.Controller/Providers/IMetadataService.cs b/MediaBrowser.Controller/Providers/IMetadataService.cs
new file mode 100644
index 0000000000..c6cc2b716e
--- /dev/null
+++ b/MediaBrowser.Controller/Providers/IMetadataService.cs
@@ -0,0 +1,38 @@
+using System.Collections.Generic;
+using System.Threading;
+using System.Threading.Tasks;
+
+namespace MediaBrowser.Controller.Providers
+{
+ public interface IMetadataService
+ {
+ /// <summary>
+ /// Adds the parts.
+ /// </summary>
+ /// <param name="providers">The providers.</param>
+ /// <param name="imageProviders">The image providers.</param>
+ void AddParts(IEnumerable<IMetadataProvider> providers, IEnumerable<IImageProvider> imageProviders);
+
+ /// <summary>
+ /// Determines whether this instance can refresh the specified item.
+ /// </summary>
+ /// <param name="item">The item.</param>
+ /// <returns><c>true</c> if this instance can refresh the specified item; otherwise, <c>false</c>.</returns>
+ bool CanRefresh(IHasMetadata item);
+
+ /// <summary>
+ /// Refreshes the metadata.
+ /// </summary>
+ /// <param name="item">The item.</param>
+ /// <param name="options">The options.</param>
+ /// <param name="cancellationToken">The cancellation token.</param>
+ /// <returns>Task.</returns>
+ Task RefreshMetadata(IHasMetadata item, MetadataRefreshOptions options, CancellationToken cancellationToken);
+
+ /// <summary>
+ /// Gets the order.
+ /// </summary>
+ /// <value>The order.</value>
+ int Order { get; }
+ }
+}
diff --git a/MediaBrowser.Controller/Providers/IProviderManager.cs b/MediaBrowser.Controller/Providers/IProviderManager.cs
index 728030ecc9..dc57552c44 100644
--- a/MediaBrowser.Controller/Providers/IProviderManager.cs
+++ b/MediaBrowser.Controller/Providers/IProviderManager.cs
@@ -15,14 +15,22 @@ namespace MediaBrowser.Controller.Providers
public interface IProviderManager
{
/// <summary>
+ /// Refreshes the metadata.
+ /// </summary>
+ /// <param name="item">The item.</param>
+ /// <param name="options">The options.</param>
+ /// <param name="cancellationToken">The cancellation token.</param>
+ /// <returns>Task.</returns>
+ Task RefreshMetadata(IHasMetadata item, MetadataRefreshOptions options, CancellationToken cancellationToken);
+
+ /// <summary>
/// Executes the metadata providers.
/// </summary>
/// <param name="item">The item.</param>
/// <param name="cancellationToken">The cancellation token.</param>
/// <param name="force">if set to <c>true</c> [force].</param>
- /// <param name="allowSlowProviders">if set to <c>true</c> [allow slow providers].</param>
/// <returns>Task{System.Boolean}.</returns>
- Task<ItemUpdateType?> ExecuteMetadataProviders(BaseItem item, CancellationToken cancellationToken, bool force = false, bool allowSlowProviders = true);
+ Task<ItemUpdateType?> ExecuteMetadataProviders(BaseItem item, CancellationToken cancellationToken, bool force = false);
/// <summary>
/// Saves the image.
@@ -54,7 +62,9 @@ namespace MediaBrowser.Controller.Providers
/// </summary>
/// <param name="providers">The providers.</param>
/// <param name="imageProviders">The image providers.</param>
- void AddParts(IEnumerable<BaseMetadataProvider> providers, IEnumerable<IImageProvider> imageProviders);
+ /// <param name="metadataServices">The metadata services.</param>
+ /// <param name="metadataProviders">The metadata providers.</param>
+ void AddParts(IEnumerable<BaseMetadataProvider> providers, IEnumerable<IImageProvider> imageProviders, IEnumerable<IMetadataService> metadataServices, IEnumerable<IMetadataProvider> metadataProviders);
/// <summary>
/// Gets the available remote images.
@@ -70,7 +80,7 @@ namespace MediaBrowser.Controller.Providers
/// Gets the image providers.
/// </summary>
/// <param name="item">The item.</param>
- /// <returns>IEnumerable{IImageProvider}.</returns>
- IEnumerable<IImageProvider> GetImageProviders(BaseItem item);
+ /// <returns>IEnumerable{ImageProviderInfo}.</returns>
+ IEnumerable<ImageProviderInfo> GetImageProviderInfo(BaseItem item);
}
} \ No newline at end of file
diff --git a/MediaBrowser.Controller/Providers/IRemoteImageProvider.cs b/MediaBrowser.Controller/Providers/IRemoteImageProvider.cs
new file mode 100644
index 0000000000..23fda2bfa0
--- /dev/null
+++ b/MediaBrowser.Controller/Providers/IRemoteImageProvider.cs
@@ -0,0 +1,48 @@
+using MediaBrowser.Common.Net;
+using MediaBrowser.Controller.Entities;
+using MediaBrowser.Model.Entities;
+using MediaBrowser.Model.Providers;
+using System.Collections.Generic;
+using System.Threading;
+using System.Threading.Tasks;
+
+namespace MediaBrowser.Controller.Providers
+{
+ /// <summary>
+ /// Interface IImageProvider
+ /// </summary>
+ public interface IRemoteImageProvider : IImageProvider
+ {
+ /// <summary>
+ /// Gets the supported images.
+ /// </summary>
+ /// <param name="item">The item.</param>
+ /// <returns>IEnumerable{ImageType}.</returns>
+ IEnumerable<ImageType> GetSupportedImages(IHasImages item);
+
+ /// <summary>
+ /// Gets the images.
+ /// </summary>
+ /// <param name="item">The item.</param>
+ /// <param name="imageType">Type of the image.</param>
+ /// <param name="cancellationToken">The cancellation token.</param>
+ /// <returns>Task{IEnumerable{RemoteImageInfo}}.</returns>
+ Task<IEnumerable<RemoteImageInfo>> GetImages(IHasImages item, ImageType imageType, CancellationToken cancellationToken);
+
+ /// <summary>
+ /// Gets the images.
+ /// </summary>
+ /// <param name="item">The item.</param>
+ /// <param name="cancellationToken">The cancellation token.</param>
+ /// <returns>Task{IEnumerable{RemoteImageInfo}}.</returns>
+ Task<IEnumerable<RemoteImageInfo>> GetAllImages(IHasImages item, CancellationToken cancellationToken);
+
+ /// <summary>
+ /// Gets the image response.
+ /// </summary>
+ /// <param name="url">The URL.</param>
+ /// <param name="cancellationToken">The cancellation token.</param>
+ /// <returns>Task{HttpResponseInfo}.</returns>
+ Task<HttpResponseInfo> GetImageResponse(string url, CancellationToken cancellationToken);
+ }
+}
diff --git a/MediaBrowser.Controller/Providers/MetadataRefreshOptions.cs b/MediaBrowser.Controller/Providers/MetadataRefreshOptions.cs
new file mode 100644
index 0000000000..d6e8a3afea
--- /dev/null
+++ b/MediaBrowser.Controller/Providers/MetadataRefreshOptions.cs
@@ -0,0 +1,49 @@
+using System;
+
+namespace MediaBrowser.Controller.Providers
+{
+ public class MetadataRefreshOptions : ImageRefreshOptions
+ {
+ /// <summary>
+ /// When paired with MetadataRefreshMode=FullRefresh, all existing data will be overwritten with new data from the providers.
+ /// </summary>
+ public bool ReplaceAllMetadata { get; set; }
+
+ public MetadataRefreshMode MetadataRefreshMode { get; set; }
+
+ /// <summary>
+ /// TODO: deprecate. Keeping this for now, for api compatibility
+ /// </summary>
+ [Obsolete]
+ public bool ForceSave { get; set; }
+
+ /// <summary>
+ /// TODO: deprecate. Keeping this for now, for api compatibility
+ /// </summary>
+ [Obsolete]
+ public bool ResetResolveArgs { get; set; }
+ }
+
+ public class ImageRefreshOptions
+ {
+ public MetadataRefreshMode ImageRefreshMode { get; set; }
+ }
+
+ public enum MetadataRefreshMode
+ {
+ /// <summary>
+ /// Providers will be executed based on default rules
+ /// </summary>
+ EnsureMetadata,
+
+ /// <summary>
+ /// No providers will be executed
+ /// </summary>
+ None,
+
+ /// <summary>
+ /// All providers will be executed to search for new metadata
+ /// </summary>
+ FullRefresh
+ }
+}
diff --git a/MediaBrowser.Controller/Providers/ProviderResult.cs b/MediaBrowser.Controller/Providers/ProviderResult.cs
new file mode 100644
index 0000000000..2486faeedc
--- /dev/null
+++ b/MediaBrowser.Controller/Providers/ProviderResult.cs
@@ -0,0 +1,60 @@
+using System;
+
+namespace MediaBrowser.Controller.Providers
+{
+ public class ProviderResult
+ {
+ /// <summary>
+ /// Gets or sets the item identifier.
+ /// </summary>
+ /// <value>The item identifier.</value>
+ public Guid ItemId { get; set; }
+
+ /// <summary>
+ /// Gets or sets a value indicating whether this instance has refreshed metadata.
+ /// </summary>
+ /// <value><c>true</c> if this instance has refreshed metadata; otherwise, <c>false</c>.</value>
+ public bool HasRefreshedMetadata { get; set; }
+
+ /// <summary>
+ /// Gets or sets a value indicating whether this instance has refreshed images.
+ /// </summary>
+ /// <value><c>true</c> if this instance has refreshed images; otherwise, <c>false</c>.</value>
+ public bool HasRefreshedImages { get; set; }
+
+ /// <summary>
+ /// Gets or sets the date last refreshed.
+ /// </summary>
+ /// <value>The date last refreshed.</value>
+ public DateTime DateLastRefreshed { get; set; }
+
+ /// <summary>
+ /// Gets or sets the last result.
+ /// </summary>
+ /// <value>The last result.</value>
+ public ProviderRefreshStatus Status { get; set; }
+
+ /// <summary>
+ /// Gets or sets the last result error message.
+ /// </summary>
+ /// <value>The last result error message.</value>
+ public string ErrorMessage { get; set; }
+
+ public void AddStatus(ProviderRefreshStatus status, string errorMessage)
+ {
+ if (string.IsNullOrEmpty(ErrorMessage))
+ {
+ ErrorMessage = errorMessage;
+ }
+ if (Status == ProviderRefreshStatus.Success)
+ {
+ Status = status;
+ }
+ }
+
+ public ProviderResult()
+ {
+ Status = ProviderRefreshStatus.Success;
+ }
+ }
+}