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; }
public string Emoji { 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; }
/// 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; }
}