commit ad6ab037e45264e4100f70675da1d12bbc3d555d
parent ac2bdbbc62e8e3fec16497df05d01999ec7597f0
Author: Sam Lade <sam@sentynel.com>
Date: Tue, 7 Feb 2023 08:58:36 +0000
[bugfix] don't trash emoji in profile fields on edit (#1440)
Diffstat:
1 file changed, 23 insertions(+), 19 deletions(-)
diff --git a/internal/processing/account/update.go b/internal/processing/account/update.go
@@ -53,12 +53,15 @@ func (p *processor) Update(ctx context.Context, account *gtsmodel.Account, form
return nil, gtserror.NewErrorBadRequest(err)
}
account.DisplayName = text.SanitizePlaintext(*form.DisplayName)
+ }
- formatResult := p.formatter.FromPlainEmojiOnly(ctx, p.parseMention, account.ID, "", account.DisplayName)
- for _, emoji := range formatResult.Emojis {
- account.Emojis = append(account.Emojis, emoji)
- account.EmojiIDs = append(account.EmojiIDs, emoji.ID)
- }
+ // Re-parse for emojis regardless of whether the DisplayName changed
+ // because we can't otherwise tell which emojis belong to DisplayName
+ // and which belong to Note
+ formatResult := p.formatter.FromPlainEmojiOnly(ctx, p.parseMention, account.ID, "", account.DisplayName)
+ for _, emoji := range formatResult.Emojis {
+ account.Emojis = append(account.Emojis, emoji)
+ account.EmojiIDs = append(account.EmojiIDs, emoji.ID)
}
if form.Note != nil {
@@ -68,22 +71,23 @@ func (p *processor) Update(ctx context.Context, account *gtsmodel.Account, form
// Set the raw note before processing
account.NoteRaw = *form.Note
+ }
- // Process note to generate a valid HTML representation
- var f text.FormatFunc
- if account.StatusFormat == "markdown" {
- f = p.formatter.FromMarkdown
- } else {
- f = p.formatter.FromPlain
- }
- formatted := f(ctx, p.parseMention, account.ID, "", *form.Note)
+ // As per DisplayName, we need to reparse regardless to keep emojis straight
+ // Process note to generate a valid HTML representation
+ var f text.FormatFunc
+ if account.StatusFormat == "markdown" {
+ f = p.formatter.FromMarkdown
+ } else {
+ f = p.formatter.FromPlain
+ }
+ formatted := f(ctx, p.parseMention, account.ID, "", account.NoteRaw)
- // Set updated HTML-ified note
- account.Note = formatted.HTML
- for _, emoji := range formatted.Emojis {
- account.Emojis = append(account.Emojis, emoji)
- account.EmojiIDs = append(account.EmojiIDs, emoji.ID)
- }
+ // Set updated HTML-ified note
+ account.Note = formatted.HTML
+ for _, emoji := range formatted.Emojis {
+ account.Emojis = append(account.Emojis, emoji)
+ account.EmojiIDs = append(account.EmojiIDs, emoji.ID)
}
if form.Avatar != nil && form.Avatar.Size != 0 {