private static HttpContent CreateContent(PreserveMetadata metadata, string type) { if (metadata == PreserveMetadata.None) { return(null); } var preserve = new List <string>(); if (metadata.HasFlag(PreserveMetadata.Copyright)) { preserve.Add("copyright"); } if (metadata.HasFlag(PreserveMetadata.Creation)) { if (type != JpegType) { throw new InvalidOperationException($"Creation metadata can only be preserved with type {JpegType}"); } preserve.Add("creation"); } if (metadata.HasFlag(PreserveMetadata.Location)) { if (type != JpegType) { throw new InvalidOperationException($"Location metadata can only be preserved with type {JpegType}"); } preserve.Add("location"); } var json = JsonConvert.SerializeObject(new { preserve }); return(new StringContent(json, System.Text.Encoding.UTF8, "application/json")); }
/// <summary> /// Downloads the result of a TinyPng Compression operation /// </summary> /// <param name="compressResponse"></param> /// <param name="metadata"></param> /// <returns></returns> public static async Task <TinyPngImageResponse> Download(this TinyPngCompressResponse compressResponse, PreserveMetadata metadata = PreserveMetadata.None) { if (compressResponse == null) { throw new ArgumentNullException(nameof(compressResponse)); } var msg = new HttpRequestMessage(HttpMethod.Get, compressResponse.Output.Url) { Content = CreateContent(metadata, compressResponse.Output.Type) }; var response = await compressResponse.HttpClient.SendAsync(msg).ConfigureAwait(false); if (response.IsSuccessStatusCode) { return(new TinyPngImageResponse(response)); } var errorMsg = JsonConvert.DeserializeObject <ApiErrorResponse>(await response.Content.ReadAsStringAsync()); throw new TinyPngApiException((int)response.StatusCode, response.ReasonPhrase, errorMsg.Error, errorMsg.Message); }
/// <summary> /// Downloads the result of a TinyPng Compression operation /// </summary> /// <param name="compressResponse"></param> /// <param name="metadata"></param> /// <returns></returns> public static async Task <TinyPngImageResponse> Download(this Task <TinyPngCompressResponse> compressResponse, PreserveMetadata metadata = PreserveMetadata.None) { if (compressResponse == null) { throw new ArgumentNullException(nameof(compressResponse)); } var compressResult = await compressResponse; return(await Download(compressResult, metadata)); }