Browse Source

added error handling in provider supports

Luke Pulverenti 12 years ago
parent
commit
4afe4f1ace
1 changed files with 20 additions and 1 deletions
  1. 20 1
      MediaBrowser.Server.Implementations/Providers/ProviderManager.cs

+ 20 - 1
MediaBrowser.Server.Implementations/Providers/ProviderManager.cs

@@ -116,7 +116,7 @@ namespace MediaBrowser.Server.Implementations.Providers
             cancellationToken.ThrowIfCancellationRequested();
             cancellationToken.ThrowIfCancellationRequested();
 
 
             // Run the normal providers sequentially in order of priority
             // Run the normal providers sequentially in order of priority
-            foreach (var provider in MetadataProviders.Where(p => p.Supports(item)))
+            foreach (var provider in MetadataProviders.Where(p => ProviderSupportsItem(p, item)))
             {
             {
                 cancellationToken.ThrowIfCancellationRequested();
                 cancellationToken.ThrowIfCancellationRequested();
 
 
@@ -175,6 +175,25 @@ namespace MediaBrowser.Server.Implementations.Providers
             return result;
             return result;
         }
         }
 
 
+        /// <summary>
+        /// Providers the supports item.
+        /// </summary>
+        /// <param name="provider">The provider.</param>
+        /// <param name="item">The item.</param>
+        /// <returns><c>true</c> if XXXX, <c>false</c> otherwise</returns>
+        private bool ProviderSupportsItem(BaseMetadataProvider provider, BaseItem item)
+        {
+            try
+            {
+                return provider.Supports(item);
+            }
+            catch (Exception ex)
+            {
+                _logger.ErrorException("{0} failed in Supports for type {1}", ex, provider.GetType().Name, item.GetType().Name);
+                return false;
+            }
+        }
+
         /// <summary>
         /// <summary>
         /// Fetches metadata and returns true or false indicating if any work that requires persistence was done
         /// Fetches metadata and returns true or false indicating if any work that requires persistence was done
         /// </summary>
         /// </summary>