GoToSocial lets an author approve replies, likes and boosts first. PrivaPub now asks that author and marks the persona's reply or boost privapub.approval: pending until the answer, or rejected; the card shows which, with an hourglass or a cross. One the policy shuts out is refused (422) and shown as the error it is. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01LsXgEaXee4GCU1hwYgPJXw
96 lines
2.9 KiB
C#
96 lines
2.9 KiB
C#
namespace decePubClient.Models.Mastodon;
|
|
|
|
/// <summary>Status.privapub: what a Mastodon status cannot say (PrivaPub's Mastodon client API invariant 7).</summary>
|
|
public class PrivaPubStatus
|
|
{
|
|
/// <summary>The ActivityPub type of a remote object: Note, Article, Page, Video, Audio, Event, Question…</summary>
|
|
public string ObjectType { get; set; }
|
|
/// <summary>Its community's moderators locked it: PrivaPub refuses a reply.</summary>
|
|
public bool Locked { get; set; }
|
|
/// <summary>The persona's reply or boost of a post whose author must approve it first (GoToSocial's interaction
|
|
/// policies): "pending" until the author answers, "rejected" if they refuse; null otherwise.</summary>
|
|
public string Approval { get; set; }
|
|
public string Title { get; set; }
|
|
public string Excerpt { get; set; }
|
|
public string Cover { get; set; }
|
|
public PrivaPubSource Source { get; set; }
|
|
public PrivaPubLink Link { get; set; }
|
|
public PrivaPubVideo Video { get; set; }
|
|
public PrivaPubAudio Audio { get; set; }
|
|
public PrivaPubEvent Event { get; set; }
|
|
/// <summary>A remote post's own place (Pixelfed's location), shown only.</summary>
|
|
public PrivaPubPlace Place { get; set; }
|
|
public PrivaPubVotes Votes { get; set; }
|
|
}
|
|
|
|
public class PrivaPubSource
|
|
{
|
|
public string Content { get; set; }
|
|
public string MediaType { get; set; }
|
|
}
|
|
|
|
public class PrivaPubLink
|
|
{
|
|
public string Url { get; set; }
|
|
public string Title { get; set; }
|
|
public string Description { get; set; }
|
|
public string Image { get; set; }
|
|
public bool FromPublisher { get; set; }
|
|
}
|
|
|
|
public class PrivaPubVariant
|
|
{
|
|
public string Url { get; set; }
|
|
public string MediaType { get; set; }
|
|
public int? Width { get; set; }
|
|
public int? Height { get; set; }
|
|
public double? Fps { get; set; }
|
|
public long? Size { get; set; }
|
|
}
|
|
|
|
public class PrivaPubVideo
|
|
{
|
|
public double? Duration { get; set; }
|
|
public List<PrivaPubVariant> Variants { get; set; } = [];
|
|
public bool IsLive { get; set; }
|
|
public long? Views { get; set; }
|
|
public string Licence { get; set; }
|
|
public string Category { get; set; }
|
|
}
|
|
|
|
public class PrivaPubAudio
|
|
{
|
|
public double? Duration { get; set; }
|
|
public List<PrivaPubVariant> Variants { get; set; } = [];
|
|
public string Album { get; set; }
|
|
public string Licence { get; set; }
|
|
}
|
|
|
|
public class PrivaPubEvent
|
|
{
|
|
public DateTime? Start { get; set; }
|
|
public DateTime? End { get; set; }
|
|
public string TimeZone { get; set; }
|
|
public List<PrivaPubPlace> Places { get; set; } = [];
|
|
public string OnlineUrl { get; set; }
|
|
public int? Participants { get; set; }
|
|
public int? Capacity { get; set; }
|
|
public string Status { get; set; }
|
|
}
|
|
|
|
public class PrivaPubPlace
|
|
{
|
|
public string Name { get; set; }
|
|
public string Address { get; set; }
|
|
public string Country { get; set; }
|
|
public double? Latitude { get; set; }
|
|
public double? Longitude { get; set; }
|
|
public string Url { get; set; }
|
|
}
|
|
|
|
public class PrivaPubVotes
|
|
{
|
|
public int Up { get; set; }
|
|
public int Down { get; set; }
|
|
}
|