namespace decePubClient.Models.Mastodon; /// /// type: mention, status, reblog, follow, follow_request, favourite, poll, update, quote, quoted_update, /// pleroma:emoji_reaction or moderation_warning. Status is null for follows and for most warnings (a removed post is gone). /// public class Notification { public string Id { get; set; } public string Type { get; set; } public DateTime CreatedAt { get; set; } public Account Account { get; set; } public Status Status { get; set; } /// A reaction's emoji: the emoji itself, or a custom emoji's shortcode. public string Emoji { get; set; } /// A custom emoji reaction's picture. public string EmojiUrl { get; set; } /// The group it belongs to (likes and boosts of one post, follows within an hour), or ungrouped-{id}. public string GroupKey { get; set; } /// A moderation_warning's: what this server's staff did and told the persona. Its Account is the persona /// itself, as Mastodon's are. public AccountWarning ModerationWarning { get; set; } } /// Mastodon's AccountWarning: what this server's staff did to the persona and why, as they wrote it. public class AccountWarning { public string Id { get; set; } /// none, silence, suspend or delete_statuses (PrivaPub's); Mastodon also has disable, mark_statuses_as_sensitive /// and sensitive. public string Action { get; set; } public string Text { get; set; } /// The posts it is about (a removed post's id stays named). public List StatusIds { get; set; } = []; public DateTime? CreatedAt { get; set; } } /// /api/v2/notifications: notifications folded into groups, with the accounts and posts they name. public class GroupedNotifications { public List Accounts { get; set; } = []; public List Statuses { get; set; } = []; public List NotificationGroups { get; set; } = []; } public class NotificationGroup { public string GroupKey { get; set; } public int NotificationsCount { get; set; } public string Type { get; set; } public string MostRecentNotificationId { get; set; } public string PageMinId { get; set; } public string PageMaxId { get; set; } public DateTime LatestPageNotificationAt { get; set; } public List SampleAccountIds { get; set; } = []; public string StatusId { get; set; } public string Emoji { get; set; } public string EmojiUrl { get; set; } /// A moderation_warning group's newest warning. public AccountWarning ModerationWarning { get; set; } } public class MarkersForm { public MarkerForm Notifications { get; set; } } public class MarkerForm { public string LastReadId { get; set; } } public class UnreadCount { public int Count { get; set; } } /// A direct conversation: its participants and its last post. public class Conversation { public string Id { get; set; } public bool Unread { get; set; } public List Accounts { get; set; } = []; public Status LastStatus { get; set; } }