summaryrefslogtreecommitdiff
path: root/internal/processing/media
diff options
context:
space:
mode:
Diffstat (limited to 'internal/processing/media')
-rw-r--r--internal/processing/media/create.go9
-rw-r--r--internal/processing/media/delete.go22
-rw-r--r--internal/processing/media/getfile.go15
-rw-r--r--internal/processing/media/getmedia.go9
-rw-r--r--internal/processing/media/media.go12
-rw-r--r--internal/processing/media/update.go13
6 files changed, 43 insertions, 37 deletions
diff --git a/internal/processing/media/create.go b/internal/processing/media/create.go
index 5b8cdf604..648e4d46a 100644
--- a/internal/processing/media/create.go
+++ b/internal/processing/media/create.go
@@ -20,6 +20,7 @@ package media
import (
"bytes"
+ "context"
"errors"
"fmt"
"io"
@@ -29,7 +30,7 @@ import (
"github.com/superseriousbusiness/gotosocial/internal/text"
)
-func (p *processor) Create(account *gtsmodel.Account, form *apimodel.AttachmentRequest) (*apimodel.Attachment, error) {
+func (p *processor) Create(ctx context.Context, account *gtsmodel.Account, form *apimodel.AttachmentRequest) (*apimodel.Attachment, error) {
// open the attachment and extract the bytes from it
f, err := form.File.Open()
if err != nil {
@@ -45,7 +46,7 @@ func (p *processor) Create(account *gtsmodel.Account, form *apimodel.AttachmentR
}
// allow the mediaHandler to work its magic of processing the attachment bytes, and putting them in whatever storage backend we're using
- attachment, err := p.mediaHandler.ProcessAttachment(buf.Bytes(), account.ID, "")
+ attachment, err := p.mediaHandler.ProcessAttachment(ctx, buf.Bytes(), account.ID, "")
if err != nil {
return nil, fmt.Errorf("error reading attachment: %s", err)
}
@@ -66,13 +67,13 @@ func (p *processor) Create(account *gtsmodel.Account, form *apimodel.AttachmentR
// prepare the frontend representation now -- if there are any errors here at least we can bail without
// having already put something in the database and then having to clean it up again (eugh)
- mastoAttachment, err := p.tc.AttachmentToMasto(attachment)
+ mastoAttachment, err := p.tc.AttachmentToMasto(ctx, attachment)
if err != nil {
return nil, fmt.Errorf("error parsing media attachment to frontend type: %s", err)
}
// now we can confidently put the attachment in the database
- if err := p.db.Put(attachment); err != nil {
+ if err := p.db.Put(ctx, attachment); err != nil {
return nil, fmt.Errorf("error storing media attachment in db: %s", err)
}
diff --git a/internal/processing/media/delete.go b/internal/processing/media/delete.go
index b5ea8c806..281ddba03 100644
--- a/internal/processing/media/delete.go
+++ b/internal/processing/media/delete.go
@@ -1,17 +1,17 @@
package media
import (
+ "context"
"fmt"
"strings"
"github.com/superseriousbusiness/gotosocial/internal/db"
"github.com/superseriousbusiness/gotosocial/internal/gtserror"
- "github.com/superseriousbusiness/gotosocial/internal/gtsmodel"
)
-func (p *processor) Delete(mediaAttachmentID string) gtserror.WithCode {
- a := &gtsmodel.MediaAttachment{}
- if err := p.db.GetByID(mediaAttachmentID, a); err != nil {
+func (p *processor) Delete(ctx context.Context, mediaAttachmentID string) gtserror.WithCode {
+ attachment, err := p.db.GetAttachmentByID(ctx, mediaAttachmentID)
+ if err != nil {
if err == db.ErrNoEntries {
// attachment already gone
return nil
@@ -23,21 +23,21 @@ func (p *processor) Delete(mediaAttachmentID string) gtserror.WithCode {
errs := []string{}
// delete the thumbnail from storage
- if a.Thumbnail.Path != "" {
- if err := p.storage.RemoveFileAt(a.Thumbnail.Path); err != nil {
- errs = append(errs, fmt.Sprintf("remove thumbnail at path %s: %s", a.Thumbnail.Path, err))
+ if attachment.Thumbnail.Path != "" {
+ if err := p.storage.RemoveFileAt(attachment.Thumbnail.Path); err != nil {
+ errs = append(errs, fmt.Sprintf("remove thumbnail at path %s: %s", attachment.Thumbnail.Path, err))
}
}
// delete the file from storage
- if a.File.Path != "" {
- if err := p.storage.RemoveFileAt(a.File.Path); err != nil {
- errs = append(errs, fmt.Sprintf("remove file at path %s: %s", a.File.Path, err))
+ if attachment.File.Path != "" {
+ if err := p.storage.RemoveFileAt(attachment.File.Path); err != nil {
+ errs = append(errs, fmt.Sprintf("remove file at path %s: %s", attachment.File.Path, err))
}
}
// delete the attachment
- if err := p.db.DeleteByID(mediaAttachmentID, a); err != nil {
+ if err := p.db.DeleteByID(ctx, mediaAttachmentID, attachment); err != nil {
if err != db.ErrNoEntries {
errs = append(errs, fmt.Sprintf("remove attachment: %s", err))
}
diff --git a/internal/processing/media/getfile.go b/internal/processing/media/getfile.go
index 01288c56d..c9c9b556d 100644
--- a/internal/processing/media/getfile.go
+++ b/internal/processing/media/getfile.go
@@ -19,6 +19,7 @@
package media
import (
+ "context"
"fmt"
"strings"
@@ -28,7 +29,7 @@ import (
"github.com/superseriousbusiness/gotosocial/internal/media"
)
-func (p *processor) GetFile(account *gtsmodel.Account, form *apimodel.GetContentRequestForm) (*apimodel.Content, error) {
+func (p *processor) GetFile(ctx context.Context, account *gtsmodel.Account, form *apimodel.GetContentRequestForm) (*apimodel.Content, error) {
// parse the form fields
mediaSize, err := media.ParseMediaSize(form.MediaSize)
if err != nil {
@@ -47,8 +48,8 @@ func (p *processor) GetFile(account *gtsmodel.Account, form *apimodel.GetContent
wantedMediaID := spl[0]
// get the account that owns the media and make sure it's not suspended
- acct := &gtsmodel.Account{}
- if err := p.db.GetByID(form.AccountID, acct); err != nil {
+ acct, err := p.db.GetAccountByID(ctx, form.AccountID)
+ if err != nil {
return nil, gtserror.NewErrorNotFound(fmt.Errorf("account with id %s could not be selected from the db: %s", form.AccountID, err))
}
if !acct.SuspendedAt.IsZero() {
@@ -57,7 +58,7 @@ func (p *processor) GetFile(account *gtsmodel.Account, form *apimodel.GetContent
// make sure the requesting account and the media account don't block each other
if account != nil {
- blocked, err := p.db.IsBlocked(account.ID, form.AccountID, true)
+ blocked, err := p.db.IsBlocked(ctx, account.ID, form.AccountID, true)
if err != nil {
return nil, gtserror.NewErrorNotFound(fmt.Errorf("block status could not be established between accounts %s and %s: %s", form.AccountID, account.ID, err))
}
@@ -73,7 +74,7 @@ func (p *processor) GetFile(account *gtsmodel.Account, form *apimodel.GetContent
switch mediaType {
case media.Emoji:
e := &gtsmodel.Emoji{}
- if err := p.db.GetByID(wantedMediaID, e); err != nil {
+ if err := p.db.GetByID(ctx, wantedMediaID, e); err != nil {
return nil, gtserror.NewErrorNotFound(fmt.Errorf("emoji %s could not be taken from the db: %s", wantedMediaID, err))
}
if e.Disabled {
@@ -90,8 +91,8 @@ func (p *processor) GetFile(account *gtsmodel.Account, form *apimodel.GetContent
return nil, gtserror.NewErrorNotFound(fmt.Errorf("media size %s not recognized for emoji", mediaSize))
}
case media.Attachment, media.Header, media.Avatar:
- a := &gtsmodel.MediaAttachment{}
- if err := p.db.GetByID(wantedMediaID, a); err != nil {
+ a, err := p.db.GetAttachmentByID(ctx, wantedMediaID)
+ if err != nil {
return nil, gtserror.NewErrorNotFound(fmt.Errorf("attachment %s could not be taken from the db: %s", wantedMediaID, err))
}
if a.AccountID != form.AccountID {
diff --git a/internal/processing/media/getmedia.go b/internal/processing/media/getmedia.go
index 380a54cc2..91608e90d 100644
--- a/internal/processing/media/getmedia.go
+++ b/internal/processing/media/getmedia.go
@@ -19,6 +19,7 @@
package media
import (
+ "context"
"errors"
"fmt"
@@ -28,9 +29,9 @@ import (
"github.com/superseriousbusiness/gotosocial/internal/gtsmodel"
)
-func (p *processor) GetMedia(account *gtsmodel.Account, mediaAttachmentID string) (*apimodel.Attachment, gtserror.WithCode) {
- attachment := &gtsmodel.MediaAttachment{}
- if err := p.db.GetByID(mediaAttachmentID, attachment); err != nil {
+func (p *processor) GetMedia(ctx context.Context, account *gtsmodel.Account, mediaAttachmentID string) (*apimodel.Attachment, gtserror.WithCode) {
+ attachment, err := p.db.GetAttachmentByID(ctx, mediaAttachmentID)
+ if err != nil {
if err == db.ErrNoEntries {
// attachment doesn't exist
return nil, gtserror.NewErrorNotFound(errors.New("attachment doesn't exist in the db"))
@@ -42,7 +43,7 @@ func (p *processor) GetMedia(account *gtsmodel.Account, mediaAttachmentID string
return nil, gtserror.NewErrorNotFound(errors.New("attachment not owned by requesting account"))
}
- a, err := p.tc.AttachmentToMasto(attachment)
+ a, err := p.tc.AttachmentToMasto(ctx, attachment)
if err != nil {
return nil, gtserror.NewErrorNotFound(fmt.Errorf("error converting attachment: %s", err))
}
diff --git a/internal/processing/media/media.go b/internal/processing/media/media.go
index 79c9a7e18..6b88143e2 100644
--- a/internal/processing/media/media.go
+++ b/internal/processing/media/media.go
@@ -19,6 +19,8 @@
package media
import (
+ "context"
+
"github.com/sirupsen/logrus"
apimodel "github.com/superseriousbusiness/gotosocial/internal/api/model"
"github.com/superseriousbusiness/gotosocial/internal/blob"
@@ -33,12 +35,12 @@ import (
// Processor wraps a bunch of functions for processing media actions.
type Processor interface {
// Create creates a new media attachment belonging to the given account, using the request form.
- Create(account *gtsmodel.Account, form *apimodel.AttachmentRequest) (*apimodel.Attachment, error)
+ Create(ctx context.Context, account *gtsmodel.Account, form *apimodel.AttachmentRequest) (*apimodel.Attachment, error)
// Delete deletes the media attachment with the given ID, including all files pertaining to that attachment.
- Delete(mediaAttachmentID string) gtserror.WithCode
- GetFile(account *gtsmodel.Account, form *apimodel.GetContentRequestForm) (*apimodel.Content, error)
- GetMedia(account *gtsmodel.Account, mediaAttachmentID string) (*apimodel.Attachment, gtserror.WithCode)
- Update(account *gtsmodel.Account, mediaAttachmentID string, form *apimodel.AttachmentUpdateRequest) (*apimodel.Attachment, gtserror.WithCode)
+ Delete(ctx context.Context, mediaAttachmentID string) gtserror.WithCode
+ GetFile(ctx context.Context, account *gtsmodel.Account, form *apimodel.GetContentRequestForm) (*apimodel.Content, error)
+ GetMedia(ctx context.Context, account *gtsmodel.Account, mediaAttachmentID string) (*apimodel.Attachment, gtserror.WithCode)
+ Update(ctx context.Context, account *gtsmodel.Account, mediaAttachmentID string, form *apimodel.AttachmentUpdateRequest) (*apimodel.Attachment, gtserror.WithCode)
}
type processor struct {
diff --git a/internal/processing/media/update.go b/internal/processing/media/update.go
index 89ed08ac1..6f15f2ace 100644
--- a/internal/processing/media/update.go
+++ b/internal/processing/media/update.go
@@ -19,6 +19,7 @@
package media
import (
+ "context"
"errors"
"fmt"
@@ -29,9 +30,9 @@ import (
"github.com/superseriousbusiness/gotosocial/internal/text"
)
-func (p *processor) Update(account *gtsmodel.Account, mediaAttachmentID string, form *apimodel.AttachmentUpdateRequest) (*apimodel.Attachment, gtserror.WithCode) {
- attachment := &gtsmodel.MediaAttachment{}
- if err := p.db.GetByID(mediaAttachmentID, attachment); err != nil {
+func (p *processor) Update(ctx context.Context, account *gtsmodel.Account, mediaAttachmentID string, form *apimodel.AttachmentUpdateRequest) (*apimodel.Attachment, gtserror.WithCode) {
+ attachment, err := p.db.GetAttachmentByID(ctx, mediaAttachmentID)
+ if err != nil {
if err == db.ErrNoEntries {
// attachment doesn't exist
return nil, gtserror.NewErrorNotFound(errors.New("attachment doesn't exist in the db"))
@@ -45,7 +46,7 @@ func (p *processor) Update(account *gtsmodel.Account, mediaAttachmentID string,
if form.Description != nil {
attachment.Description = text.RemoveHTML(*form.Description)
- if err := p.db.UpdateByID(mediaAttachmentID, attachment); err != nil {
+ if err := p.db.UpdateByID(ctx, mediaAttachmentID, attachment); err != nil {
return nil, gtserror.NewErrorInternalError(fmt.Errorf("database error updating description: %s", err))
}
}
@@ -57,12 +58,12 @@ func (p *processor) Update(account *gtsmodel.Account, mediaAttachmentID string,
}
attachment.FileMeta.Focus.X = focusx
attachment.FileMeta.Focus.Y = focusy
- if err := p.db.UpdateByID(mediaAttachmentID, attachment); err != nil {
+ if err := p.db.UpdateByID(ctx, mediaAttachmentID, attachment); err != nil {
return nil, gtserror.NewErrorInternalError(fmt.Errorf("database error updating focus: %s", err))
}
}
- a, err := p.tc.AttachmentToMasto(attachment)
+ a, err := p.tc.AttachmentToMasto(ctx, attachment)
if err != nil {
return nil, gtserror.NewErrorNotFound(fmt.Errorf("error converting attachment: %s", err))
}