From d6829f5cb538aa5fe8c6e2b463ed605fe3058f8f Mon Sep 17 00:00:00 2001 From: Diogo Trindade Date: Tue, 8 Jun 2021 22:27:47 +0100 Subject: [PATCH 1/2] Prerequisites - Added DownloadFileAction overload that accepts func --- .../PrerequisiteAction/DownloadFileAction.cs | 28 ++++++++++++++++--- 1 file changed, 24 insertions(+), 4 deletions(-) diff --git a/src/Artemis.Core/Plugins/Prerequisites/PrerequisiteAction/DownloadFileAction.cs b/src/Artemis.Core/Plugins/Prerequisites/PrerequisiteAction/DownloadFileAction.cs index 0707abfd6..db0dbd693 100644 --- a/src/Artemis.Core/Plugins/Prerequisites/PrerequisiteAction/DownloadFileAction.cs +++ b/src/Artemis.Core/Plugins/Prerequisites/PrerequisiteAction/DownloadFileAction.cs @@ -26,10 +26,29 @@ namespace Artemis.Core ShowProgressBar = true; } + /// + /// Creates a new instance of a copy folder action + /// + /// The name of the action + /// A function returning the URL to download + /// The target file to save as (will be created if needed) + public DownloadFileAction(string name, Func> urlFunction, string fileName) : base(name) + { + UrlFunction = urlFunction ?? throw new ArgumentNullException(nameof(urlFunction)); + FileName = fileName ?? throw new ArgumentNullException(nameof(fileName)); + + ShowProgressBar = true; + } + /// /// Gets the source URL to download /// - public string Url { get; } + public string? Url { get; } + + /// + /// Gets the function returning the URL to download + /// + public Func>? UrlFunction { get; } /// /// Gets the target file to save as (will be created if needed) @@ -41,19 +60,20 @@ namespace Artemis.Core { using HttpClient client = new(); await using FileStream destinationStream = new(FileName, FileMode.OpenOrCreate); + string url = Url ?? await UrlFunction(); void ProgressOnProgressReported(object? sender, EventArgs e) { if (Progress.ProgressPerSecond != 0) - Status = $"Downloading {Url} - {Progress.ProgressPerSecond.Bytes().Humanize("#.##")}/sec"; + Status = $"Downloading {url} - {Progress.ProgressPerSecond.Bytes().Humanize("#.##")}/sec"; else - Status = $"Downloading {Url}"; + Status = $"Downloading {url}"; } Progress.ProgressReported += ProgressOnProgressReported; // Get the http headers first to examine the content length - using HttpResponseMessage response = await client.GetAsync(Url, HttpCompletionOption.ResponseHeadersRead, cancellationToken); + using HttpResponseMessage response = await client.GetAsync(url, HttpCompletionOption.ResponseHeadersRead, cancellationToken); await using Stream download = await response.Content.ReadAsStreamAsync(cancellationToken); long? contentLength = response.Content.Headers.ContentLength; From b1865df443f2894a79d5ec03ddf0d25a3b388e00 Mon Sep 17 00:00:00 2001 From: Diogo Trindade Date: Tue, 8 Jun 2021 22:32:38 +0100 Subject: [PATCH 2/2] Prerequisites - Set status while retrieving download url --- .../Prerequisites/PrerequisiteAction/DownloadFileAction.cs | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/Artemis.Core/Plugins/Prerequisites/PrerequisiteAction/DownloadFileAction.cs b/src/Artemis.Core/Plugins/Prerequisites/PrerequisiteAction/DownloadFileAction.cs index db0dbd693..8d09f4766 100644 --- a/src/Artemis.Core/Plugins/Prerequisites/PrerequisiteAction/DownloadFileAction.cs +++ b/src/Artemis.Core/Plugins/Prerequisites/PrerequisiteAction/DownloadFileAction.cs @@ -60,7 +60,12 @@ namespace Artemis.Core { using HttpClient client = new(); await using FileStream destinationStream = new(FileName, FileMode.OpenOrCreate); - string url = Url ?? await UrlFunction(); + string? url = Url; + if (url is null) + { + Status = "Retrieving download URL"; + url = await UrlFunction!(); + } void ProgressOnProgressReported(object? sender, EventArgs e) {