summaryrefslogtreecommitdiff
path: root/internal/federation/dereferencing/status.go
diff options
context:
space:
mode:
authorLibravatar tobi <31960611+tsmethurst@users.noreply.github.com>2022-09-26 11:56:01 +0200
committerLibravatar GitHub <noreply@github.com>2022-09-26 11:56:01 +0200
commitc4a08292ee44bc731ff90bad18a3f37e5ee8ef22 (patch)
tree1726f8450ec37f744204a857c3be2bfab17f206c /internal/federation/dereferencing/status.go
parent[bugfix] more nil checks baybeeeeeeeeeeeeeeeeeeee (#854) (diff)
downloadgotosocial-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.go57
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
}