summaryrefslogtreecommitdiff
path: root/internal/media/processingemoji.go
diff options
context:
space:
mode:
authorLibravatar tsmethurst <tobi.smethurst@protonmail.com>2022-01-15 17:36:15 +0100
committerLibravatar tsmethurst <tobi.smethurst@protonmail.com>2022-01-15 17:36:15 +0100
commit6bf39d0fc1286bdf2f4760adab52c6eff234d01d (patch)
treee4916598a7a14eab4336909c5fec1de6ed8ad0d4 /internal/media/processingemoji.go
parentstart fixing up emoji processing code (diff)
downloadgotosocial-6bf39d0fc1286bdf2f4760adab52c6eff234d01d.tar.xz
emoji code passing muster
Diffstat (limited to 'internal/media/processingemoji.go')
-rw-r--r--internal/media/processingemoji.go22
1 files changed, 14 insertions, 8 deletions
diff --git a/internal/media/processingemoji.go b/internal/media/processingemoji.go
index eeccdb281..467b500fc 100644
--- a/internal/media/processingemoji.go
+++ b/internal/media/processingemoji.go
@@ -72,6 +72,9 @@ type ProcessingEmoji struct {
storage *kv.KVStore
err error // error created during processing, if any
+
+ // track whether this emoji has already been put in the databse
+ insertedInDB bool
}
// EmojiID returns the ID of the underlying emoji without blocking processing.
@@ -94,6 +97,16 @@ func (p *ProcessingEmoji) LoadEmoji(ctx context.Context) (*gtsmodel.Emoji, error
return nil, err
}
+ // store the result in the database before returning it
+ p.mu.Lock()
+ defer p.mu.Unlock()
+ if !p.insertedInDB {
+ if err := p.database.Put(ctx, p.emoji); err != nil {
+ return nil, err
+ }
+ p.insertedInDB = true
+ }
+
return p.emoji, nil
}
@@ -127,13 +140,6 @@ func (p *ProcessingEmoji) loadStatic(ctx context.Context) (*ImageMeta, error) {
// set appropriate fields on the emoji based on the static version we derived
p.emoji.ImageStaticFileSize = len(static.image)
- // update the emoji in the db
- if err := putOrUpdate(ctx, p.database, p.emoji); err != nil {
- p.err = err
- p.staticState = errored
- return nil, err
- }
-
// set the static on the processing emoji
p.static = static
@@ -197,7 +203,7 @@ func (p *ProcessingEmoji) loadFullSize(ctx context.Context) (*ImageMeta, error)
}
// fetchRawData calls the data function attached to p if it hasn't been called yet,
-// and updates the underlying attachment fields as necessary.
+// and updates the underlying emoji fields as necessary.
// It should only be called from within a function that already has a lock on p!
func (p *ProcessingEmoji) fetchRawData(ctx context.Context) error {
// check if we've already done this and bail early if we have