Пример #1
0
        public void Decompress(string inputFileName, int quality)
        {
            string outputFileName = $@"c:\File\{inputFileName}-nuget-decompressed.txt";

            inputFileName = $@"c:\File\{inputFileName}-nuget-lvl{quality}-compressed.txt";
            using (FileStream input = File.OpenRead(inputFileName))
                using (FileStream output = File.Create(outputFileName))
                    using (BrotliSharpLib.BrotliStream decompressor = new BrotliSharpLib.BrotliStream(input, CompressionMode.Decompress))
                    {
                        decompressor.CopyTo(output);
                    }
        }
Пример #2
0
        public void DecompressFromNative(string inputFileName)
        {
            string outputFileName = $@"c:\File\{inputFileName}-nuget-from-native-decompressed.txt";

            inputFileName = $@"c:\File\{inputFileName}-native-compressed.txt";
            using (FileStream input = File.OpenRead(inputFileName))
                using (FileStream output = File.Create(outputFileName))
                    using (BrotliSharpLib.BrotliStream decompressor = new BrotliSharpLib.BrotliStream(input, CompressionMode.Decompress))
                    {
                        decompressor.CopyTo(output);
                    }
        }
Пример #3
0
        /// <inheritdoc />
        public async Task <ClientResult <string> > GetTextAsync(Func <HttpRequestMessage> reqFactory, TimeSpan wait = default, int tries = 3)
        {
            wait = wait == default ? TimeSpan.FromSeconds(2) : wait;
            var nextRetry = DateTime.UtcNow.Subtract(TimeSpan.FromDays(1));

            for (var i = 0; i < tries; ++i)
            {
                var diff = nextRetry - DateTime.UtcNow;
                if (diff.Ticks > 0)
                {
                    await Task.Delay(diff).CAF();
                }

                using var resp = await SendAsync(reqFactory.Invoke()).CAF();

                var code = (int)resp.StatusCode;
                if (code == 421 || code == 429)                 //Rate limit error codes
                {
                    //Wait longer on each failure
                    nextRetry = DateTime.UtcNow.Add(TimeSpan.FromTicks(wait.Ticks * (int)Math.Pow(2, i)));
                    ConsoleUtils.WriteLine($"Rate limited; retrying next at: {nextRetry.ToLongTimeString()}");
                    continue;
                }

#warning see if this can be removed?
                //Means this is using the brotli compression method, which isn't implemented into HttpClient yet
                if (resp.Content.Headers.TryGetValues("Content-Encoding", out var val) && val.Any(x => x == "br"))
                {
                    using var s = await resp.Content.ReadAsStreamAsync().CAF();

                    using var br = new BrotliSharpLib.BrotliStream(s, CompressionMode.Decompress);
                    using var r  = new StreamReader(br);

                    return(new ClientResult <string>(await r.ReadToEndAsync().CAF(), resp.StatusCode, resp.IsSuccessStatusCode));
                }

                var bytes = await resp.Content.ReadAsByteArrayAsync().CAF();

                var text = Encoding.UTF8.GetString(bytes);
                return(new ClientResult <string>(text, resp.StatusCode, resp.IsSuccessStatusCode));
            }
            throw new HttpRequestException($"Unable to get the requested webpage after {tries} tries.");
        }