Compare commits

...
Sign in to create a new pull request.

8 commits

Author SHA1 Message Date
Mira
92a231e7c7
chore: Update to net8 2023-11-20 09:15:43 +01:00
Mira
443c742a22
fix: RunAnalyzersDuringBuild to False 2023-10-03 13:44:57 +02:00
Mira
e4534c87a8
fix: h 2023-09-21 17:41:57 +02:00
Mira
86d5577a91
chore: update packages 2023-09-21 17:31:38 +02:00
Mira
33ba00a462
fix: Configurations & Platforms 2023-09-21 17:18:37 +02:00
Mira
7ec2c8b60c
fix: PlatformTarget 2023-09-21 17:17:35 +02:00
Mira
bae09d2727
feat: update to net7 2023-09-21 17:13:21 +02:00
Mira
3cab23c592
refactor: Apply .editorconfig 2023-09-21 17:01:51 +02:00
2 changed files with 161 additions and 172 deletions

View file

@ -3,9 +3,10 @@ using System.Net.Http;
using System.Text; using System.Text;
using System.Text.Json; using System.Text.Json;
using System.IO; using System.IO;
using System.Text.Json.Serialization;
namespace QuickChart;
namespace QuickChart
{
internal class QuickChartShortUrlResponse internal class QuickChartShortUrlResponse
{ {
#pragma warning disable IDE1006 // Naming Styles #pragma warning disable IDE1006 // Naming Styles
@ -29,104 +30,92 @@ namespace QuickChart
public string Host { get; set; } public string Host { get; set; }
public int Port { get; set; } public int Port { get; set; }
private static readonly HttpClient Client = new HttpClient(); private static readonly HttpClient Client = new();
public Chart(string scheme = null, string host = null, int? port = null) public Chart(string scheme = null, string host = null, int? port = null)
{ {
Width = 500; this.Width = 500;
Height = 300; this.Height = 300;
DevicePixelRatio = 1.0; this.DevicePixelRatio = 1.0;
Format = "png"; this.Format = "png";
BackgroundColor = "transparent"; this.BackgroundColor = "transparent";
if (host != null) if (host != null)
{ {
Host = host; this.Host = host;
if (scheme != null) if (scheme != null)
{ {
Scheme = scheme; this.Scheme = scheme;
if (port.HasValue) this.Port = port ?? (scheme == "http" ? 80 : 443);
{
Port = port.Value;
} }
else else
{ {
if(scheme == "http") this.Scheme = "https";
{ this.Port = 443;
Port = 80;
}
else
{
Port = 443;
}
} }
} }
else else
{ {
Scheme = "https"; this.Scheme = "https";
Port = 443; this.Host = "quickchart.io";
} this.Port = 443;
}
else
{
Scheme = "https";
Host = "quickchart.io";
Port = 443;
} }
} }
public string GetUrl() public string GetUrl()
{ {
if (Config == null) if (this.Config == null)
{ {
throw new NullReferenceException("You must set Config on the QuickChart object before generating a URL"); throw new NullReferenceException("You must set Config on the QuickChart object before generating a URL");
} }
StringBuilder builder = new StringBuilder(); var builder = new StringBuilder();
builder.Append("w=").Append(Width.ToString()); _ = builder.Append("w=").Append(this.Width);
builder.Append("&h=").Append(Height.ToString()); _ = builder.Append("&h=").Append(this.Height);
builder.Append("&devicePixelRatio=").Append(DevicePixelRatio.ToString()); _ = builder.Append("&devicePixelRatio=").Append(this.DevicePixelRatio);
builder.Append("&f=").Append(Format); _ = builder.Append("&f=").Append(this.Format);
builder.Append("&bkg=").Append(Uri.EscapeDataString(BackgroundColor)); _ = builder.Append("&bkg=").Append(Uri.EscapeDataString(this.BackgroundColor));
builder.Append("&c=").Append(Uri.EscapeDataString(Config)); _ = builder.Append("&c=").Append(Uri.EscapeDataString(this.Config));
if (!string.IsNullOrEmpty(Key)) if (!string.IsNullOrEmpty(this.Key))
{ {
builder.Append("&key=").Append(Uri.EscapeDataString(Key)); _ = builder.Append("&key=").Append(Uri.EscapeDataString(this.Key));
} }
if (!string.IsNullOrEmpty(Version)) if (!string.IsNullOrEmpty(this.Version))
{ {
builder.Append("&v=").Append(Uri.EscapeDataString(Version)); _ = builder.Append("&v=").Append(Uri.EscapeDataString(this.Version));
} }
return $"{Scheme}://{Host}:{Port}/chart?{builder}"; return $"{this.Scheme}://{this.Host}:{this.Port}/chart?{builder}";
} }
public string GetShortUrl() public string GetShortUrl()
{ {
if (Config == null) if (this.Config == null)
{ {
throw new NullReferenceException("You must set Config on the QuickChart object before generating a URL"); throw new NullReferenceException("You must set Config on the QuickChart object before generating a URL");
} }
JsonSerializerOptions options = new JsonSerializerOptions(); var options = new JsonSerializerOptions
options.IgnoreNullValues = true;
String json = JsonSerializer.Serialize(new
{ {
width = Width, DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull
height = Height, };
backgroundColor = BackgroundColor,
devicePixelRatio = DevicePixelRatio, var json = JsonSerializer.Serialize(new
format = Format, {
chart = Config, width = this.Width,
key = Key, height = this.Height,
version = Version, backgroundColor = this.BackgroundColor,
devicePixelRatio = this.DevicePixelRatio,
format = this.Format,
chart = this.Config,
key = this.Key,
version = this.Version,
}, options); }, options);
string url = $"{Scheme}://{Host}:{Port}/chart/create"; var url = $"{this.Scheme}://{this.Host}:{this.Port}/chart/create";
HttpResponseMessage response = Client.PostAsync( var response = Client.PostAsync(
url, url,
new StringContent(json, Encoding.UTF8, "application/json") new StringContent(json, Encoding.UTF8, "application/json")
).Result; ).Result;
@ -136,52 +125,49 @@ namespace QuickChart
throw new ApiException("Unsuccessful response from API", response); throw new ApiException("Unsuccessful response from API", response);
} }
string responseText = response.Content.ReadAsStringAsync().Result; var responseText = response.Content.ReadAsStringAsync().Result;
QuickChartShortUrlResponse result = JsonSerializer.Deserialize<QuickChartShortUrlResponse>(responseText); var result = JsonSerializer.Deserialize<QuickChartShortUrlResponse>(responseText);
return result.url; return result.url;
} }
public byte[] ToByteArray() public byte[] ToByteArray()
{ {
if (Config == null) if (this.Config == null)
{ {
throw new NullReferenceException("You must set Config on the QuickChart object before generating a URL"); throw new NullReferenceException("You must set Config on the QuickChart object before generating a URL");
} }
JsonSerializerOptions options = new JsonSerializerOptions(); var options = new JsonSerializerOptions
options.IgnoreNullValues = true;
String json = JsonSerializer.Serialize(new
{ {
width = Width, DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull
height = Height, };
backgroundColor = BackgroundColor,
devicePixelRatio = DevicePixelRatio, var json = JsonSerializer.Serialize(new
format = Format, {
chart = Config, width = this.Width,
key = Key, height = this.Height,
version = Version, backgroundColor = this.BackgroundColor,
devicePixelRatio = this.DevicePixelRatio,
format = this.Format,
chart = this.Config,
key = this.Key,
version = this.Version,
}, options); }, options);
string url = $"{Scheme}://{Host}:{Port}/chart"; var url = $"{this.Scheme}://{this.Host}:{this.Port}/chart";
HttpResponseMessage response = Client.PostAsync( var response = Client.PostAsync(
url, url,
new StringContent(json, Encoding.UTF8, "application/json") new StringContent(json, Encoding.UTF8, "application/json")
).Result; ).Result;
if (!response.IsSuccessStatusCode) return !response.IsSuccessStatusCode
{ ? throw new ApiException("Unsuccessful response from API", response)
throw new ApiException("Unsuccessful response from API", response); : response.Content.ReadAsByteArrayAsync().Result;
}
return response.Content.ReadAsByteArrayAsync().Result;
} }
public void ToFile(string filePath) public void ToFile(string filePath)
{ => File.WriteAllBytes(filePath, this.ToByteArray());
File.WriteAllBytes(filePath, this.ToByteArray());
}
} }
public class ApiException : Exception public class ApiException : Exception
@ -191,4 +177,3 @@ namespace QuickChart
public HttpResponseMessage Response { get; private set; } public HttpResponseMessage Response { get; private set; }
} }
}

