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; } }