You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
109 lines
3.4 KiB
109 lines
3.4 KiB
4 years ago
|
using Newtonsoft.Json;
|
||
|
using Newtonsoft.Json.Linq;
|
||
|
using System.Collections.Generic;
|
||
|
|
||
|
namespace MatrixDotNetLib
|
||
|
{
|
||
|
public class MatrixSyncRooms
|
||
|
{
|
||
|
// once the JSON from "join" is parsed, this is set to its contents as an object
|
||
|
public Dictionary<string,MatrixSyncRoom> Joined { get; private set;}
|
||
|
|
||
|
public Dictionary<string, MatrixSyncRoom> Invited { get; private set; }
|
||
|
|
||
|
public Dictionary<string, MatrixSyncRoom> Left { get; private set; }
|
||
|
|
||
|
public JObject Join
|
||
|
{
|
||
|
get { return null; }
|
||
|
set
|
||
|
{
|
||
|
// takes JSON children and parses them into objects
|
||
|
// we have to do this bc the entity names under "join" are dynamic
|
||
|
// each entity holds a well-defined object though
|
||
|
|
||
|
// create dict for Joined
|
||
|
Joined = new Dictionary<string, MatrixSyncRoom>();
|
||
|
|
||
|
// these AREN'T an array
|
||
|
ParseRooms(value, "Joined");
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public JObject Invite
|
||
|
{
|
||
|
get { return null; }
|
||
|
set
|
||
|
{
|
||
|
// create dict for Joined
|
||
|
Invited = new Dictionary<string, MatrixSyncRoom>();
|
||
|
|
||
|
// these AREN'T an array
|
||
|
ParseRooms(value, "Invited");
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public JObject Leave
|
||
|
{
|
||
|
get { return null; }
|
||
|
set
|
||
|
{
|
||
|
// create dict for Joined
|
||
|
Left = new Dictionary<string, MatrixSyncRoom>();
|
||
|
|
||
|
// these AREN'T an array
|
||
|
ParseRooms(value, "Left");
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public void ParseRooms(JObject roomsJson, string valType)
|
||
|
{
|
||
|
// get the children of this object
|
||
|
JEnumerable<JToken> kids = roomsJson.Children();
|
||
|
|
||
|
Dictionary<string,MatrixSyncRoom> roomList = new Dictionary<string,MatrixSyncRoom>();
|
||
|
|
||
|
foreach (JProperty kid in kids)
|
||
|
{
|
||
|
MatrixSyncRoom msr = JsonConvert.DeserializeObject<MatrixSyncRoom>(kid.Value.ToString());
|
||
|
|
||
|
roomList.Add(kid.Name, msr);
|
||
|
}
|
||
|
|
||
|
// get the target
|
||
|
this.GetType().GetProperty(valType).SetValue(this,roomList);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
//// simplest implementation
|
||
|
//// might not work for UWP
|
||
|
//// sauce: https://stackoverflow.com/questions/5527316/how-to-set-the-content-of-an-httpwebrequest-in-c
|
||
|
//HttpContent requestContent = new StringContent(requestJson, Encoding.UTF8, "application/json");
|
||
|
|
||
|
//HttpClient client = new HttpClient();
|
||
|
//client.BaseAddress = new Uri(loginUrl);
|
||
|
//client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
|
||
|
|
||
|
//HttpResponseMessage responseMessage = client.PostAsync(loginUrl, requestContent).Result;
|
||
|
//string responseString = responseMessage.Content.ReadAsStringAsync().Result;
|
||
|
|
||
|
//if(responseString.Contains("errcode"))
|
||
|
//{
|
||
|
// // deserialize into error object
|
||
|
// MatrixError error = JsonConvert.DeserializeObject<MatrixError>(responseString);
|
||
|
|
||
|
// // convert error object to a string
|
||
|
// string errMsg = error.ErrorCode + ": " + error.ErrorMessage;
|
||
|
|
||
|
// // throw exception (can be caught and handled gracefully)
|
||
|
// throw new Exception(errMsg);
|
||
|
//}
|
||
|
//else
|
||
|
//{
|
||
|
// MatrixLoginResponse response = JsonConvert.DeserializeObject<MatrixLoginResponse>(responseString);
|
||
|
|
||
|
// return response;
|
||
|
//}
|