using System.Net;
using System.Text.RegularExpressions;
using FileFlows.Web.Helpers;
namespace FileFlows.Web.FlowElements;
///
/// Downloads a URL
///
public class Downloader : Node
{
///
public override int Inputs => 1;
///
public override int Outputs => 2;
///
public override FlowElementType Type => FlowElementType.Communication;
///
public override string Icon => "fas fa-download";
///
public override string CustomColor => "#40a6eb";
///
public override string HelpUrl => "https://fileflows.com/docs/plugins/web/downloader";
///
public override string Group => "Web";
///
/// Gets or sets the URL to download
///
[TextVariable(1)]
public string Url { get; set; } = null!;
///
public override int Execute(NodeParameters args)
{
var url = args.ReplaceVariables(Url ?? string.Empty, stripMissing: true)?.EmptyAsNull() ?? args.WorkingFile;
if (Regex.IsMatch(url, "^http(s)?://", RegexOptions.CultureInvariant | RegexOptions.IgnoreCase) == false)
{
args.FailureReason = "Not a valid URL: " + url;
args.Logger?.ELog(args.FailureReason);
return -1;
}
var result = DownloadHelper.Download(args.Logger!, url, args.TempPath, (percent) =>
{
args.PartPercentageUpdate?.Invoke(percent);
});
if(result.Failed(out var error))
{
args.FailureReason =error;
args.Logger?.ELog(error);
return -1;
}
args.SetWorkingFile(result.Value);
return 1;
}
}