diff options
| author | LukePulverenti <luke.pulverenti@gmail.com> | 2013-03-08 00:08:27 -0500 |
|---|---|---|
| committer | LukePulverenti <luke.pulverenti@gmail.com> | 2013-03-08 00:08:27 -0500 |
| commit | 9911df11e8a96d5d7fffcd8618b63a6adb27701f (patch) | |
| tree | b7e446296c6b0f61804430cd59beda68aa549065 /MediaBrowser.Controller/Providers/BaseMetadataProvider.cs | |
| parent | 211d24e66e717f6294840b4f91806a24c1fb2e78 (diff) | |
extracted provider manager. took more off the kernel
Diffstat (limited to 'MediaBrowser.Controller/Providers/BaseMetadataProvider.cs')
| -rw-r--r-- | MediaBrowser.Controller/Providers/BaseMetadataProvider.cs | 137 |
1 files changed, 5 insertions, 132 deletions
diff --git a/MediaBrowser.Controller/Providers/BaseMetadataProvider.cs b/MediaBrowser.Controller/Providers/BaseMetadataProvider.cs index a5823c60e..aaf3fe6bf 100644 --- a/MediaBrowser.Controller/Providers/BaseMetadataProvider.cs +++ b/MediaBrowser.Controller/Providers/BaseMetadataProvider.cs @@ -1,5 +1,4 @@ -using MediaBrowser.Common.Configuration; -using MediaBrowser.Common.Extensions; +using MediaBrowser.Common.Extensions; using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.Entities; using MediaBrowser.Model.Logging; @@ -12,7 +11,7 @@ namespace MediaBrowser.Controller.Providers /// <summary> /// Class BaseMetadataProvider /// </summary> - public abstract class BaseMetadataProvider : IDisposable + public abstract class BaseMetadataProvider { /// <summary> /// Gets the logger. @@ -27,16 +26,6 @@ namespace MediaBrowser.Controller.Providers /// <value>The configuration manager.</value> protected IServerConfigurationManager ConfigurationManager { get; private set; } - // Cache these since they will be used a lot - /// <summary> - /// The false task result - /// </summary> - protected static readonly Task<bool> FalseTaskResult = Task.FromResult(false); - /// <summary> - /// The true task result - /// </summary> - protected static readonly Task<bool> TrueTaskResult = Task.FromResult(true); - /// <summary> /// The _id /// </summary> @@ -135,7 +124,7 @@ namespace MediaBrowser.Controller.Providers /// <param name="providerVersion">The provider version.</param> /// <param name="status">The status.</param> /// <exception cref="System.ArgumentNullException">item</exception> - protected virtual void SetLastRefreshed(BaseItem item, DateTime value, string providerVersion, ProviderRefreshStatus status = ProviderRefreshStatus.Success) + public virtual void SetLastRefreshed(BaseItem item, DateTime value, string providerVersion, ProviderRefreshStatus status = ProviderRefreshStatus.Success) { if (item == null) { @@ -162,7 +151,7 @@ namespace MediaBrowser.Controller.Providers /// <param name="item">The item.</param> /// <param name="value">The value.</param> /// <param name="status">The status.</param> - protected virtual void SetLastRefreshed(BaseItem item, DateTime value, ProviderRefreshStatus status = ProviderRefreshStatus.Success) + public void SetLastRefreshed(BaseItem item, DateTime value, ProviderRefreshStatus status = ProviderRefreshStatus.Success) { SetLastRefreshed(item, value, ProviderVersion, status); } @@ -254,76 +243,7 @@ namespace MediaBrowser.Controller.Providers /// <param name="cancellationToken">The cancellation token.</param> /// <returns>Task{System.Boolean}.</returns> /// <exception cref="System.ArgumentNullException"></exception> - public async Task<bool> FetchAsync(BaseItem item, bool force, CancellationToken cancellationToken) - { - if (item == null) - { - throw new ArgumentNullException(); - } - - cancellationToken.ThrowIfCancellationRequested(); - - Logger.Info("Running for {0}", item.Path ?? item.Name ?? "--Unknown--"); - - // This provides the ability to cancel just this one provider - var innerCancellationTokenSource = new CancellationTokenSource(); - - Kernel.Instance.ProviderManager.OnProviderRefreshBeginning(this, item, innerCancellationTokenSource); - - try - { - var task = FetchAsyncInternal(item, force, CancellationTokenSource.CreateLinkedTokenSource(cancellationToken, innerCancellationTokenSource.Token).Token); - - await task.ConfigureAwait(false); - - if (task.IsFaulted) - { - // Log the AggregateException - if (task.Exception != null) - { - Logger.ErrorException("AggregateException:", task.Exception); - } - - return false; - } - - return task.Result; - } - catch (OperationCanceledException ex) - { - Logger.Info("{0} cancelled for {1}", GetType().Name, item.Name); - - // If the outer cancellation token is the one that caused the cancellation, throw it - if (cancellationToken.IsCancellationRequested && ex.CancellationToken == cancellationToken) - { - throw; - } - - return false; - } - catch (Exception ex) - { - Logger.ErrorException("failed refreshing {0}", ex, item.Name); - - SetLastRefreshed(item, DateTime.UtcNow, ProviderRefreshStatus.Failure); - return true; - } - finally - { - innerCancellationTokenSource.Dispose(); - - Kernel.Instance.ProviderManager.OnProviderRefreshCompleted(this, item); - } - } - - /// <summary> - /// Fetches metadata and returns true or false indicating if any work that requires persistence was done - /// </summary> - /// <param name="item">The item.</param> - /// <param name="force">if set to <c>true</c> [force].</param> - /// <param name="cancellationToken">The cancellation token.</param> - /// <returns>Task{System.Boolean}.</returns> - protected abstract Task<bool> FetchAsyncInternal(BaseItem item, bool force, CancellationToken cancellationToken); + public abstract Task<bool> FetchAsync(BaseItem item, bool force, CancellationToken cancellationToken); /// <summary> /// Gets the priority. @@ -332,23 +252,6 @@ namespace MediaBrowser.Controller.Providers public abstract MetadataProviderPriority Priority { get; } /// <summary> - /// Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. - /// </summary> - public void Dispose() - { - Dispose(true); - GC.SuppressFinalize(this); - } - - /// <summary> - /// Releases unmanaged and - optionally - managed resources. - /// </summary> - /// <param name="dispose"><c>true</c> to release both managed and unmanaged resources; <c>false</c> to release only unmanaged resources.</param> - protected virtual void Dispose(bool dispose) - { - } - - /// <summary> /// Returns true or false indicating if the provider should refresh when the contents of it's directory changes /// </summary> /// <value><c>true</c> if [refresh on file system stamp change]; otherwise, <c>false</c>.</value> @@ -386,34 +289,4 @@ namespace MediaBrowser.Controller.Providers return item.FileSystemStamp; } } - - /// <summary> - /// Determines when a provider should execute, relative to others - /// </summary> - public enum MetadataProviderPriority - { - // Run this provider at the beginning - /// <summary> - /// The first - /// </summary> - First = 1, - - // Run this provider after all first priority providers - /// <summary> - /// The second - /// </summary> - Second = 2, - - // Run this provider after all second priority providers - /// <summary> - /// The third - /// </summary> - Third = 3, - - // Run this provider last - /// <summary> - /// The last - /// </summary> - Last = 4 - } } |
