diff --git a/MediaBrowser.Providers/Manager/ProviderManager.cs b/MediaBrowser.Providers/Manager/ProviderManager.cs
index 0ce696edc6..c07839ff25 100644
--- a/MediaBrowser.Providers/Manager/ProviderManager.cs
+++ b/MediaBrowser.Providers/Manager/ProviderManager.cs
@@ -910,19 +910,34 @@ namespace MediaBrowser.Providers.Manager
///
public void OnRefreshStart(BaseItem item)
{
- _logger.LogDebug("OnRefreshStart {Item}", item.Id.ToString("N", CultureInfo.InvariantCulture));
+ _logger.LogDebug("OnRefreshStart {Item:N}", item.Id);
_activeRefreshes[item.Id] = 0;
- RefreshStarted?.Invoke(this, new GenericEventArgs(item));
+ try
+ {
+ RefreshStarted?.Invoke(this, new GenericEventArgs(item));
+ }
+ catch (Exception ex)
+ {
+ // EventHandlers should never propagate exceptions, but we have little control over plugins...
+ _logger.LogError(ex, "Invoking {RefreshEvent} event handlers failed", nameof(RefreshStarted));
+ }
}
///
public void OnRefreshComplete(BaseItem item)
{
- _logger.LogDebug("OnRefreshComplete {Item}", item.Id.ToString("N", CultureInfo.InvariantCulture));
+ _logger.LogDebug("OnRefreshComplete {Item:N}", item.Id);
+ _activeRefreshes.TryRemove(item.Id, out _);
- _activeRefreshes.Remove(item.Id, out _);
-
- RefreshCompleted?.Invoke(this, new GenericEventArgs(item));
+ try
+ {
+ RefreshCompleted?.Invoke(this, new GenericEventArgs(item));
+ }
+ catch (Exception ex)
+ {
+ // EventHandlers should never propagate exceptions, but we have little control over plugins...
+ _logger.LogError(ex, "Invoking {RefreshEvent} event handlers failed", nameof(RefreshCompleted));
+ }
}
///
@@ -940,12 +955,12 @@ namespace MediaBrowser.Providers.Manager
public void OnRefreshProgress(BaseItem item, double progress)
{
var id = item.Id;
- _logger.LogDebug("OnRefreshProgress {Id} {Progress}", id.ToString("N", CultureInfo.InvariantCulture), progress);
+ _logger.LogDebug("OnRefreshProgress {Id:N} {Progress}", id, progress);
// TODO: Need to hunt down the conditions for this happening
_activeRefreshes.AddOrUpdate(
id,
- (_) => throw new InvalidOperationException(
+ _ => throw new InvalidOperationException(
string.Format(
CultureInfo.InvariantCulture,
"Cannot update refresh progress of item '{0}' ({1}) because a refresh for this item is not running",
@@ -953,7 +968,15 @@ namespace MediaBrowser.Providers.Manager
item.Id.ToString("N", CultureInfo.InvariantCulture))),
(_, _) => progress);
- RefreshProgress?.Invoke(this, new GenericEventArgs>(new Tuple(item, progress)));
+ try
+ {
+ RefreshProgress?.Invoke(this, new GenericEventArgs>(new Tuple(item, progress)));
+ }
+ catch (Exception ex)
+ {
+ // EventHandlers should never propagate exceptions, but we have little control over plugins...
+ _logger.LogError(ex, "Invoking {RefreshEvent} event handlers failed", nameof(RefreshProgress));
+ }
}
///