6cd033449f
Remote media is now dereferenced and attached properly to incoming federated statuses. Mentions are now dereferenced and attached properly to incoming federated statuses. Small fixes to status visibility. Allow URL params for filtering statuses: // ExcludeRepliesKey is for specifying whether to exclude replies in a list of returned statuses by an account. // PinnedKey is for specifying whether to include pinned statuses in a list of returned statuses by an account. // MaxIDKey is for specifying the maximum ID of the status to retrieve. // MediaOnlyKey is for specifying that only statuses with media should be returned in a list of returned statuses by an account. Add endpoint for fetching an account's statuses.
161 lines
6.1 KiB
Go
161 lines
6.1 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 gtsmodel
|
|
|
|
import "time"
|
|
|
|
// Status represents a user-created 'post' or 'status' in the database, either remote or local
|
|
type Status struct {
|
|
// id of the status in the database
|
|
ID string `pg:"type:uuid,default:gen_random_uuid(),pk,notnull"`
|
|
// uri at which this status is reachable
|
|
URI string `pg:",unique"`
|
|
// web url for viewing this status
|
|
URL string `pg:",unique"`
|
|
// the html-formatted content of this status
|
|
Content string
|
|
// Database IDs of any media attachments associated with this status
|
|
Attachments []string `pg:",array"`
|
|
// Database IDs of any tags used in this status
|
|
Tags []string `pg:",array"`
|
|
// Database IDs of any mentions in this status
|
|
Mentions []string `pg:",array"`
|
|
// Database IDs of any emojis used in this status
|
|
Emojis []string `pg:",array"`
|
|
// when was this status created?
|
|
CreatedAt time.Time `pg:"type:timestamp,notnull,default:now()"`
|
|
// when was this status updated?
|
|
UpdatedAt time.Time `pg:"type:timestamp,notnull,default:now()"`
|
|
// is this status from a local account?
|
|
Local bool
|
|
// which account posted this status?
|
|
AccountID string
|
|
// id of the status this status is a reply to
|
|
InReplyToID string
|
|
// id of the account that this status replies to
|
|
InReplyToAccountID string
|
|
// id of the status this status is a boost of
|
|
BoostOfID string
|
|
// cw string for this status
|
|
ContentWarning string
|
|
// visibility entry for this status
|
|
Visibility Visibility `pg:",notnull"`
|
|
// mark the status as sensitive?
|
|
Sensitive bool
|
|
// what language is this status written in?
|
|
Language string
|
|
// Which application was used to create this status?
|
|
CreatedWithApplicationID string
|
|
// advanced visibility for this status
|
|
VisibilityAdvanced *VisibilityAdvanced
|
|
// What is the activitystreams type of this status? See: https://www.w3.org/TR/activitystreams-vocabulary/#object-types
|
|
// Will probably almost always be Note but who knows!.
|
|
ActivityStreamsType ActivityStreamsObject
|
|
// Original text of the status without formatting
|
|
Text string
|
|
// Has this status been pinned by its owner?
|
|
Pinned bool
|
|
|
|
/*
|
|
INTERNAL MODEL NON-DATABASE FIELDS
|
|
|
|
These are for convenience while passing the status around internally,
|
|
but these fields should *never* be put in the db.
|
|
*/
|
|
|
|
// Account that created this status
|
|
GTSAccount *Account `pg:"-"`
|
|
// Mentions created in this status
|
|
GTSMentions []*Mention `pg:"-"`
|
|
// Hashtags used in this status
|
|
GTSTags []*Tag `pg:"-"`
|
|
// Emojis used in this status
|
|
GTSEmojis []*Emoji `pg:"-"`
|
|
// MediaAttachments used in this status
|
|
GTSMediaAttachments []*MediaAttachment `pg:"-"`
|
|
// Status being replied to
|
|
GTSReplyToStatus *Status `pg:"-"`
|
|
// Account being replied to
|
|
GTSReplyToAccount *Account `pg:"-"`
|
|
// Status being boosted
|
|
GTSBoostedStatus *Status `pg:"-"`
|
|
// Account of the boosted status
|
|
GTSBoostedAccount *Account `pg:"-"`
|
|
|
|
/*
|
|
AP NON-DATABASE FIELDS
|
|
|
|
These are for convenience while passing the status around internally,
|
|
but these fields should *never* be put in the db.
|
|
*/
|
|
|
|
// AP URI of the status being replied to.
|
|
// Useful when that status doesn't exist in the database yet and we still need to dereference it.
|
|
APReplyToStatusURI string `pg:"-"`
|
|
// The AP URI of the owner/creator of the status.
|
|
// Useful when that account doesn't exist in the database yet and we still need to dereference it.
|
|
APStatusOwnerURI string `pg:"-"`
|
|
}
|
|
|
|
// Visibility represents the visibility granularity of a status.
|
|
type Visibility string
|
|
|
|
const (
|
|
// VisibilityPublic means this status will be visible to everyone on all timelines.
|
|
VisibilityPublic Visibility = "public"
|
|
// VisibilityUnlocked means this status will be visible to everyone, but will only show on home timeline to followers, and in lists.
|
|
VisibilityUnlocked Visibility = "unlocked"
|
|
// VisibilityFollowersOnly means this status is viewable to followers only.
|
|
VisibilityFollowersOnly Visibility = "followers_only"
|
|
// VisibilityMutualsOnly means this status is visible to mutual followers only.
|
|
VisibilityMutualsOnly Visibility = "mutuals_only"
|
|
// VisibilityDirect means this status is visible only to mentioned recipients
|
|
VisibilityDirect Visibility = "direct"
|
|
// VisibilityDefault is used when no other setting can be found
|
|
VisibilityDefault Visibility = "public"
|
|
)
|
|
|
|
// VisibilityAdvanced denotes a set of flags that can be set on a status for fine-tuning visibility and interactivity of the status.
|
|
type VisibilityAdvanced struct {
|
|
/*
|
|
ADVANCED SETTINGS -- These should all default to TRUE.
|
|
|
|
If PUBLIC is selected, they will all be overwritten to TRUE regardless of what is selected.
|
|
If UNLOCKED is selected, any of them can be turned on or off in any combination.
|
|
If FOLLOWERS-ONLY or MUTUALS-ONLY are selected, boostable will always be FALSE. The others can be turned on or off as desired.
|
|
If DIRECT is selected, boostable will be FALSE, and all other flags will be TRUE.
|
|
*/
|
|
// This status will be federated beyond the local timeline(s)
|
|
Federated bool `pg:"default:true"`
|
|
// This status can be boosted/reblogged
|
|
Boostable bool `pg:"default:true"`
|
|
// This status can be replied to
|
|
Replyable bool `pg:"default:true"`
|
|
// This status can be liked/faved
|
|
Likeable bool `pg:"default:true"`
|
|
}
|
|
|
|
// RelevantAccounts denotes accounts that are replied to, boosted by, or mentioned in a status.
|
|
type RelevantAccounts struct {
|
|
ReplyToAccount *Account
|
|
BoostedAccount *Account
|
|
BoostedReplyToAccount *Account
|
|
MentionedAccounts []*Account
|
|
}
|