diff options
Diffstat (limited to 'internal/processing/status/util.go')
-rw-r--r-- | internal/processing/status/util.go | 31 |
1 files changed, 20 insertions, 11 deletions
diff --git a/internal/processing/status/util.go b/internal/processing/status/util.go index 13c5b958f..880de1db3 100644 --- a/internal/processing/status/util.go +++ b/internal/processing/status/util.go @@ -249,18 +249,27 @@ func (p *processor) ProcessTags(ctx context.Context, form *apimodel.AdvancedStat } func (p *processor) ProcessEmojis(ctx context.Context, form *apimodel.AdvancedStatusCreateForm, accountID string, status *gtsmodel.Status) error { - gtsEmojis, err := p.db.EmojiStringsToEmojis(ctx, util.DeriveEmojisFromText(form.Status)) - if err != nil { - return fmt.Errorf("error generating emojis from status: %s", err) - } - emojis := make([]string, 0, len(gtsEmojis)) - for _, e := range gtsEmojis { - emojis = append(emojis, e.ID) + // for each emoji shortcode in the text, check if it's an enabled + // emoji on this instance, and if so, add it to the status + emojiShortcodes := util.DeriveEmojisFromText(form.Status) + status.Emojis = make([]*gtsmodel.Emoji, 0, len(emojiShortcodes)) + status.EmojiIDs = make([]string, 0, len(emojiShortcodes)) + + for _, shortcode := range emojiShortcodes { + emoji, err := p.db.GetEmojiByShortcodeDomain(ctx, shortcode, "") + if err != nil { + if err != db.ErrNoEntries { + log.Errorf("error getting local emoji with shortcode %s: %s", shortcode, err) + } + continue + } + + if *emoji.VisibleInPicker && !*emoji.Disabled { + status.Emojis = append(status.Emojis, emoji) + status.EmojiIDs = append(status.EmojiIDs, emoji.ID) + } } - // add full populated gts emojis to the status for passing them around conveniently - status.Emojis = gtsEmojis - // add just the ids of the used emojis to the status for putting in the db - status.EmojiIDs = emojis + return nil } |