public static async Task ExtractAsync( ZippedToolFormat format, string path, string outputDir, Func <string, string> getEntryPath) { switch (format) { case ZippedToolFormat.Zip: await ExtractZipAsync(path, outputDir, getEntryPath).ConfigureAwait(false); break; case ZippedToolFormat.Deb: await ExtractDebAsync(path, outputDir, getEntryPath).ConfigureAwait(false); break; case ZippedToolFormat.TarXz: await ExtractTarXzAsync(path, outputDir, getEntryPath).ConfigureAwait(false); break; default: throw new NotImplementedException( $"Extracting the zipped tool format {format} is not supported."); } }
public DownloadableFile(Version version, Uri url, ZippedToolFormat format) { if (url == null) { throw new ArgumentNullException(nameof(url)); } if (!url.IsAbsoluteUri) { throw new ArgumentException("The URL must be absolute.", nameof(url)); } Version = version ?? throw new ArgumentNullException(nameof(version)); Url = url; Format = format; }
public static async Task <DownloadableFile> GetLatestDownloadableFileAsync( HttpClient httpClient, Uri baseUrl, string fileNamePattern, ZippedToolFormat format, CancellationToken token) { var versionsContent = await httpClient.GetStringAsync(baseUrl, token).ConfigureAwait(false); var versionInfos = GetLinks(versionsContent) .Select(x => new { Link = x, Version = GetVersion(x) }) .Where(x => x.Version != null) .OrderByDescending(x => x.Version); Uri downloadUrl = null; foreach (var versionInfo in versionInfos) { var listUrl = new Uri(baseUrl, versionInfo.Link); var listContent = await httpClient.GetStringAsync(listUrl, token).ConfigureAwait(false); foreach (var link in GetLinks(listContent)) { var match = Regex.Match(link, fileNamePattern, RegexOptions.IgnoreCase); if (!match.Success) { continue; } // Get the version from the download URL, not the version list URL. if (!Version.TryParse(match.Groups["Version"].Value, out var parsedVersion)) { continue; } downloadUrl = new Uri(listUrl, link); return(new DownloadableFile( parsedVersion, downloadUrl, format)); } } return(null); }
public static string GetFileExtension(ZippedToolFormat format) { switch (format) { case ZippedToolFormat.Zip: return(".zip"); case ZippedToolFormat.Deb: return(".deb"); case ZippedToolFormat.TarXz: return(".tar.xz"); default: throw new NotImplementedException($"The zipped tool format {format} does not have a known extension."); } }
private DownloadableFile GetDownloadableFile( string fileNamePattern, ZippedToolFormat format, SyndicationItem item) { var match = Regex.Match( item.Title.Text, fileNamePattern, RegexOptions.IgnoreCase); if (!match.Success) { return(null); } if (!Version.TryParse(match.Groups["Version"].Value, out var parsedVersion)) { return(null); } var downloadUrl = item.Links.First().Uri; return(new DownloadableFile(parsedVersion, downloadUrl, format)); }
public static async Task TestAsync(ZippedToolFormat format, string path) { switch (format) { case ZippedToolFormat.Zip: await TestZipAsync(path).ConfigureAwait(false); break; case ZippedToolFormat.Deb: await TestDebAsync(path).ConfigureAwait(false); break; case ZippedToolFormat.TarXz: await TestTarXzAsync(path).ConfigureAwait(false); break; default: throw new NotImplementedException( $"Testing the zipped tool format {format} is not supported."); } }
public FileNamePatternAndFormat(string pattern, ZippedToolFormat format) { Pattern = pattern; Format = format; }