summaryrefslogtreecommitdiff
path: root/internal/gtsmodel
diff options
context:
space:
mode:
authorLibravatar Tobi Smethurst <31960611+tsmethurst@users.noreply.github.com>2021-05-21 15:48:26 +0200
committerLibravatar GitHub <noreply@github.com>2021-05-21 15:48:26 +0200
commitd839f27c306eedebdc7cc0311f35b8856cc2bb24 (patch)
tree7a11a3a641f902991d26771c4d3f8e836a2bce7e /internal/gtsmodel
parentupdate progress (diff)
downloadgotosocial-d839f27c306eedebdc7cc0311f35b8856cc2bb24.tar.xz
Follows and relationships (#27)
* Follows -- create and undo, both remote and local * Statuses -- federate new posts, including media, attachments, CWs and image descriptions.
Diffstat (limited to 'internal/gtsmodel')
-rw-r--r--internal/gtsmodel/account.go6
-rw-r--r--internal/gtsmodel/activitystreams.go99
-rw-r--r--internal/gtsmodel/mention.go10
-rw-r--r--internal/gtsmodel/messages.go13
-rw-r--r--internal/gtsmodel/relationship.go49
-rw-r--r--internal/gtsmodel/status.go2
6 files changed, 116 insertions, 63 deletions
diff --git a/internal/gtsmodel/account.go b/internal/gtsmodel/account.go
index 56c401e62..d6ce95cc9 100644
--- a/internal/gtsmodel/account.go
+++ b/internal/gtsmodel/account.go
@@ -76,13 +76,13 @@ type Account struct {
*/
// Does this account need an approval for new followers?
- Locked bool `pg:",default:'true'"`
+ Locked bool
// Should this account be shown in the instance's profile directory?
Discoverable bool
// Default post privacy for this account
Privacy Visibility
// Set posts from this account to sensitive by default?
- Sensitive bool `pg:",default:'false'"`
+ Sensitive bool
// What language does this account post in?
Language string `pg:",default:'en'"`
@@ -107,7 +107,7 @@ type Account struct {
// URL for getting the featured collection list of this account
FeaturedCollectionURI string `pg:",unique"`
// What type of activitypub actor is this account?
- ActorType ActivityStreamsActor
+ ActorType string
// This account is associated with x account id
AlsoKnownAs string
diff --git a/internal/gtsmodel/activitystreams.go b/internal/gtsmodel/activitystreams.go
index f852340bb..3fe6107b5 100644
--- a/internal/gtsmodel/activitystreams.go
+++ b/internal/gtsmodel/activitystreams.go
@@ -18,110 +18,101 @@
package gtsmodel
-// ActivityStreamsObject refers to https://www.w3.org/TR/activitystreams-vocabulary/#object-types
-type ActivityStreamsObject string
-
const (
// ActivityStreamsArticle https://www.w3.org/TR/activitystreams-vocabulary/#dfn-article
- ActivityStreamsArticle ActivityStreamsObject = "Article"
+ ActivityStreamsArticle = "Article"
// ActivityStreamsAudio https://www.w3.org/TR/activitystreams-vocabulary/#dfn-audio
- ActivityStreamsAudio ActivityStreamsObject = "Audio"
+ ActivityStreamsAudio = "Audio"
// ActivityStreamsDocument https://www.w3.org/TR/activitystreams-vocabulary/#dfn-document
- ActivityStreamsDocument ActivityStreamsObject = "Event"
+ ActivityStreamsDocument = "Event"
// ActivityStreamsEvent https://www.w3.org/TR/activitystreams-vocabulary/#dfn-event
- ActivityStreamsEvent ActivityStreamsObject = "Event"
+ ActivityStreamsEvent = "Event"
// ActivityStreamsImage https://www.w3.org/TR/activitystreams-vocabulary/#dfn-image
- ActivityStreamsImage ActivityStreamsObject = "Image"
+ ActivityStreamsImage = "Image"
// ActivityStreamsNote https://www.w3.org/TR/activitystreams-vocabulary/#dfn-note
- ActivityStreamsNote ActivityStreamsObject = "Note"
+ ActivityStreamsNote = "Note"
// ActivityStreamsPage https://www.w3.org/TR/activitystreams-vocabulary/#dfn-page
- ActivityStreamsPage ActivityStreamsObject = "Page"
+ ActivityStreamsPage = "Page"
// ActivityStreamsPlace https://www.w3.org/TR/activitystreams-vocabulary/#dfn-place
- ActivityStreamsPlace ActivityStreamsObject = "Place"
+ ActivityStreamsPlace = "Place"
// ActivityStreamsProfile https://www.w3.org/TR/activitystreams-vocabulary/#dfn-profile
- ActivityStreamsProfile ActivityStreamsObject = "Profile"
+ ActivityStreamsProfile = "Profile"
// ActivityStreamsRelationship https://www.w3.org/TR/activitystreams-vocabulary/#dfn-relationship
- ActivityStreamsRelationship ActivityStreamsObject = "Relationship"
+ ActivityStreamsRelationship = "Relationship"
// ActivityStreamsTombstone https://www.w3.org/TR/activitystreams-vocabulary/#dfn-tombstone
- ActivityStreamsTombstone ActivityStreamsObject = "Tombstone"
+ ActivityStreamsTombstone = "Tombstone"
// ActivityStreamsVideo https://www.w3.org/TR/activitystreams-vocabulary/#dfn-video
- ActivityStreamsVideo ActivityStreamsObject = "Video"
+ ActivityStreamsVideo = "Video"
)
-// ActivityStreamsActor refers to https://www.w3.org/TR/activitystreams-vocabulary/#actor-types
-type ActivityStreamsActor string
-
const (
// ActivityStreamsApplication https://www.w3.org/TR/activitystreams-vocabulary/#dfn-application
- ActivityStreamsApplication ActivityStreamsActor = "Application"
+ ActivityStreamsApplication = "Application"
// ActivityStreamsGroup https://www.w3.org/TR/activitystreams-vocabulary/#dfn-group
- ActivityStreamsGroup ActivityStreamsActor = "Group"
+ ActivityStreamsGroup = "Group"
// ActivityStreamsOrganization https://www.w3.org/TR/activitystreams-vocabulary/#dfn-organization
- ActivityStreamsOrganization ActivityStreamsActor = "Organization"
+ ActivityStreamsOrganization = "Organization"
// ActivityStreamsPerson https://www.w3.org/TR/activitystreams-vocabulary/#dfn-person
- ActivityStreamsPerson ActivityStreamsActor = "Person"
+ ActivityStreamsPerson = "Person"
// ActivityStreamsService https://www.w3.org/TR/activitystreams-vocabulary/#dfn-service
- ActivityStreamsService ActivityStreamsActor = "Service"
+ ActivityStreamsService = "Service"
)
-// ActivityStreamsActivity refers to https://www.w3.org/TR/activitystreams-vocabulary/#activity-types
-type ActivityStreamsActivity string
-
const (
// ActivityStreamsAccept https://www.w3.org/TR/activitystreams-vocabulary/#dfn-accept
- ActivityStreamsAccept ActivityStreamsActivity = "Accept"
+ ActivityStreamsAccept = "Accept"
// ActivityStreamsAdd https://www.w3.org/TR/activitystreams-vocabulary/#dfn-add
- ActivityStreamsAdd ActivityStreamsActivity = "Add"
+ ActivityStreamsAdd = "Add"
// ActivityStreamsAnnounce https://www.w3.org/TR/activitystreams-vocabulary/#dfn-announce
- ActivityStreamsAnnounce ActivityStreamsActivity = "Announce"
+ ActivityStreamsAnnounce = "Announce"
// ActivityStreamsArrive https://www.w3.org/TR/activitystreams-vocabulary/#dfn-arrive
- ActivityStreamsArrive ActivityStreamsActivity = "Arrive"
+ ActivityStreamsArrive = "Arrive"
// ActivityStreamsBlock https://www.w3.org/TR/activitystreams-vocabulary/#dfn-block
- ActivityStreamsBlock ActivityStreamsActivity = "Block"
+ ActivityStreamsBlock = "Block"
// ActivityStreamsCreate https://www.w3.org/TR/activitystreams-vocabulary/#dfn-create
- ActivityStreamsCreate ActivityStreamsActivity = "Create"
+ ActivityStreamsCreate = "Create"
// ActivityStreamsDelete https://www.w3.org/TR/activitystreams-vocabulary/#dfn-delete
- ActivityStreamsDelete ActivityStreamsActivity = "Delete"
+ ActivityStreamsDelete = "Delete"
// ActivityStreamsDislike https://www.w3.org/TR/activitystreams-vocabulary/#dfn-dislike
- ActivityStreamsDislike ActivityStreamsActivity = "Dislike"
+ ActivityStreamsDislike = "Dislike"
// ActivityStreamsFlag https://www.w3.org/TR/activitystreams-vocabulary/#dfn-flag
- ActivityStreamsFlag ActivityStreamsActivity = "Flag"
+ ActivityStreamsFlag = "Flag"
// ActivityStreamsFollow https://www.w3.org/TR/activitystreams-vocabulary/#dfn-follow
- ActivityStreamsFollow ActivityStreamsActivity = "Follow"
+ ActivityStreamsFollow = "Follow"
// ActivityStreamsIgnore https://www.w3.org/TR/activitystreams-vocabulary/#dfn-ignore
- ActivityStreamsIgnore ActivityStreamsActivity = "Ignore"
+ ActivityStreamsIgnore = "Ignore"
// ActivityStreamsInvite https://www.w3.org/TR/activitystreams-vocabulary/#dfn-invite
- ActivityStreamsInvite ActivityStreamsActivity = "Invite"
+ ActivityStreamsInvite = "Invite"
// ActivityStreamsJoin https://www.w3.org/TR/activitystreams-vocabulary/#dfn-join
- ActivityStreamsJoin ActivityStreamsActivity = "Join"
+ ActivityStreamsJoin = "Join"
// ActivityStreamsLeave https://www.w3.org/TR/activitystreams-vocabulary/#dfn-leave
- ActivityStreamsLeave ActivityStreamsActivity = "Leave"
+ ActivityStreamsLeave = "Leave"
// ActivityStreamsLike https://www.w3.org/TR/activitystreams-vocabulary/#dfn-like
- ActivityStreamsLike ActivityStreamsActivity = "Like"
+ ActivityStreamsLike = "Like"
// ActivityStreamsListen https://www.w3.org/TR/activitystreams-vocabulary/#dfn-listen
- ActivityStreamsListen ActivityStreamsActivity = "Listen"
+ ActivityStreamsListen = "Listen"
// ActivityStreamsMove https://www.w3.org/TR/activitystreams-vocabulary/#dfn-move
- ActivityStreamsMove ActivityStreamsActivity = "Move"
+ ActivityStreamsMove = "Move"
// ActivityStreamsOffer https://www.w3.org/TR/activitystreams-vocabulary/#dfn-offer
- ActivityStreamsOffer ActivityStreamsActivity = "Offer"
+ ActivityStreamsOffer = "Offer"
// ActivityStreamsQuestion https://www.w3.org/TR/activitystreams-vocabulary/#dfn-question
- ActivityStreamsQuestion ActivityStreamsActivity = "Question"
+ ActivityStreamsQuestion = "Question"
// ActivityStreamsReject https://www.w3.org/TR/activitystreams-vocabulary/#dfn-reject
- ActivityStreamsReject ActivityStreamsActivity = "Reject"
+ ActivityStreamsReject = "Reject"
// ActivityStreamsRead https://www.w3.org/TR/activitystreams-vocabulary/#dfn-read
- ActivityStreamsRead ActivityStreamsActivity = "Read"
+ ActivityStreamsRead = "Read"
// ActivityStreamsRemove https://www.w3.org/TR/activitystreams-vocabulary/#dfn-remove
- ActivityStreamsRemove ActivityStreamsActivity = "Remove"
+ ActivityStreamsRemove = "Remove"
// ActivityStreamsTentativeReject https://www.w3.org/TR/activitystreams-vocabulary/#dfn-tentativereject
- ActivityStreamsTentativeReject ActivityStreamsActivity = "TentativeReject"
+ ActivityStreamsTentativeReject = "TentativeReject"
// ActivityStreamsTentativeAccept https://www.w3.org/TR/activitystreams-vocabulary/#dfn-tentativeaccept
- ActivityStreamsTentativeAccept ActivityStreamsActivity = "TentativeAccept"
+ ActivityStreamsTentativeAccept = "TentativeAccept"
// ActivityStreamsTravel https://www.w3.org/TR/activitystreams-vocabulary/#dfn-travel
- ActivityStreamsTravel ActivityStreamsActivity = "Travel"
+ ActivityStreamsTravel = "Travel"
// ActivityStreamsUndo https://www.w3.org/TR/activitystreams-vocabulary/#dfn-undo
- ActivityStreamsUndo ActivityStreamsActivity = "Undo"
+ ActivityStreamsUndo = "Undo"
// ActivityStreamsUpdate https://www.w3.org/TR/activitystreams-vocabulary/#dfn-update
- ActivityStreamsUpdate ActivityStreamsActivity = "Update"
+ ActivityStreamsUpdate = "Update"
// ActivityStreamsView https://www.w3.org/TR/activitystreams-vocabulary/#dfn-view
- ActivityStreamsView ActivityStreamsActivity = "View"
+ ActivityStreamsView = "View"
)
diff --git a/internal/gtsmodel/mention.go b/internal/gtsmodel/mention.go
index 8e56a1b36..3abe9c915 100644
--- a/internal/gtsmodel/mention.go
+++ b/internal/gtsmodel/mention.go
@@ -38,6 +38,14 @@ type Mention struct {
TargetAccountID string `pg:",notnull"`
// Prevent this mention from generating a notification?
Silent bool
+
+ /*
+ NON-DATABASE CONVENIENCE FIELDS
+ These fields are just for convenience while passing the mention
+ around internally, to make fewer database calls and whatnot. They're
+ not meant to be put in the database!
+ */
+
// NameString is for putting in the namestring of the mentioned user
// before the mention is dereferenced. Should be in a form along the lines of:
// @whatever_username@example.org
@@ -48,4 +56,6 @@ type Mention struct {
//
// This will not be put in the database, it's just for convenience.
MentionedAccountURI string `pg:"-"`
+ // A pointer to the gtsmodel account of the mentioned account.
+ GTSAccount *Account `pg:"-"`
}
diff --git a/internal/gtsmodel/messages.go b/internal/gtsmodel/messages.go
index 43f30634a..910c74898 100644
--- a/internal/gtsmodel/messages.go
+++ b/internal/gtsmodel/messages.go
@@ -9,9 +9,11 @@ package gtsmodel
// FromClientAPI wraps a message that travels from client API into the processor
type FromClientAPI struct {
- APObjectType ActivityStreamsObject
- APActivityType ActivityStreamsActivity
+ APObjectType string
+ APActivityType string
GTSModel interface{}
+ OriginAccount *Account
+ TargetAccount *Account
}
// // ToFederator wraps a message that travels from the processor into the federator
@@ -23,7 +25,8 @@ type FromClientAPI struct {
// FromFederator wraps a message that travels from the federator into the processor
type FromFederator struct {
- APObjectType ActivityStreamsObject
- APActivityType ActivityStreamsActivity
- GTSModel interface{}
+ APObjectType string
+ APActivityType string
+ GTSModel interface{}
+ ReceivingAccount *Account
}
diff --git a/internal/gtsmodel/relationship.go b/internal/gtsmodel/relationship.go
new file mode 100644
index 000000000..4e6cc03f6
--- /dev/null
+++ b/internal/gtsmodel/relationship.go
@@ -0,0 +1,49 @@
+/*
+ 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
+
+// Relationship describes a requester's relationship with another account.
+type Relationship struct {
+ // The account id.
+ ID string
+ // Are you following this user?
+ Following bool
+ // Are you receiving this user's boosts in your home timeline?
+ ShowingReblogs bool
+ // Have you enabled notifications for this user?
+ Notifying bool
+ // Are you followed by this user?
+ FollowedBy bool
+ // Are you blocking this user?
+ Blocking bool
+ // Is this user blocking you?
+ BlockedBy bool
+ // Are you muting this user?
+ Muting bool
+ // Are you muting notifications from this user?
+ MutingNotifications bool
+ // Do you have a pending follow request for this user?
+ Requested bool
+ // Are you blocking this user's domain?
+ DomainBlocking bool
+ // Are you featuring this user on your profile?
+ Endorsed bool
+ // Your note on this account.
+ Note string
+}
diff --git a/internal/gtsmodel/status.go b/internal/gtsmodel/status.go
index d0d479520..b5ac8def1 100644
--- a/internal/gtsmodel/status.go
+++ b/internal/gtsmodel/status.go
@@ -66,7 +66,7 @@ type Status struct {
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
+ ActivityStreamsType string
// Original text of the status without formatting
Text string
// Has this status been pinned by its owner?