Uwaa/Pleroma/API/PublishStatus.cs
2024-12-13 12:25:20 +00:00

110 lines
No EOL
3.2 KiB
C#

namespace Uwaa.Pleroma.API;
[JsonConverter(typeof(PublishStatusConverter))]
public class PublishStatus
{
/// <summary>
/// Text content of the status.
/// </summary>
public string Content { get; set; }
/// <summary>
/// Mark status and attached media as sensitive?
/// </summary>
public bool Sensitive { get; set; }
/// <summary>
/// The number of seconds the posted activity should expire in. When a posted activity expires it will be deleted from the server, and a delete request for it will be federated. This needs to be longer than an hour.
/// </summary>
public int? ExpiresIn { get; set; } = null!;
/// <summary>
/// ID of the status being replied to, if status is a reply
/// </summary>
public string? ReplyTo { get; set; }
/// <summary>
/// ID of the status being quoted.
/// </summary>
public string? Quoting { get; set; }
/// <summary>
/// ISO 639 language code for this status.
/// </summary>
public string? Language { get; set; }
/// <summary>
/// Visibility of the posted status.
/// </summary>
public StatusVisibility Visibility { get; set; } = StatusVisibility.Public;
/// <summary>
/// Called after the status has been successfully published.
/// </summary>
[JsonIgnore]
public Action? OnPublish;
public PublishStatus(string content)
{
Content = content ?? throw new ArgumentNullException(nameof(content));
}
}
class PublishStatusConverter : JsonConverter<PublishStatus>
{
public sealed override bool CanConvert(Type typeToConvert) => typeToConvert == typeof(PublishStatus);
public override PublishStatus Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
{
throw new NotImplementedException();
}
public override void Write(Utf8JsonWriter writer, PublishStatus status, JsonSerializerOptions options)
{
writer.WriteStartObject();
writer.WritePropertyName("status");
writer.WriteStringValue(status.Content);
writer.WritePropertyName("content-type");
writer.WriteStringValue("text/plain");
if (status.Sensitive)
{
writer.WritePropertyName("sensitive");
writer.WriteBooleanValue(true);
}
if (status.ExpiresIn.HasValue)
{
writer.WritePropertyName("expires_in");
writer.WriteNumberValue(status.ExpiresIn.Value);
}
if (status.ReplyTo != null)
{
writer.WritePropertyName("in_reply_to_id");
writer.WriteStringValue(status.ReplyTo);
}
if (status.Quoting != null)
{
writer.WritePropertyName("quote_id");
writer.WriteStringValue(status.Quoting);
}
if (status.Language != null)
{
writer.WritePropertyName("language");
writer.WriteStringValue(status.Language);
}
if (status.Visibility != StatusVisibility.Public)
{
writer.WritePropertyName("visibility");
writer.WriteStringValue(status.Visibility.ToString().ToLowerInvariant());
}
writer.WriteEndObject();
}
}