diff --git a/SpotifyAPI/Web/SpotifyWebAPI.cs b/SpotifyAPI/Web/SpotifyWebAPI.cs index 4eadacda..ac04dd0f 100644 --- a/SpotifyAPI/Web/SpotifyWebAPI.cs +++ b/SpotifyAPI/Web/SpotifyWebAPI.cs @@ -1932,11 +1932,24 @@ namespace SpotifyAPI.Web { if (!UseAuth) throw new InvalidOperationException("Auth is required for all Upload-Actions"); - WebClient.SetHeader("Authorization", TokenType + " " + AccessToken); - WebClient.SetHeader("Content-Type", "application/json"); + int triesLeft = RetryTimes + 1; + Error lastError = null; + + Tuple response = null; + do + { + WebClient.SetHeader("Authorization", TokenType + " " + AccessToken); + WebClient.SetHeader("Content-Type", "application/json"); + + response = WebClient.UploadJson(url, uploadData, method); + + response.Item2.AddResponseInfo(response.Item1); + lastError = response.Item2.Error; + + triesLeft -= 1; + + } while (UseAutoRetry && triesLeft > 0 && lastError != null); - Tuple response = WebClient.UploadJson(url, uploadData, method); - response.Item2.AddResponseInfo(response.Item1); return response.Item2; } @@ -1944,26 +1957,67 @@ namespace SpotifyAPI.Web { if (!UseAuth) throw new InvalidOperationException("Auth is required for all Upload-Actions"); - WebClient.SetHeader("Authorization", TokenType + " " + AccessToken); - WebClient.SetHeader("Content-Type", "application/json"); - Tuple response = await WebClient.UploadJsonAsync(url, uploadData, method); - response.Item2.AddResponseInfo(response.Item1); + int triesLeft = RetryTimes + 1; + Error lastError = null; + + Tuple response = null; + do + { + WebClient.SetHeader("Authorization", TokenType + " " + AccessToken); + WebClient.SetHeader("Content-Type", "application/json"); + + response = await WebClient.UploadJsonAsync(url, uploadData, method); + + response.Item2.AddResponseInfo(response.Item1); + lastError = response.Item2.Error; + + triesLeft -= 1; + + } while (UseAutoRetry && triesLeft > 0 && lastError != null); + return response.Item2; } public T DownloadData(string url) where T : BasicModel { - Tuple response = DownloadDataAlt(url); + int triesLeft = RetryTimes + 1; + Error lastError = null; + + Tuple response = null; + do + { + response = DownloadDataAlt(url); + + response.Item2.AddResponseInfo(response.Item1); + lastError = response.Item2.Error; + + triesLeft -= 1; + + } while (UseAutoRetry && triesLeft > 0 && lastError != null); + - response.Item2.AddResponseInfo(response.Item1); return response.Item2; } public async Task DownloadDataAsync(string url) where T : BasicModel { - Tuple response = await DownloadDataAltAsync(url); - response.Item2.AddResponseInfo(response.Item1); + int triesLeft = RetryTimes + 1; + Error lastError = null; + + Tuple response = null; + do + { + response = await DownloadDataAltAsync(url); + + response.Item2.AddResponseInfo(response.Item1); + lastError = response.Item2.Error; + + triesLeft -= 1; + + } while (UseAutoRetry && triesLeft > 0 && lastError != null); + + return response.Item2; }