diff options
Diffstat (limited to 'MediaBrowser.Providers/Manager/ProviderManager.cs')
| -rw-r--r-- | MediaBrowser.Providers/Manager/ProviderManager.cs | 20 |
1 files changed, 9 insertions, 11 deletions
diff --git a/MediaBrowser.Providers/Manager/ProviderManager.cs b/MediaBrowser.Providers/Manager/ProviderManager.cs index f34034964..0b1fed0a3 100644 --- a/MediaBrowser.Providers/Manager/ProviderManager.cs +++ b/MediaBrowser.Providers/Manager/ProviderManager.cs @@ -968,16 +968,13 @@ namespace MediaBrowser.Providers.Manager var id = item.Id; _logger.LogDebug("OnRefreshProgress {Id:N} {Progress}", id, progress); - // TODO: Need to hunt down the conditions for this happening - _activeRefreshes.AddOrUpdate( - id, - _ => throw new InvalidOperationException( - string.Format( - CultureInfo.InvariantCulture, - "Cannot update refresh progress of item '{0}' ({1}) because a refresh for this item is not running", - item.GetType().Name, - item.Id.ToString("N", CultureInfo.InvariantCulture))), - (_, _) => progress); + if (!_activeRefreshes.TryGetValue(id, out var current) + || progress <= current + || !_activeRefreshes.TryUpdate(id, progress, current)) + { + // Item isn't currently refreshing, or update was received out-of-order, so don't trigger event. + return; + } try { @@ -1106,7 +1103,8 @@ namespace MediaBrowser.Providers.Manager var musicArtists = albums .Select(i => i.MusicArtist) - .Where(i => i is not null); + .Where(i => i is not null) + .Distinct(); var musicArtistRefreshTasks = musicArtists.Select(i => i.ValidateChildren(new Progress<double>(), options, true, cancellationToken)); |
