diff options
author | 2024-08-03 17:05:38 +0000 | |
---|---|---|
committer | 2024-08-03 19:05:38 +0200 | |
commit | b85a9983d09a177648c9db1dff53ffccb3cef777 (patch) | |
tree | acdef8a405d22901cb77665da4dc54af33b4db11 /internal/processing/admin | |
parent | [chore] Add `media-ffmpeg-pool-size` config var (#3164) (diff) | |
download | gotosocial-b85a9983d09a177648c9db1dff53ffccb3cef777.tar.xz |
[bugfix] fix emoji recaching operations (#3167)
* add test for emoji update image
* update emoji recache to set the instance account id
* don't refresh emoji if only not cached. in that case literally just recache
* code comment
* rename + move a few things
* add some more code comments, and rename some functions to make logic a bit clearer
* remove unnecessary nil check (the value can be nil)
* comment wording
* remove test data output
* handle the case of caching an emoji which has been refreshed then uncached
* allow overwriting on testrig storage as we do now on regular storage
* fix emoji category ID not getting updated
---------
Co-authored-by: tobi <tobi.smethurst@protonmail.com>
Diffstat (limited to 'internal/processing/admin')
-rw-r--r-- | internal/processing/admin/emoji.go | 74 |
1 files changed, 41 insertions, 33 deletions
diff --git a/internal/processing/admin/emoji.go b/internal/processing/admin/emoji.go index 66193ccfe..70e196b95 100644 --- a/internal/processing/admin/emoji.go +++ b/internal/processing/admin/emoji.go @@ -291,13 +291,8 @@ func (p *Processor) emojiUpdateCopy( } // Ensure target emoji is locally cached. - target, err := p.federator.RefreshEmoji( - ctx, + target, err := p.federator.RecacheEmoji(ctx, target, - - // no changes we want to make. - media.AdditionalEmojiInfo{}, - false, ) if err != nil { err := gtserror.Newf("error recaching emoji %s: %w", target.ImageRemoteURL, err) @@ -325,8 +320,8 @@ func (p *Processor) emojiUpdateCopy( // Attempt to create the new local emoji. emoji, errWithCode := p.createEmoji(ctx, - util.PtrOrValue(shortcode, ""), - util.PtrOrValue(categoryName, ""), + util.PtrOrZero(shortcode), + util.PtrOrZero(categoryName), data, ) if errWithCode != nil { @@ -401,35 +396,39 @@ func (p *Processor) emojiUpdateModify( return nil, gtserror.NewErrorBadRequest(errors.New(text), text) } - if categoryName != nil { - if *categoryName != "" { - // A category was provided, get / create relevant emoji category. - category, errWithCode := p.mustGetEmojiCategory(ctx, *categoryName) - if errWithCode != nil { - return nil, errWithCode - } - - if category.ID == emoji.CategoryID { - // There was no change, - // indicate this by unsetting - // the category name pointer. - categoryName = nil - } else { - // Update emoji category. - emoji.CategoryID = category.ID - emoji.Category = category - } - } else { - // Emoji category was unset. - emoji.CategoryID = "" - emoji.Category = nil + // Check if we need to + // set a new category ID. + var newCategoryID *string + switch { + case categoryName == nil: + // No changes. + + case *categoryName == "": + // Emoji category was unset. + newCategoryID = util.Ptr("") + emoji.CategoryID = "" + emoji.Category = nil + + case *categoryName != "": + // A category was provided, get or create relevant emoji category. + category, errWithCode := p.mustGetEmojiCategory(ctx, *categoryName) + if errWithCode != nil { + return nil, errWithCode + } + + // Update emoji category if + // it's different from before. + if category.ID != emoji.CategoryID { + newCategoryID = &category.ID + emoji.CategoryID = category.ID + emoji.Category = category } } // Check whether any image changes were requested. imageUpdated := (image != nil && image.Size > 0) - if !imageUpdated && categoryName != nil { + if !imageUpdated && newCategoryID != nil { // Only updating category; only a single database update required. if err := p.state.DB.UpdateEmoji(ctx, emoji, "category_id"); err != nil { err := gtserror.Newf("error updating emoji in db: %w", err) @@ -463,8 +462,17 @@ func (p *Processor) emojiUpdateModify( return rc, nil } - // Prepare emoji model for recache from new data. - processing := p.media.RecacheEmoji(emoji, data) + // Include category ID + // update if necessary. + ai := media.AdditionalEmojiInfo{} + ai.CategoryID = newCategoryID + + // Prepare emoji model for update+recache from new data. + processing, err := p.media.UpdateEmoji(ctx, emoji, data, ai) + if err != nil { + err := gtserror.Newf("error preparing recache: %w", err) + return nil, gtserror.NewErrorInternalError(err) + } // Load to trigger update + write. emoji, err = processing.Load(ctx) |