PluralRichPresence/PluralRichPresnce/SimplyPlural/Rest.cs

95 lines
3.6 KiB
C#

using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System.Net.Http.Headers;
using System;
using System.Text;
using PluralRichPresence.Api;
namespace PluralRichPresence.SimplyPlural
{
public class Rest : ApiType
{
private static HttpClient client = new HttpClient();
private const string DEFAULT_HOST = "https://api.apparyllis.com";
private async Task<dynamic> get(string apiEndpoint)
{
HttpResponseMessage response = await client.GetAsync(Config.GetEntry("SIMPLY_PLURAL_API_URI", DEFAULT_HOST) + apiEndpoint);
response.EnsureSuccessStatusCode();
string responseText = Encoding.UTF8.GetString(await response.Content.ReadAsByteArrayAsync());
Logger.Debug("HTTP: " + responseText);
dynamic? result = JsonConvert.DeserializeObject(responseText);
return (result is null) ? new JObject() : (dynamic)result;
}
public static async Task<byte[]> Download(string url)
{
HttpResponseMessage response = await client.GetAsync(url);
return await response.Content.ReadAsByteArrayAsync();
}
public static async Task<string> UploadImage(string url, byte[] data)
{
MultipartFormDataContent requestContent = new MultipartFormDataContent();
ByteArrayContent imageContent = new ByteArrayContent(data);
imageContent.Headers.ContentType = MediaTypeHeaderValue.Parse("image/png");
requestContent.Add(imageContent, "image", "image.png");
await client.PostAsync(url, requestContent);
return "";
}
public async Task<string> GetSystemId()
{
dynamic system = await get("/v1/me");
return system.id;
}
public async Task<Fronter[]> GetCurrentFronters()
{
dynamic fronters = await get("/v1/fronters");
List<Fronter> fronterList = new List<Fronter>();
for (int i = 0; i < fronters.Count; i++)
{
bool fronterExist = fronters[i].exists;
if (!fronterExist) continue;
string fronterMemberId = fronters[i].content.member;
ulong fronterStartTime = fronters[i].content.startTime;
fronterList.Add(new Fronter(fronterMemberId, fronterStartTime));
}
return fronterList.ToArray();
}
public async Task<Member[]> GetMembers(string systemId)
{
dynamic members = await get("/v1/members/" + systemId);
List<Member> memberList = new List<Member>();
for(int i = 0; i < members.Count; i++)
{
bool sysMemberExist = members[i].exists;
if (!sysMemberExist) continue;
string sysMemberId = members[i].id;
string sysMemberSystemId = members[i].content.uid;
string sysMemberName = members[i].content.name;
string sysMemberPronouns = members[i].content.pronouns;
string sysMemberAvaUrl = members[i].content.avatarUrl;
string sysMemberAvaUid = members[i].content.avatarUuid;
memberList.Add(new Member(sysMemberSystemId, sysMemberName, sysMemberPronouns, sysMemberId, sysMemberAvaUid, sysMemberAvaUrl));
}
return memberList.ToArray();
}
public Rest(string token) : base(token)
{
client.DefaultRequestHeaders.TryAddWithoutValidation("User-Agent", "Plural Rich Presence/1.0;");
client.DefaultRequestHeaders.TryAddWithoutValidation("Authorization", token);
}
}
}