diff options
| author | Cody Robibero <cody@robibe.ro> | 2024-04-12 17:45:15 -0600 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-04-12 17:45:15 -0600 |
| commit | 31e0756c0c39f01de09a1b59145918c43488bcbf (patch) | |
| tree | 7ed0709bfa9645d556a5f0075607bc7bb811cd28 | |
| parent | 7d28d08e08a412ab88ede368220562799f2bd7c0 (diff) | |
Only update if actively refreshing (#11341)
| -rw-r--r-- | MediaBrowser.Controller/Entities/Folder.cs | 20 | ||||
| -rw-r--r-- | MediaBrowser.Providers/Manager/ProviderManager.cs | 17 |
2 files changed, 9 insertions, 28 deletions
diff --git a/MediaBrowser.Controller/Entities/Folder.cs b/MediaBrowser.Controller/Entities/Folder.cs index a2957cdca..8bfcf5dee 100644 --- a/MediaBrowser.Controller/Entities/Folder.cs +++ b/MediaBrowser.Controller/Entities/Folder.cs @@ -460,15 +460,7 @@ namespace MediaBrowser.Controller.Entities progress.Report(percent); - // TODO: this is sometimes being called after the refresh has completed. - try - { - ProviderManager.OnRefreshProgress(folder, percent); - } - catch (InvalidOperationException e) - { - Logger.LogError(e, "Error refreshing folder"); - } + ProviderManager.OnRefreshProgress(folder, percent); }); if (validChildrenNeedGeneration) @@ -500,15 +492,7 @@ namespace MediaBrowser.Controller.Entities if (recursive) { - // TODO: this is sometimes being called after the refresh has completed. - try - { - ProviderManager.OnRefreshProgress(folder, percent); - } - catch (InvalidOperationException e) - { - Logger.LogError(e, "Error refreshing folder"); - } + ProviderManager.OnRefreshProgress(folder, percent); } }); diff --git a/MediaBrowser.Providers/Manager/ProviderManager.cs b/MediaBrowser.Providers/Manager/ProviderManager.cs index a9ebf7ec7..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 { |
