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;