summaryrefslogtreecommitdiff
path: root/internal/typeutils/internaltoas.go
diff options
context:
space:
mode:
authorLibravatar tobi <31960611+tsmethurst@users.noreply.github.com>2022-09-15 11:29:05 +0200
committerLibravatar GitHub <noreply@github.com>2022-09-15 11:29:05 +0200
commit11493106734102e4011f85e231433623b73f9cce (patch)
tree83a60818c7b44cc25a3e89f42b22d8c0610d9458 /internal/typeutils/internaltoas.go
parent[docs] Swagger document `/api/v1/custom_emojis` (#824) (diff)
downloadgotosocial-11493106734102e4011f85e231433623b73f9cce.tar.xz
[bugfix] Fix emojis, attachments, and mentions not being serialized correctly sometimes via AP (#829)v0.5.0-rc2
Diffstat (limited to 'internal/typeutils/internaltoas.go')
-rw-r--r--internal/typeutils/internaltoas.go41
1 files changed, 37 insertions, 4 deletions
diff --git a/internal/typeutils/internaltoas.go b/internal/typeutils/internaltoas.go
index cf0e23ca6..6d8a22cab 100644
--- a/internal/typeutils/internaltoas.go
+++ b/internal/typeutils/internaltoas.go
@@ -430,7 +430,18 @@ func (c *converter) StatusToAS(ctx context.Context, s *gtsmodel.Status) (vocab.A
tagProp := streams.NewActivityStreamsTagProperty()
// tag -- mentions
- for _, m := range s.Mentions {
+ mentions := s.Mentions
+ if len(s.MentionIDs) > len(mentions) {
+ mentions = []*gtsmodel.Mention{}
+ for _, mentionID := range s.MentionIDs {
+ mention, err := c.db.GetMention(ctx, mentionID)
+ if err != nil {
+ return nil, fmt.Errorf("StatusToAS: error getting mention %s from database: %s", mentionID, err)
+ }
+ mentions = append(mentions, mention)
+ }
+ }
+ for _, m := range mentions {
asMention, err := c.MentionToAS(ctx, m)
if err != nil {
return nil, fmt.Errorf("StatusToAS: error converting mention to AS mention: %s", err)
@@ -439,7 +450,18 @@ func (c *converter) StatusToAS(ctx context.Context, s *gtsmodel.Status) (vocab.A
}
// tag -- emojis
- for _, emoji := range s.Emojis {
+ emojis := s.Emojis
+ if len(s.EmojiIDs) > len(emojis) {
+ emojis = []*gtsmodel.Emoji{}
+ for _, emojiID := range s.EmojiIDs {
+ emoji, err := c.db.GetEmojiByID(ctx, emojiID)
+ if err != nil {
+ return nil, fmt.Errorf("StatusToAS: error getting emoji %s from database: %s", emojiID, err)
+ }
+ emojis = append(emojis, emoji)
+ }
+ }
+ for _, emoji := range emojis {
asMention, err := c.EmojiToAS(ctx, emoji)
if err != nil {
return nil, fmt.Errorf("StatusToAS: error converting emoji to AS emoji: %s", err)
@@ -522,9 +544,20 @@ func (c *converter) StatusToAS(ctx context.Context, s *gtsmodel.Status) (vocab.A
contentProp.AppendXMLSchemaString(s.Content)
status.SetActivityStreamsContent(contentProp)
- // attachment
+ // attachments
attachmentProp := streams.NewActivityStreamsAttachmentProperty()
- for _, a := range s.Attachments {
+ attachments := s.Attachments
+ if len(s.AttachmentIDs) > len(attachments) {
+ attachments = []*gtsmodel.MediaAttachment{}
+ for _, attachmentID := range s.AttachmentIDs {
+ attachment, err := c.db.GetAttachmentByID(ctx, attachmentID)
+ if err != nil {
+ return nil, fmt.Errorf("StatusToAS: error getting attachment %s from database: %s", attachmentID, err)
+ }
+ attachments = append(attachments, attachment)
+ }
+ }
+ for _, a := range attachments {
doc, err := c.AttachmentToAS(ctx, a)
if err != nil {
return nil, fmt.Errorf("StatusToAS: error converting attachment: %s", err)