2021-05-27 14:06:24 +00:00
|
|
|
package typeutils
|
|
|
|
|
|
|
|
import (
|
2021-08-25 13:34:33 +00:00
|
|
|
"context"
|
2021-05-27 14:06:24 +00:00
|
|
|
"fmt"
|
|
|
|
"time"
|
|
|
|
|
|
|
|
"github.com/superseriousbusiness/gotosocial/internal/gtsmodel"
|
2021-06-13 16:42:28 +00:00
|
|
|
"github.com/superseriousbusiness/gotosocial/internal/id"
|
2021-05-27 14:06:24 +00:00
|
|
|
"github.com/superseriousbusiness/gotosocial/internal/util"
|
|
|
|
)
|
|
|
|
|
2021-08-25 13:34:33 +00:00
|
|
|
func (c *converter) FollowRequestToFollow(ctx context.Context, f *gtsmodel.FollowRequest) *gtsmodel.Follow {
|
2021-05-27 14:06:24 +00:00
|
|
|
return >smodel.Follow{
|
|
|
|
ID: f.ID,
|
|
|
|
CreatedAt: f.CreatedAt,
|
|
|
|
UpdatedAt: f.UpdatedAt,
|
|
|
|
AccountID: f.AccountID,
|
|
|
|
TargetAccountID: f.TargetAccountID,
|
|
|
|
ShowReblogs: f.ShowReblogs,
|
|
|
|
URI: f.URI,
|
|
|
|
Notify: f.Notify,
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2021-08-25 13:34:33 +00:00
|
|
|
func (c *converter) StatusToBoost(ctx context.Context, s *gtsmodel.Status, boostingAccount *gtsmodel.Account) (*gtsmodel.Status, error) {
|
2021-05-27 14:06:24 +00:00
|
|
|
// the wrapper won't use the same ID as the boosted status so we generate some new UUIDs
|
2021-12-07 12:31:39 +00:00
|
|
|
uris := util.GenerateURIsForAccount(boostingAccount.Username)
|
2021-06-13 16:42:28 +00:00
|
|
|
boostWrapperStatusID, err := id.NewULID()
|
|
|
|
if err != nil {
|
|
|
|
return nil, err
|
|
|
|
}
|
2021-05-27 14:06:24 +00:00
|
|
|
boostWrapperStatusURI := fmt.Sprintf("%s/%s", uris.StatusesURI, boostWrapperStatusID)
|
|
|
|
boostWrapperStatusURL := fmt.Sprintf("%s/%s", uris.StatusesURL, boostWrapperStatusID)
|
|
|
|
|
|
|
|
local := true
|
|
|
|
if boostingAccount.Domain != "" {
|
|
|
|
local = false
|
|
|
|
}
|
|
|
|
|
|
|
|
boostWrapperStatus := >smodel.Status{
|
|
|
|
ID: boostWrapperStatusID,
|
|
|
|
URI: boostWrapperStatusURI,
|
|
|
|
URL: boostWrapperStatusURL,
|
|
|
|
|
|
|
|
// the boosted status is not created now, but the boost certainly is
|
2021-06-17 16:02:33 +00:00
|
|
|
CreatedAt: time.Now(),
|
|
|
|
UpdatedAt: time.Now(),
|
|
|
|
Local: local,
|
|
|
|
AccountID: boostingAccount.ID,
|
|
|
|
AccountURI: boostingAccount.URI,
|
2021-05-27 14:06:24 +00:00
|
|
|
|
|
|
|
// replies can be boosted, but boosts are never replies
|
|
|
|
InReplyToID: "",
|
|
|
|
InReplyToAccountID: "",
|
|
|
|
|
|
|
|
// these will all be wrapped in the boosted status so set them empty here
|
2021-08-20 10:26:56 +00:00
|
|
|
AttachmentIDs: []string{},
|
|
|
|
TagIDs: []string{},
|
|
|
|
MentionIDs: []string{},
|
|
|
|
EmojiIDs: []string{},
|
2021-05-27 14:06:24 +00:00
|
|
|
|
|
|
|
// the below fields will be taken from the target status
|
2021-06-13 16:42:28 +00:00
|
|
|
Content: s.Content,
|
2021-05-27 14:06:24 +00:00
|
|
|
ContentWarning: s.ContentWarning,
|
|
|
|
ActivityStreamsType: s.ActivityStreamsType,
|
|
|
|
Sensitive: s.Sensitive,
|
|
|
|
Language: s.Language,
|
|
|
|
Text: s.Text,
|
|
|
|
BoostOfID: s.ID,
|
2021-07-11 14:22:21 +00:00
|
|
|
BoostOfAccountID: s.AccountID,
|
2021-05-27 14:06:24 +00:00
|
|
|
Visibility: s.Visibility,
|
2021-09-09 14:15:25 +00:00
|
|
|
Federated: s.Federated,
|
|
|
|
Boostable: s.Boostable,
|
|
|
|
Replyable: s.Replyable,
|
|
|
|
Likeable: s.Likeable,
|
2021-05-27 14:06:24 +00:00
|
|
|
|
|
|
|
// attach these here for convenience -- the boosted status/account won't go in the DB
|
|
|
|
// but they're needed in the processor and for the frontend. Since we have them, we can
|
|
|
|
// attach them so we don't need to fetch them again later (save some DB calls)
|
2021-08-20 10:26:56 +00:00
|
|
|
BoostOf: s,
|
2021-05-27 14:06:24 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
return boostWrapperStatus, nil
|
|
|
|
}
|