Procházet zdrojové kódy

Only update if actively refreshing (#11341)

Cody Robibero před 1 rokem
rodič
revize
31e0756c0c

+ 2 - 18
MediaBrowser.Controller/Entities/Folder.cs

@@ -460,15 +460,7 @@ namespace MediaBrowser.Controller.Entities
 
 
                     progress.Report(percent);
                     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)
                 if (validChildrenNeedGeneration)
@@ -500,15 +492,7 @@ namespace MediaBrowser.Controller.Entities
 
 
                     if (recursive)
                     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);
                     }
                     }
                 });
                 });
 
 

+ 7 - 10
MediaBrowser.Providers/Manager/ProviderManager.cs

@@ -968,16 +968,13 @@ namespace MediaBrowser.Providers.Manager
             var id = item.Id;
             var id = item.Id;
             _logger.LogDebug("OnRefreshProgress {Id:N} {Progress}", id, 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(
-                    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
             try
             {
             {