158 lines
7.3 KiB
Go
158 lines
7.3 KiB
Go
/*
|
|
GoToSocial
|
|
Copyright (C) 2021 GoToSocial Authors admin@gotosocial.org
|
|
|
|
This program is free software: you can redistribute it and/or modify
|
|
it under the terms of the GNU Affero General Public License as published by
|
|
the Free Software Foundation, either version 3 of the License, or
|
|
(at your option) any later version.
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU Affero General Public License for more details.
|
|
|
|
You should have received a copy of the GNU Affero General Public License
|
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
*/
|
|
|
|
package model
|
|
|
|
// Status represents a mastodon-api Status type, as defined here: https://docs.joinmastodon.org/entities/status/
|
|
type Status struct {
|
|
// ID of the status in the database.
|
|
ID string `json:"id"`
|
|
// The date when this status was created (ISO 8601 Datetime)
|
|
CreatedAt string `json:"created_at"`
|
|
// ID of the status being replied.
|
|
InReplyToID string `json:"in_reply_to_id,omitempty"`
|
|
// ID of the account being replied to.
|
|
InReplyToAccountID string `json:"in_reply_to_account_id,omitempty"`
|
|
// Is this status marked as sensitive content?
|
|
Sensitive bool `json:"sensitive"`
|
|
// Subject or summary line, below which status content is collapsed until expanded.
|
|
SpoilerText string `json:"spoiler_text"`
|
|
// Visibility of this status.
|
|
Visibility Visibility `json:"visibility"`
|
|
// Primary language of this status. (ISO 639 Part 1 two-letter language code)
|
|
Language string `json:"language"`
|
|
// URI of the status used for federation.
|
|
URI string `json:"uri"`
|
|
// A link to the status's HTML representation.
|
|
URL string `json:"url"`
|
|
// How many replies this status has received.
|
|
RepliesCount int `json:"replies_count"`
|
|
// How many boosts this status has received.
|
|
ReblogsCount int `json:"reblogs_count"`
|
|
// How many favourites this status has received.
|
|
FavouritesCount int `json:"favourites_count"`
|
|
// Have you favourited this status?
|
|
Favourited bool `json:"favourited"`
|
|
// Have you boosted this status?
|
|
Reblogged bool `json:"reblogged"`
|
|
// Have you muted notifications for this status's conversation?
|
|
Muted bool `json:"muted"`
|
|
// Have you bookmarked this status?
|
|
Bookmarked bool `json:"bookmarked"`
|
|
// Have you pinned this status? Only appears if the status is pinnable.
|
|
Pinned bool `json:"pinned,omitempty"`
|
|
// HTML-encoded status content.
|
|
Content string `json:"content"`
|
|
// The status being reblogged.
|
|
Reblog *Status `json:"reblog,omitempty"`
|
|
// The application used to post this status.
|
|
Application *Application `json:"application"`
|
|
// The account that authored this status.
|
|
Account *Account `json:"account"`
|
|
// Media that is attached to this status.
|
|
MediaAttachments []Attachment `json:"media_attachments"`
|
|
// Mentions of users within the status content.
|
|
Mentions []Mention `json:"mentions"`
|
|
// Hashtags used within the status content.
|
|
Tags []Tag `json:"tags"`
|
|
// Custom emoji to be used when rendering status content.
|
|
Emojis []Emoji `json:"emojis"`
|
|
// Preview card for links included within status content.
|
|
Card *Card `json:"card"`
|
|
// The poll attached to the status.
|
|
Poll *Poll `json:"poll"`
|
|
// Plain-text source of a status. Returned instead of content when status is deleted,
|
|
// so the user may redraft from the source text without the client having to reverse-engineer
|
|
// the original text from the HTML content.
|
|
Text string `json:"text"`
|
|
}
|
|
|
|
// StatusCreateRequest represents a mastodon-api status POST request, as defined here: https://docs.joinmastodon.org/methods/statuses/
|
|
// It should be used at the path https://mastodon.example/api/v1/statuses
|
|
type StatusCreateRequest struct {
|
|
// Text content of the status. If media_ids is provided, this becomes optional. Attaching a poll is optional while status is provided.
|
|
Status string `form:"status" json:"status" xml:"status"`
|
|
// Array of Attachment ids to be attached as media. If provided, status becomes optional, and poll cannot be used.
|
|
MediaIDs []string `form:"media_ids" json:"media_ids" xml:"media_ids"`
|
|
// Poll to include with this status.
|
|
Poll *PollRequest `form:"poll" json:"poll" xml:"poll"`
|
|
// ID of the status being replied to, if status is a reply
|
|
InReplyToID string `form:"in_reply_to_id" json:"in_reply_to_id" xml:"in_reply_to_id"`
|
|
// Mark status and attached media as sensitive?
|
|
Sensitive bool `form:"sensitive" json:"sensitive" xml:"sensitive"`
|
|
// Text to be shown as a warning or subject before the actual content. Statuses are generally collapsed behind this field.
|
|
SpoilerText string `form:"spoiler_text" json:"spoiler_text" xml:"spoiler_text"`
|
|
// Visibility of the posted status. Enumerable oneOf public, unlisted, private, direct.
|
|
Visibility Visibility `form:"visibility" json:"visibility" xml:"visibility"`
|
|
// ISO 8601 Datetime at which to schedule a status. Providing this paramter will cause ScheduledStatus to be returned instead of Status. Must be at least 5 minutes in the future.
|
|
ScheduledAt string `form:"scheduled_at" json:"scheduled_at" xml:"scheduled_at"`
|
|
// ISO 639 language code for this status.
|
|
Language string `form:"language" json:"language" xml:"language"`
|
|
// Format in which to parse the submitted status.
|
|
// Can be either plain or markdown. Empty will default to plain.
|
|
Format StatusFormat `form:"format" json:"format" xml:"format"`
|
|
}
|
|
|
|
// Visibility denotes the visibility of this status to other users
|
|
type Visibility string
|
|
|
|
const (
|
|
// VisibilityPublic means visible to everyone
|
|
VisibilityPublic Visibility = "public"
|
|
// VisibilityUnlisted means visible to everyone but only on home timelines or in lists
|
|
VisibilityUnlisted Visibility = "unlisted"
|
|
// VisibilityPrivate means visible to followers only
|
|
VisibilityPrivate Visibility = "private"
|
|
// VisibilityDirect means visible only to tagged recipients
|
|
VisibilityDirect Visibility = "direct"
|
|
)
|
|
|
|
// AdvancedStatusCreateForm wraps the mastodon status create form along with the GTS advanced
|
|
// visibility settings.
|
|
type AdvancedStatusCreateForm struct {
|
|
StatusCreateRequest
|
|
AdvancedVisibilityFlagsForm
|
|
}
|
|
|
|
// AdvancedVisibilityFlagsForm allows a few more advanced flags to be set on new statuses, in addition
|
|
// to the standard mastodon-compatible ones.
|
|
type AdvancedVisibilityFlagsForm struct {
|
|
// The gotosocial visibility model
|
|
VisibilityAdvanced *string `form:"visibility_advanced" json:"visibility_advanced" xml:"visibility_advanced"`
|
|
// This status will be federated beyond the local timeline(s)
|
|
Federated *bool `form:"federated" json:"federated" xml:"federated"`
|
|
// This status can be boosted/reblogged
|
|
Boostable *bool `form:"boostable" json:"boostable" xml:"boostable"`
|
|
// This status can be replied to
|
|
Replyable *bool `form:"replyable" json:"replyable" xml:"replyable"`
|
|
// This status can be liked/faved
|
|
Likeable *bool `form:"likeable" json:"likeable" xml:"likeable"`
|
|
}
|
|
|
|
// StatusFormat determines what kind of format a submitted status should be parsed in
|
|
type StatusFormat string
|
|
|
|
// StatusFormatPlain expects a plaintext status which will then be formatted into html.
|
|
const StatusFormatPlain StatusFormat = "plain"
|
|
|
|
// StatusFormatMarkdown expects a markdown formatted status, which will then be formatted into html.
|
|
const StatusFormatMarkdown StatusFormat = "markdown"
|
|
|
|
// StatusFormatDefault is the format that should be used when nothing else is specified.
|
|
const StatusFormatDefault StatusFormat = StatusFormatPlain
|