Skip to content

Commit

Permalink
Merge pull request Squirrel#434 from ionoy/master
Browse files Browse the repository at this point in the history
FileDownloader constructor takes optional WebClient as a parameter
  • Loading branch information
anaisbetts committed Sep 9, 2015
2 parents 9f35238 + 3dc9456 commit b6acd50
Showing 1 changed file with 31 additions and 24 deletions.
55 changes: 31 additions & 24 deletions src/Squirrel/FileDownloader.cs
Original file line number Diff line number Diff line change
Expand Up @@ -13,42 +13,49 @@ public interface IFileDownloader

class FileDownloader : IFileDownloader, IEnableLogger
{
private readonly WebClient _providedClient;

public FileDownloader(WebClient providedClient = null)
{
_providedClient = providedClient;
}

public async Task DownloadFile(string url, string targetFile, Action<int> progress)
{
using (var wc = Utility.CreateWebClient()) {
var failedUrl = default(string);
using (var wc = _providedClient ?? Utility.CreateWebClient()) {
var failedUrl = default(string);

var lastSignalled = DateTime.MinValue;
wc.DownloadProgressChanged += (sender, args) => {
var now = DateTime.Now;
var lastSignalled = DateTime.MinValue;
wc.DownloadProgressChanged += (sender, args) => {
var now = DateTime.Now;

if (now - lastSignalled > TimeSpan.FromMilliseconds(500)) {
lastSignalled = now;
progress(args.ProgressPercentage);
}
};
if (now - lastSignalled > TimeSpan.FromMilliseconds(500)) {
lastSignalled = now;
progress(args.ProgressPercentage);
}
};

retry:
try {
this.Log().Info("Downloading file: " + (failedUrl ?? url));
retry:
try {
this.Log().Info("Downloading file: " + (failedUrl ?? url));

await this.WarnIfThrows(() => wc.DownloadFileTaskAsync(failedUrl ?? url, targetFile),
"Failed downloading URL: " + (failedUrl ?? url));
} catch (Exception) {
// NB: Some super brain-dead services are case-sensitive yet
// corrupt case on upload. I can't even.
if (failedUrl != null) throw;
await this.WarnIfThrows(() => wc.DownloadFileTaskAsync(failedUrl ?? url, targetFile),
"Failed downloading URL: " + (failedUrl ?? url));
} catch (Exception) {
// NB: Some super brain-dead services are case-sensitive yet
// corrupt case on upload. I can't even.
if (failedUrl != null) throw;

failedUrl = url.ToLower();
progress(0);
goto retry;
failedUrl = url.ToLower();
progress(0);
goto retry;
}
}
}
}

public async Task<byte[]> DownloadUrl(string url)
{
using (var wc = Utility.CreateWebClient()) {
using (var wc = _providedClient ?? Utility.CreateWebClient()) {
var failedUrl = default(string);

retry:
Expand Down

0 comments on commit b6acd50

Please sign in to comment.