diff options
Diffstat (limited to 'internal/media/processingemoji.go')
-rw-r--r-- | internal/media/processingemoji.go | 70 |
1 files changed, 32 insertions, 38 deletions
diff --git a/internal/media/processingemoji.go b/internal/media/processingemoji.go index f4265759b..b4e96a946 100644 --- a/internal/media/processingemoji.go +++ b/internal/media/processingemoji.go @@ -22,7 +22,6 @@ import ( errorsv2 "codeberg.org/gruf/go-errors/v2" "codeberg.org/gruf/go-runners" - "github.com/superseriousbusiness/gotosocial/internal/gtscontext" "github.com/superseriousbusiness/gotosocial/internal/gtserror" "github.com/superseriousbusiness/gotosocial/internal/gtsmodel" "github.com/superseriousbusiness/gotosocial/internal/log" @@ -77,42 +76,34 @@ func (p *ProcessingEmoji) load(ctx context.Context) ( defer func() { // This is only done when ctx NOT cancelled. - done = (err == nil || !errorsv2.IsV2(err, + if done = (err == nil || !errorsv2.IsV2(err, context.Canceled, context.DeadlineExceeded, - )) - - if !done { - return - } - - // Anything from here, we - // need to ensure happens - // (i.e. no ctx canceled). - ctx = gtscontext.WithValues( - context.Background(), - ctx, // values - ) - - // On error, clean - // downloaded files. - if err != nil { - p.cleanup(ctx) - } - - if !done { - return + )); done { + // Processing finished, + // whether error or not! + + // Anything from here, we + // need to ensure happens + // (i.e. no ctx canceled). + ctx = context.WithoutCancel(ctx) + + // On error, clean + // downloaded files. + if err != nil { + p.cleanup(ctx) + } + + // Update with latest details, whatever happened. + e := p.mgr.state.DB.UpdateEmoji(ctx, p.emoji) + if e != nil { + log.Errorf(ctx, "error updating emoji in db: %v", e) + } + + // Store values. + p.done = true + p.err = err } - - // Update with latest details, whatever happened. - e := p.mgr.state.DB.UpdateEmoji(ctx, p.emoji) - if e != nil { - log.Errorf(ctx, "error updating emoji in db: %v", e) - } - - // Store final values. - p.done = true - p.err = err }() // Attempt to store media and calculate @@ -122,7 +113,10 @@ func (p *ProcessingEmoji) load(ctx context.Context) ( err = p.store(ctx) return err }) - emoji = p.emoji + + // Return a copy of emoji. + emoji = new(gtsmodel.Emoji) + *emoji = *p.emoji return } @@ -265,11 +259,11 @@ func (p *ProcessingEmoji) store(ctx context.Context) error { // cleanup will remove any traces of processing emoji from storage, // and perform any other necessary cleanup steps after failure. func (p *ProcessingEmoji) cleanup(ctx context.Context) { - var err error + log.Debugf(ctx, "running cleanup of emoji %s", p.emoji.ID) if p.emoji.ImagePath != "" { // Ensure emoji file at path is deleted from storage. - err = p.mgr.state.Storage.Delete(ctx, p.emoji.ImagePath) + err := p.mgr.state.Storage.Delete(ctx, p.emoji.ImagePath) if err != nil && !storage.IsNotFound(err) { log.Errorf(ctx, "error deleting %s: %v", p.emoji.ImagePath, err) } @@ -277,7 +271,7 @@ func (p *ProcessingEmoji) cleanup(ctx context.Context) { if p.emoji.ImageStaticPath != "" { // Ensure emoji static file at path is deleted from storage. - err = p.mgr.state.Storage.Delete(ctx, p.emoji.ImageStaticPath) + err := p.mgr.state.Storage.Delete(ctx, p.emoji.ImageStaticPath) if err != nil && !storage.IsNotFound(err) { log.Errorf(ctx, "error deleting %s: %v", p.emoji.ImageStaticPath, err) } |