110 lines
No EOL
3.2 KiB
C#
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();
|
|
}
|
|
} |