Refactor ASObjectConverter
This commit is contained in:
parent
6055a4604e
commit
8dc044d428
4 changed files with 37 additions and 43 deletions
|
@ -10,22 +10,22 @@ namespace Iceshrimp.Backend.Core.Federation.ActivityPub;
|
|||
//TODO: enforce @type values
|
||||
|
||||
public class ActivityPubService(HttpClient client, HttpRequestService httpRqSvc) {
|
||||
private static readonly JsonSerializerSettings JsonSerializerSettings = new() { DateParseHandling = DateParseHandling.None };
|
||||
private static readonly JsonSerializerSettings JsonSerializerSettings =
|
||||
new() { DateParseHandling = DateParseHandling.None };
|
||||
|
||||
public async Task<JArray> FetchActivity(string url) {
|
||||
public async Task<IEnumerable<ASObject>> FetchActivity(string url) {
|
||||
var request = httpRqSvc.Get(url, ["application/activity+json"]);
|
||||
var response = await client.SendAsync(request);
|
||||
var input = await response.Content.ReadAsStringAsync();
|
||||
var json = JsonConvert.DeserializeObject<JObject?>(input, JsonSerializerSettings);
|
||||
|
||||
var res = LdHelpers.Expand(json);
|
||||
if (res == null) throw new Exception("Failed to expand JSON-LD object");
|
||||
return res;
|
||||
var res = LdHelpers.Expand(json) ?? throw new Exception("Failed to expand JSON-LD object");
|
||||
return res.Select(p => p.ToObject<ASObject>(new JsonSerializer { Converters = { new ASObjectConverter() } }) ??
|
||||
throw new Exception("Failed to deserialize activity"));
|
||||
}
|
||||
|
||||
public async Task<ASActor> FetchActor(string uri) {
|
||||
var activity = await FetchActivity(uri);
|
||||
var actor = activity.ToObject<List<ASActor>>();
|
||||
return actor?.First() ?? throw new Exception("Failed to fetch actor");
|
||||
return activity.OfType<ASActor>().FirstOrDefault() ?? throw new Exception("Failed to fetch actor");
|
||||
}
|
||||
}
|
|
@ -1,12 +1,5 @@
|
|||
using System.Collections;
|
||||
using System.Globalization;
|
||||
using Iceshrimp.Backend.Core.Helpers;
|
||||
using Newtonsoft.Json;
|
||||
using Newtonsoft.Json.Linq;
|
||||
using VDS.RDF;
|
||||
using VDS.RDF.JsonLd;
|
||||
using VDS.RDF.Parsing;
|
||||
using VDS.RDF.Writing.Formatting;
|
||||
|
||||
namespace Iceshrimp.Backend.Core.Federation.ActivityStreams;
|
||||
|
||||
|
|
|
@ -11,35 +11,8 @@ public class ASActivity : ASObject {
|
|||
public ASActor? Actor { get; set; }
|
||||
|
||||
[J("https://www.w3.org/ns/activitystreams#object")]
|
||||
[JC(typeof(ASActivityObjectConverter))]
|
||||
[JC(typeof(ASObjectConverter))]
|
||||
public ASObject? Object { get; set; }
|
||||
}
|
||||
|
||||
public sealed class ASActivityConverter : ASSerializer.ListSingleObjectConverter<ASActivity>;
|
||||
|
||||
internal sealed class ASActivityObjectConverter : JsonConverter {
|
||||
public override bool CanWrite => false;
|
||||
|
||||
public override bool CanConvert(Type objectType) {
|
||||
return true;
|
||||
}
|
||||
|
||||
public override object? ReadJson(JsonReader reader, Type objectType, object? existingValue,
|
||||
JsonSerializer serializer) {
|
||||
if (reader.TokenType == JsonToken.StartArray) {
|
||||
var obj = JArray.Load(reader);
|
||||
return ASObject.Deserialize(obj[0]);
|
||||
}
|
||||
|
||||
if (reader.TokenType == JsonToken.StartObject) {
|
||||
var obj = JObject.Load(reader);
|
||||
return ASObject.Deserialize(obj);
|
||||
}
|
||||
|
||||
throw new Exception("this shouldn't happen");
|
||||
}
|
||||
|
||||
public override void WriteJson(JsonWriter writer, object? value, JsonSerializer serializer) {
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
}
|
|
@ -1,3 +1,4 @@
|
|||
using Newtonsoft.Json;
|
||||
using Newtonsoft.Json.Linq;
|
||||
using J = Newtonsoft.Json.JsonPropertyAttribute;
|
||||
|
||||
|
@ -25,3 +26,30 @@ public class ASObject {
|
|||
};
|
||||
}
|
||||
}
|
||||
|
||||
internal sealed class ASObjectConverter : JsonConverter {
|
||||
public override bool CanWrite => false;
|
||||
|
||||
public override bool CanConvert(Type objectType) {
|
||||
return true;
|
||||
}
|
||||
|
||||
public override object? ReadJson(JsonReader reader, Type objectType, object? existingValue,
|
||||
JsonSerializer serializer) {
|
||||
if (reader.TokenType == JsonToken.StartArray) {
|
||||
var obj = JArray.Load(reader);
|
||||
return ASObject.Deserialize(obj[0]);
|
||||
}
|
||||
|
||||
if (reader.TokenType == JsonToken.StartObject) {
|
||||
var obj = JObject.Load(reader);
|
||||
return ASObject.Deserialize(obj);
|
||||
}
|
||||
|
||||
throw new Exception("this shouldn't happen");
|
||||
}
|
||||
|
||||
public override void WriteJson(JsonWriter writer, object? value, JsonSerializer serializer) {
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
}
|
Loading…
Add table
Reference in a new issue