Bläddra i källkod

fixes #2588 - OpenSubtitlesDownloader doesn't respect X-Ratelimit-Requests-Remaining

Luke Pulverenti 8 år sedan
förälder
incheckning
6ff89eab78

+ 21 - 0
MediaBrowser.Common/Extensions/ResourceNotFoundException.cs

@@ -25,4 +25,25 @@ namespace MediaBrowser.Common.Extensions
 
         }
     }
+
+    public class RateLimitExceededException : Exception
+    {
+        /// <summary>
+        /// Initializes a new instance of the <see cref="RateLimitExceededException" /> class.
+        /// </summary>
+        public RateLimitExceededException()
+        {
+
+        }
+
+        /// <summary>
+        /// Initializes a new instance of the <see cref="RateLimitExceededException" /> class.
+        /// </summary>
+        /// <param name="message">The message.</param>
+        public RateLimitExceededException(string message)
+            : base(message)
+        {
+
+        }
+    }
 }

+ 2 - 2
MediaBrowser.MediaEncoding/Subtitles/OpenSubtitleDownloader.cs

@@ -136,7 +136,7 @@ namespace MediaBrowser.MediaEncoding.Subtitles
 
             if ((DateTime.UtcNow - _lastRateLimitException).TotalHours < 1)
             {
-                throw new Exception("OpenSubtitles rate limit reached");
+                throw new RateLimitExceededException("OpenSubtitles rate limit reached");
             }
 
             var resultDownLoad = await OpenSubtitles.DownloadSubtitlesAsync(downloadsList, cancellationToken).ConfigureAwait(false);
@@ -144,7 +144,7 @@ namespace MediaBrowser.MediaEncoding.Subtitles
             if ((resultDownLoad.Status ?? string.Empty).IndexOf("407", StringComparison.OrdinalIgnoreCase) != -1)
             {
                 _lastRateLimitException = DateTime.UtcNow;
-                throw new Exception("OpenSubtitles rate limit reached");
+                throw new RateLimitExceededException("OpenSubtitles rate limit reached");
             }
 
             if (!(resultDownLoad is MethodResponseSubtitleDownload))

+ 5 - 1
MediaBrowser.Providers/MediaInfo/SubtitleDownloader.cs

@@ -10,6 +10,7 @@ using System.Collections.Generic;
 using System.Linq;
 using System.Threading;
 using System.Threading.Tasks;
+using MediaBrowser.Common.Extensions;
 
 namespace MediaBrowser.Providers.MediaInfo
 {
@@ -139,7 +140,7 @@ namespace MediaBrowser.Providers.MediaInfo
                 request.IndexNumberEnd = episode.IndexNumberEnd;
                 request.SeriesName = episode.SeriesName;
             }
-           
+
             try
             {
                 var searchResults = await _subtitleManager.SearchSubtitles(request, cancellationToken).ConfigureAwait(false);
@@ -154,6 +155,9 @@ namespace MediaBrowser.Providers.MediaInfo
                     return true;
                 }
             }
+            catch (RateLimitExceededException)
+            {
+            }
             catch (Exception ex)
             {
                 _logger.ErrorException("Error downloading subtitles", ex);

+ 6 - 1
MediaBrowser.Providers/Subtitles/SubtitleManager.cs

@@ -133,7 +133,8 @@ namespace MediaBrowser.Providers.Subtitles
                     {
                         //var isText = MediaStream.IsTextFormat(response.Format);
 
-                        using (var fs = _fileSystem.GetFileStream(savePath, FileOpenMode.Create, FileAccessMode.Write, FileShareMode.Read, true))
+                        using (var fs = _fileSystem.GetFileStream(savePath, FileOpenMode.Create, FileAccessMode.Write,
+                                FileShareMode.Read, true))
                         {
                             await stream.CopyToAsync(fs).ConfigureAwait(false);
                         }
@@ -154,6 +155,10 @@ namespace MediaBrowser.Providers.Subtitles
                     }
                 }
             }
+            catch (RateLimitExceededException)
+            {
+                throw;
+            }
             catch (Exception ex)
             {
                 EventHelper.FireEventIfNotNull(SubtitleDownloadFailure, this, new SubtitleDownloadFailureEventArgs