95 lines
3.6 KiB
C#
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);
|
|
}
|
|
}
|
|
}
|