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); } }
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); } }
/// <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."); }