View file

@ -2,23 +2,27 @@
<PropertyGroup> <PropertyGroup>
<OutputType>Library</OutputType> <OutputType>Library</OutputType>
<TargetFrameworks>netcoreapp3.1;netstandard2.0;net472</TargetFrameworks> <TargetFramework>net8.0</TargetFramework>
<PlatformTarget>x64</PlatformTarget>
<Configurations>Debug;Release;x64</Configurations>
<Platforms>AnyCPU;x64</Platforms>
<PackOnBuild>true</PackOnBuild> <PackOnBuild>true</PackOnBuild>
<Authors>Ian Webster</Authors> <Authors>Ian Webster, TheXorog</Authors>
<Copyright>Ian Webster</Copyright> <Copyright>Ian Webster, TheXorog</Copyright>
<PackageLicenseExpression>MIT</PackageLicenseExpression> <PackageLicenseExpression>MIT</PackageLicenseExpression>
<Owners>QuickChart</Owners> <Owners>QuickChart</Owners>
<PackageProjectUrl>https://github.com/typpo/quickchart-csharp</PackageProjectUrl> <PackageProjectUrl>https://github.com/TheXorog/quickchart-csharp</PackageProjectUrl>
<Summary>Client library for the QuickChart Chart API, used to generate chart images.</Summary> <Summary>Client library for the QuickChart Chart API, used to generate chart images.</Summary>
<PackageTags>chart image, chart api, chart, charts, image charts</PackageTags> <PackageTags>chart image, chart api, chart, charts, image charts</PackageTags>
<Title>QuickChart</Title> <Title>QuickChart</Title>
<Description>Client library for the QuickChart Chart API, used to generate chart images.</Description> <Description>Client library for the QuickChart Chart API, used to generate chart images.</Description>
<PackageVersion>2.3.0</PackageVersion> <PackageVersion>2.3.0</PackageVersion>
<PackageId>QuickChart</PackageId> <PackageId>QuickChart</PackageId>
<RunAnalyzersDuringBuild>False</RunAnalyzersDuringBuild>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="System.Text.Json" Version="5.0.0" /> <PackageReference Include="System.Text.Json" Version="7.0.3" />
<PackageReference Include="System.Net.Http" Version="4.3.4" /> <PackageReference Include="System.Net.Http" Version="4.3.4" />
</ItemGroup> </ItemGroup>
</Project> </Project>