Implement retries on package download in installer

pull/702/head
Eric Reed 12 years ago
parent 178859e0bd
commit ce014b1f14

@ -4,6 +4,7 @@ using System.Configuration;
using System.Diagnostics; using System.Diagnostics;
using System.IO; using System.IO;
using System.Net; using System.Net;
using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
using System.Windows; using System.Windows;
using System.Linq; using System.Linq;
@ -336,23 +337,39 @@ namespace MediaBrowser.Installer
/// <returns>The fully qualified name of the downloaded package</returns> /// <returns>The fully qualified name of the downloaded package</returns>
protected async Task<string> DownloadPackage(PackageVersionInfo version) protected async Task<string> DownloadPackage(PackageVersionInfo version)
{ {
var success = false;
var retryCount = 0;
var archiveFile = Path.Combine(PrepareTempLocation(), version.targetFilename);
try 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
{
await MainClient.DownloadFileTaskAsync(version.sourceUrl, archiveFile);
success = true;
}
catch (WebException e)
{ {
return null; 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; return archiveFile;

Loading…
Cancel
Save