[backend/federation] Correctly serialize value types
This commit is contained in:
parent
0148710e00
commit
f895a9e541
8 changed files with 36 additions and 11 deletions
|
@ -103,8 +103,8 @@ public class NoteRenderer(
|
|||
Renote = renote,
|
||||
Quote = quote,
|
||||
ContentType = "text/x.misskeymarkdown",
|
||||
CreatedAt = note.CreatedAt.ToStringMastodon(),
|
||||
EditedAt = note.UpdatedAt?.ToStringMastodon(),
|
||||
CreatedAt = note.CreatedAt.ToStringIso8601Like(),
|
||||
EditedAt = note.UpdatedAt?.ToStringIso8601Like(),
|
||||
RepliesCount = note.RepliesCount,
|
||||
RenoteCount = note.RenoteCount,
|
||||
FavoriteCount = likeCount,
|
||||
|
|
|
@ -37,7 +37,7 @@ public class NotificationRenderer(NoteRenderer noteRenderer, UserRenderer userRe
|
|||
Type = NotificationEntity.EncodeType(notification.Type),
|
||||
Note = note,
|
||||
Notifier = notifier,
|
||||
CreatedAt = notification.CreatedAt.ToStringMastodon()
|
||||
CreatedAt = notification.CreatedAt.ToStringIso8601Like()
|
||||
};
|
||||
|
||||
return res;
|
||||
|
|
|
@ -26,7 +26,7 @@ public class UserRenderer(IOptions<Config.InstanceSection> config, MfmConverter
|
|||
Acct = acct,
|
||||
FullyQualifiedName = $"{user.Username}@{user.Host ?? config.Value.AccountDomain}",
|
||||
IsLocked = user.IsLocked,
|
||||
CreatedAt = user.CreatedAt.ToStringMastodon(),
|
||||
CreatedAt = user.CreatedAt.ToStringIso8601Like(),
|
||||
FollowersCount = user.FollowersCount,
|
||||
FollowingCount = user.FollowingCount,
|
||||
StatusesCount = user.NotesCount,
|
||||
|
|
|
@ -5,6 +5,7 @@ public static class Constants
|
|||
public const string ActivityStreamsNs = "https://www.w3.org/ns/activitystreams";
|
||||
public const string W3IdSecurityNs = "https://w3id.org/security";
|
||||
public const string PurlDcNs = "http://purl.org/dc/terms";
|
||||
public const string XsdNs = "http://www.w3.org/2001/XMLSchema";
|
||||
public static readonly string[] SystemUsers = ["instance.actor", "relay.actor"];
|
||||
|
||||
public static readonly string[] BrowserSafeMimeTypes =
|
||||
|
|
|
@ -2,7 +2,7 @@ namespace Iceshrimp.Backend.Core.Extensions;
|
|||
|
||||
public static class DateTimeExtensions
|
||||
{
|
||||
public static string ToStringMastodon(this DateTime dateTime)
|
||||
public static string ToStringIso8601Like(this DateTime dateTime)
|
||||
{
|
||||
return dateTime.ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fffK");
|
||||
}
|
||||
|
|
|
@ -20,7 +20,7 @@ public class ASCollection<T>() : ASObjectBase where T : ASObject
|
|||
|
||||
[J($"{Constants.ActivityStreamsNs}#totalItems")]
|
||||
[JC(typeof(VC))]
|
||||
public long? TotalItems { get; set; }
|
||||
public uint? TotalItems { get; set; }
|
||||
}
|
||||
|
||||
public sealed class ASCollectionConverter : ASSerializer.ListSingleObjectConverter<ASCollection<ASObject>>;
|
||||
|
|
|
@ -1,3 +1,5 @@
|
|||
using Iceshrimp.Backend.Core.Configuration;
|
||||
using Iceshrimp.Backend.Core.Extensions;
|
||||
using Newtonsoft.Json;
|
||||
using Newtonsoft.Json.Linq;
|
||||
using J = Newtonsoft.Json.JsonPropertyAttribute;
|
||||
|
@ -12,7 +14,7 @@ public class LDValueObject<T>
|
|||
|
||||
public class ValueObjectConverter : JsonConverter
|
||||
{
|
||||
public override bool CanWrite => false;
|
||||
public override bool CanWrite => true;
|
||||
|
||||
public override bool CanConvert(Type objectType)
|
||||
{
|
||||
|
@ -43,6 +45,28 @@ public class ValueObjectConverter : JsonConverter
|
|||
|
||||
public override void WriteJson(JsonWriter writer, object? value, JsonSerializer serializer)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
writer.WriteStartObject();
|
||||
|
||||
switch (value)
|
||||
{
|
||||
case DateTime dt:
|
||||
writer.WritePropertyName("@type");
|
||||
writer.WriteValue($"{Constants.XsdNs}#dateTime");
|
||||
writer.WritePropertyName("@value");
|
||||
writer.WriteValue(dt.ToStringIso8601Like());
|
||||
break;
|
||||
case uint ui:
|
||||
writer.WritePropertyName("@type");
|
||||
writer.WriteValue($"{Constants.XsdNs}#nonNegativeInteger");
|
||||
writer.WritePropertyName("@value");
|
||||
writer.WriteValue(ui);
|
||||
break;
|
||||
default:
|
||||
writer.WritePropertyName("@value");
|
||||
writer.WriteValue(value);
|
||||
break;
|
||||
}
|
||||
|
||||
writer.WriteEndObject();
|
||||
}
|
||||
}
|
|
@ -219,7 +219,7 @@ public class JobQueue<T>(
|
|||
else
|
||||
{
|
||||
logger.LogTrace("Job in queue {queue} completed after {duration} ms, has been queued since {time}",
|
||||
name, job.Duration, job.QueuedAt.ToStringMastodon());
|
||||
name, job.Duration, job.QueuedAt.ToStringIso8601Like());
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -236,8 +236,8 @@ public class JobQueue<T>(
|
|||
job.DelayedUntil ??= DateTime.Now;
|
||||
var logger = scope.ServiceProvider.GetRequiredService<ILogger<QueueService>>();
|
||||
logger.LogTrace("Job in queue {queue} was delayed to {time} after {duration} ms, has been queued since {time}",
|
||||
name, job.DelayedUntil.Value.ToStringMastodon(), job.Duration,
|
||||
job.QueuedAt.ToStringMastodon());
|
||||
name, job.DelayedUntil.Value.ToStringIso8601Like(), job.Duration,
|
||||
job.QueuedAt.ToStringIso8601Like());
|
||||
|
||||
var timestamp = (long)job.DelayedUntil.Value.Subtract(DateTime.UnixEpoch).TotalSeconds;
|
||||
await _redisDb.SortedSetAddAsync(targetQueue, RedisValue.Unbox(RedisHelpers.Serialize(job)), timestamp);
|
||||
|
|
Loading…
Add table
Reference in a new issue