diff options
author | 2022-09-26 11:56:01 +0200 | |
---|---|---|
committer | 2022-09-26 11:56:01 +0200 | |
commit | c4a08292ee44bc731ff90bad18a3f37e5ee8ef22 (patch) | |
tree | 1726f8450ec37f744204a857c3be2bfab17f206c /internal/federation/dereferencing/status.go | |
parent | [bugfix] more nil checks baybeeeeeeeeeeeeeeeeeeee (#854) (diff) | |
download | gotosocial-c4a08292ee44bc731ff90bad18a3f37e5ee8ef22.tar.xz |
[feature] Show + federate emojis in accounts (#837)
* Start adding account emoji
* get emojis serialized + deserialized nicely
* update tests
* set / retrieve emojis on accounts
* show account emojis in web view
* fetch emojis from db based on ids
* fix typo in test
* lint
* fix pg migration
* update tests
* update emoji checking logic
* update comment
* clarify comments + add some spacing
* tidy up loops a lil (thanks kim)
Diffstat (limited to 'internal/federation/dereferencing/status.go')
-rw-r--r-- | internal/federation/dereferencing/status.go | 57 |
1 files changed, 8 insertions, 49 deletions
diff --git a/internal/federation/dereferencing/status.go b/internal/federation/dereferencing/status.go index 645910d19..bfbc790d8 100644 --- a/internal/federation/dereferencing/status.go +++ b/internal/federation/dereferencing/status.go @@ -406,58 +406,17 @@ func (d *deref) populateStatusAttachments(ctx context.Context, status *gtsmodel. } func (d *deref) populateStatusEmojis(ctx context.Context, status *gtsmodel.Status, requestingUsername string) error { - // At this point we should know: - // * the AP uri of the emoji - // * the domain of the emoji - // * the shortcode of the emoji - // * the remote URL of the image - // This should be enough to dereference the emoji - - gotEmojis := make([]*gtsmodel.Emoji, 0, len(status.Emojis)) - emojiIDs := make([]string, 0, len(status.Emojis)) - - for _, e := range status.Emojis { - var gotEmoji *gtsmodel.Emoji - var err error - - // check if we've already got this emoji in the db - if gotEmoji, err = d.db.GetEmojiByURI(ctx, e.URI); err != nil && err != db.ErrNoEntries { - log.Errorf("populateStatusEmojis: error checking database for emoji %s: %s", e.URI, err) - continue - } - - if gotEmoji == nil { - // it's new! go get it! - newEmojiID, err := id.NewRandomULID() - if err != nil { - log.Errorf("populateStatusEmojis: error generating id for remote emoji %s: %s", e.URI, err) - continue - } - - processingEmoji, err := d.GetRemoteEmoji(ctx, requestingUsername, e.ImageRemoteURL, e.Shortcode, newEmojiID, e.URI, &media.AdditionalEmojiInfo{ - Domain: &e.Domain, - ImageRemoteURL: &e.ImageRemoteURL, - ImageStaticRemoteURL: &e.ImageRemoteURL, - Disabled: e.Disabled, - VisibleInPicker: e.VisibleInPicker, - }) - if err != nil { - log.Errorf("populateStatusEmojis: couldn't get remote emoji %s: %s", e.URI, err) - continue - } - - if gotEmoji, err = processingEmoji.LoadEmoji(ctx); err != nil { - log.Errorf("populateStatusEmojis: couldn't load remote emoji %s: %s", e.URI, err) - continue - } - } + emojis, err := d.populateEmojis(ctx, status.Emojis, requestingUsername) + if err != nil { + return err + } - // if we get here, we either had the emoji already or we successfully fetched it - gotEmojis = append(gotEmojis, gotEmoji) - emojiIDs = append(emojiIDs, gotEmoji.ID) + emojiIDs := make([]string, 0, len(emojis)) + for _, e := range emojis { + emojiIDs = append(emojiIDs, e.ID) } - status.Emojis = gotEmojis + status.Emojis = emojis status.EmojiIDs = emojiIDs return nil } |