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.");
            }
        }
Exemple #2
0
        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;
        }
Exemple #3
0
        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.");
            }
        }
Exemple #5
0
        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;
 }