From ce014b1f14b3d20fb30b2c6784f4c04eb422a99b Mon Sep 17 00:00:00 2001 From: Eric Reed Date: Thu, 14 Mar 2013 11:19:13 -0400 Subject: [PATCH] Implement retries on package download in installer --- MediaBrowser.Installer/MainWindow.xaml.cs | 41 ++++++++++++++++------- 1 file changed, 29 insertions(+), 12 deletions(-) diff --git a/MediaBrowser.Installer/MainWindow.xaml.cs b/MediaBrowser.Installer/MainWindow.xaml.cs index 0cf8c2425c..815ad4781d 100644 --- a/MediaBrowser.Installer/MainWindow.xaml.cs +++ b/MediaBrowser.Installer/MainWindow.xaml.cs @@ -4,6 +4,7 @@ using System.Configuration; using System.Diagnostics; using System.IO; using System.Net; +using System.Threading; using System.Threading.Tasks; using System.Windows; using System.Linq; @@ -336,23 +337,39 @@ namespace MediaBrowser.Installer /// The fully qualified name of the downloaded package protected async Task DownloadPackage(PackageVersionInfo version) { + var success = false; + var retryCount = 0; + var archiveFile = Path.Combine(PrepareTempLocation(), version.targetFilename); + try { - var archiveFile = Path.Combine(PrepareTempLocation(), version.targetFilename); + while (!success && retryCount < 3) + { - // setup download progress and download the package - MainClient.DownloadProgressChanged += DownloadProgressChanged; - try - { - await MainClient.DownloadFileTaskAsync(version.sourceUrl, archiveFile); - } - catch (WebException e) - { - if (e.Status == WebExceptionStatus.RequestCanceled) + // setup download progress and download the package + MainClient.DownloadProgressChanged += DownloadProgressChanged; + try { - return null; + await MainClient.DownloadFileTaskAsync(version.sourceUrl, archiveFile); + success = true; + } + catch (WebException e) + { + if (e.Status == WebExceptionStatus.RequestCanceled) + { + return null; + } + if (e.Status == WebExceptionStatus.Timeout || e.Status == WebExceptionStatus.ConnectFailure || e.Status == WebExceptionStatus.ProtocolError) + { + Thread.Sleep(500); //wait just a sec + PrepareTempLocation(); //clear this out + retryCount++; + } + else + { + throw; + } } - throw; } return archiveFile;