Esempio n. 1
0
        public static async Task Main()
        {
            Write("Enter URL:> ");
            var url     = ReadLine();
            var uri     = new Uri(url);
            var request = HttpWebRequestExt.Create(uri)
                          .DoNotTrack()
                          .Accept(Any);

            using var response = await request
                                 .GetAsync()
                                 .ConfigureAwait(false);

            var contentType = Lookup(response.ContentType);

            WriteLine($"Status {response.StatusCode}");
            WriteLine($"Content-Type {contentType.Value}");
            WriteLine($"Content-Length {response.ContentLength}");
            var desktop  = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
            var fileName = Path.Combine(desktop, PathExt.FixPath(uri.PathAndQuery.Substring(1)));
            var fileExt  = Path.GetExtension(fileName).Substring(1);

            if (contentType?.PrimaryExtension is object && !contentType.Extensions.Contains(fileExt))
            {
                fileName += "." + contentType.PrimaryExtension;
            }
            var file = new FileInfo(fileName);

            file.Directory.Create();
            using var outStream  = file.Create();
            using var body       = response.GetResponseStream();
            using var progStream = new ProgressStream(body, response.ContentLength, new ConsoleProgress(), false);
            await progStream.CopyToAsync(outStream)
            .ConfigureAwait(false);
        }
Esempio n. 2
0
        private static async Task ParseApacheConfAsync(Dictionary <string, Group> groups)
        {
            using var response = await HttpWebRequestExt
                                 .Create(new Uri ("http://svn.apache.org/viewvc/httpd/httpd/trunk/docs/conf/mime.types?view=co"))
                                 .Accept("text/plain")
                                 .GetAsync()
                                 .ConfigureAwait(false);

            using var stream = response.GetResponseStream();
            using var reader = new StreamReader(stream);
            var searching = true;

            while (!reader.EndOfStream)
            {
                var line = await reader.ReadLineAsync()
                           .ConfigureAwait(false);

                if (line.StartsWith("# ", StringComparison.Ordinal))
                {
                    line = line.Substring(2);
                }

                if (!searching)
                {
                    var parts = line.Split(' ', '\t')
                                .Where(p => p.Length > 0);

                    var value      = parts.First();
                    var extensions = parts.Skip(1).ToArray();
                    if (extensions.Length == 0)
                    {
                        extensions = null;
                    }
                    var slashIndex = value.IndexOf('/');
                    var groupName  = value.Substring(0, slashIndex);
                    var name       = value.Substring(slashIndex + 1);

                    var group = groups.GetGroup(groupName);
                    name = name.CamelCase();

                    if (extensions == null)
                    {
                        var plusIndex = value.IndexOf('+');
                        if (0 <= plusIndex && plusIndex < value.Length - 1)
                        {
                            extensions = new string[] { value.Substring(plusIndex + 1) };
                        }
                    }

                    AddEntry(group, name, value, null, extensions);
                }
                else if (line.StartsWith("====================", StringComparison.Ordinal))
                {
                    searching = false;
                }
            }
        }
Esempio n. 3
0
        public async Task <T> GetIconAsync <T>(IImageCodec <T> decoder)
        {
            var request = HttpWebRequestExt.Create(IconURL);

            using var response = await request
                                 .GetAsync()
                                 .ConfigureAwait(false);

            return(decoder.Deserialize(response));
        }
Esempio n. 4
0
        private static async Task ParseIANAXmlAsync(Dictionary <string, Group> groups)
        {
            using var response = await HttpWebRequestExt
                                 .Create(new Uri ("https://www.iana.org/assignments/media-types/media-types.xml"))
                                 .UserAgent("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36")
                                 .Accept("text/xml")
                                 .GetAsync()
                                 .ConfigureAwait(false);

            using var stream = response.GetResponseStream();
            var fullRegistry = XElement.Load(stream);

            ns = fullRegistry.GetDefaultNamespace();
            var files = fullRegistry.Descendants(ns + "file");

            foreach (var file in files)
            {
                var groupName          = file.Parent.Parent.Attribute("id").Value;
                var nameAndDescription = file.Parent.Element(ns + "name").Value;
                var name = nameAndDescription;

                var    deprecationMessageIndex = nameAndDescription.IndexOf(" ", StringComparison.Ordinal);
                var    isDeprecated            = deprecationMessageIndex >= 0;
                string deprecationMessage      = null;
                if (isDeprecated)
                {
                    deprecationMessage = nameAndDescription.Substring(deprecationMessageIndex + 1).Trim();
                    name = nameAndDescription.Substring(0, deprecationMessageIndex);
                    if (deprecationMessage.StartsWith("-", StringComparison.Ordinal))
                    {
                        deprecationMessage = deprecationMessage.Substring(1).Trim();
                    }
                }

                var value = $"{groupName}/{name.ToLowerInvariant()}";
                var group = groups.GetGroup(groupName);

                var      plusIndex  = value.IndexOf('+');
                string[] extensions = null;
                if (0 <= plusIndex && plusIndex < value.Length - 1)
                {
                    extensions = new string[] { value.Substring(plusIndex + 1) };
                }

                name = name.CamelCase();
                AddEntry(group, name, value, deprecationMessage, extensions);
            }
        }